c語言帶通濾波,C語言低通濾波器

本文目錄一覽:

求:一個關於FIR帶通濾波器的C語言設計程序 代碼

short h[], short y[])

{

int i, j, sum; for (j = 0; j 100; j++) {

sum = 0;

for (i = 0; i 32; i++)

sum += x[i+j] * h[i];

y[j] = sum 15;

}

}

2

void fir(short x[], short h[], short y[])

{

int i, j, sum0, sum1;

short x0,x1,h0,h1; for (j = 0; j 100; j+=2) {

sum0 = 0;

sum1 = 0;

x0 = x[j];

for (i = 0; i 32; i+=2){

x1 = x[j+i+1];

h0 = h[i];

sum0 += x0 * h0;

sum1 += x1 * h0;

x0 = x[j+i+2];

h1 = h[i+1];

sum0 += x1 * h1;

sum1 += x0 * h1;

}

y[j] = sum0 15;

y[j+1] = sum1 15;

}

}

3

void fir(short x[], short h[], short y[])

{

int i, j, sum0, sum1;

short x0,x1,x2,x3,x4,x5,x6,x7,h0,h1,h2,h3,h4,h5,h6,h7; for (j = 0; j 100; j+=2) {

sum0 = 0;

sum1 = 0;

x0 = x[j];

for (i = 0; i 32; i+=8){

x1 = x[j+i+1];

h0 = h[i];

sum0 += x0 * h0;

sum1 += x1 * h0;

x2 = x[j+i+2];

h1 = h[i+1];

sum0 += x1 * h1;

sum1 += x2 * h1;

x3 = x[j+i+3];

h2 = h[i+2];

sum0 += x2 * h2;

sum1 += x3 * h2;

x4 = x[j+i+4];

h3 = h[i+3];

sum0 += x3 * h3;

sum1 += x4 * h3;

x5 = x[j+i+5];

h4 = h[i+4];

sum0 += x4 * h4;

sum1 += x5 * h4;

x6 = x[j+i+6];

h5 = h[i+5];

sum0 += x5 * h5;

sum1 += x6 * h5;

x7 = x[j+i+7];

h6 = h[i+6];

sum0 += x6 * h6;

sum1 += x7 * h6;

x0 = x[j+i+8];

h7 = h[i+7];

sum0 += x7 * h7;

sum1 += x0 * h7;

}

y[j] = sum0 15;

y[j+1] = sum1 15;

}

}

c語言中butte函數是什麼意思

C語言沒有這個函數

MATLAB中有這個函數

說明

巴特沃斯濾波器設計

語法

[z,p,k]=butter(n,Wn)

[z,p,k] = butter(n,Wn,’ftype’)

[b,a]=butter(n,Wn)

[b,a]=butter(n,Wn,’ftype’)

[A,B,C,D]=butter(n,Wn)

[A,B,C,D] = butter(n,Wn,’ftype’)

[z,p,k]=butter(n,Wn,’s’)

[z,p,k] = butter(n,Wn,’ftype’,’s’)

[b,a]=butter(n,Wn,’s’)

[b,a]=butter(n,Wn,’ftype’,’s’)

[A,B,C,D]=butter(n,Wn,’s’)

[A,B,C,D] = butter(n,Wn,’ftype’,’s’)

描述

butter 用來設計低通、帶通、高通、和帶阻數字和模擬的巴特沃斯濾波器。巴特沃斯濾波器的特徵是通帶內幅度響應最大平坦,且整體上是單調的。

巴特沃斯濾波器犧牲了在通帶和阻帶內的單調衰減陡度。除非需要巴特沃斯濾波器的平滑性,橢圓或切比雪夫濾波器可以用更小的濾波器階數獲得更陡峭的衰減特性。

數字域

[z,p,k] = butter(n,Wn) 設計一個階數為n,歸一化截止頻率為Wn的低通數字巴特沃斯濾波器。此函數用n列的向量z和p返回零點和極點,以及用標量k返回增益。

[z,p,k] = butter(n,Wn,’ftype’) 設計一個高通、低通或帶阻濾波器,字元串’ftype’取值是:

‘high’ 用於設計歸一化截止頻率為Wn的高通數字濾波器

‘low’ 用於設計歸一化截止頻率為Wn的低通數字濾波器

‘stop’ 用於設計階數為2*n的帶阻數字濾波器,Wn應該是有兩個元素的向量Wn=[w1 w2]。阻帶是w1 ω w2.

截止頻率 是幅度響應為處的的頻率。對巴特沃斯濾波器,歸一化截止頻率Wn必須是介於0和1之間的數,這裡的1對應於尼奎斯特頻率,即每秒π弧度(π rad/s)。

如果Wn是含有兩個元素的向量,Wn=[w1 w2],butter 返回階數為 2*n的數字帶通濾波器,通頻帶為w1 ω w2.

通過返回不同數量的輸出參數,butter 直接地得到其它的濾波器實現。要獲得傳輸函數形式,使用如下所示的兩個輸出參數。

注意 參考下面的限制 了解關於影響形成傳輸函數的數值問題。

[b,a] = butter(n,Wn) 設計一個階為n,歸一化截止頻率為Wn的數字低通巴特沃斯濾波器。它返回濾波器係數在長度為n+1的行向量b和a中,這兩個向量包含z的降冪係數。

[b,a] = butter(n,Wn,’ftype’) 設計一個高通、低通或帶阻濾波器,字元串’ftype’ 是上面描述的’high’、’low’、或 ‘stop’。

要獲得狀態空間形式,使用下面所示的4個輸出參數:

[A,B,C,D] = butter(n,Wn) 或

[A,B,C,D] = butter(n,Wn,’ftype’) 其中 A、 B,、C,、和D 是

並且u是輸入, x是狀態向量, y 是輸出。

模擬域

[z,p,k] = butter(n,Wn,’s’) 設計一個階n,截止角頻率為Wn rad/s的模擬低通巴特沃斯濾波器。它返回零點和極點在長n或2*n的列向量z和p中,標量k返回增益。butter的截止角頻率Wn必須大於0 rad/s。

如果Wn是有兩個元素w1w2的向量, butter(n,Wn,’s’) 返回階 2*n 帶通模擬濾波器,其通帶是w1 ω w2。

[z,p,k] = butter(n,Wn,’ftype’,’s’) 通過使用上面描述的ftype 值可以設計一個高通、低通或帶阻濾波器。

只要返回不同數量的輸出參數,butter 可以直接地獲得其它的模擬濾波器實現。要獲得傳輸函數形式,使用如下所示的兩個輸出參數:

[b,a] = butter(n,Wn,’s’) 設計一個階n、截止角頻率為Wn rad/s的模擬低通巴特沃斯濾波器。它返回濾波器的係數在長n+1的行向量b和a中,這兩個向量包含下面這個傳輸函數中s的降冪係數:

[b,a] = butter(n,Wn,’ftype’,’s’) 通過設置上面描述的ftype 值,可以設計一個高通、低通或帶阻濾波器。

要獲得狀態空間形式,使用下面的四個參數:

[A,B,C,D] = butter(n,Wn,’s’) 或

[A,B,C,D] = butter(n,Wn,’ftype’,’s’) 其中A、 B、 C、和D 是

並且u 作為輸入, x 是狀態向量, y 是輸出。

舉例

高通濾波器

對於1000Hz的採樣,設計一個9階高通巴特沃斯濾波器,截止頻率300Hz,相應的歸一化值為0.6:

[z,p,k] = butter(9,300/500,’high’);

[sos,g] = zp2sos(z,p,k); % 轉換為二次分式表示形式

Hd = dfilt.df2tsos(sos,g); % 創建dfilt對象

h = fvtool(Hd); % 繪製幅度響應

set(h,’Analysis’,’freq’) % 顯示頻率響應

關於C語言中的函數調用問題,出現了以下錯誤,現貼出程序,請大家幫忙看一看,我是菜鳥….萬分感謝!

懷疑你這段代碼是不是書上摘來的,連main()函數都沒有,修改了下代碼,上面四個錯誤不再出現了,你再把main()函數補上,應該可以運行了。

#include stdio.h

#include “math.h”

#include “stdlib.h”

void iirbcfpass(ns,n,f1,f2,f3,f4,db,b,a)

double b[],a[],f1,f2,f3,f4,db;

int ns,n;

{

int k;

double *d,*c;

double omega,lamda,esslon,fl,fh; //帶通不需要omega;lamda;warp();bpsub();omin(),cosh1()

void bwtf();//函數聲明

//double cosh1(),warp(),bpsub();omin();

void fblt();//函數聲明

fl=f2;

fh=f3;

for (k=0;kns;k++)

{

bwtf(2*ns,k,4,d,c); //求歸一化L階的每一階的分子、分母係數

fblt(d,c,n,fl,fh,b[k*(n+1)+0],a[k*(n+1)+0]); //計算出低通濾波器係數,然後轉化成為帶通係數

}

}

static void bwtf(ln,l,k,n,d,c) //求歸一化L階的每一階的分子、分母係數

int ln,k,n;

double d[],c[];

{

int i;

double pi,tmp;

pi=4.0*atan(1.0);

d[0]=1.0;

c[0]=1.0;

for (i=1;in;i++)

{

d[i]=0.0;

c[i]=0.0;

}

tmp=(k+1)-(ln+1.0)/2.0;

if (tmp==0.0)

{

c[1]=1.0;

}

else

{

c[1]=-2.0*cos((2*(k+1)+ln-1)*pi/(2*ln));

c[2]=1.0;

}

}

static void fblt(d,c,n,fln,fhn,b,a)//計算出低通濾波器係數,然後轉化成為帶通係數

int n;

double fln,fhn,d[],c[],b[],a[];

{

int i,k,m,n1,n2,ls;

double pi,w,w0,w1,w2,tmp,tmpd,tmpc,*work;

double combin();

void bilinear();

pi=4.0*atan(1.0);

w1=tan(pi*fln);

for (i=n;i=0 ;i– )

{

if(c[i]!=0.0 || (d[i]!=0.0))

break;

}

m=i; //標示非0值的位置

n2=2*m;

n1=n2+1;

work=malloc(n1*n1*sizeof(double));

w2=tan(pi*fhn);

w=w2-w1;

w0=w1*w2;

for (i=0;i=n2 ;i++ )

{

work[0*n1+i]=0.0; //小心1與l

work[1*n1+i]=0.0;

}

for (i=0;i=m ;i++ )

{

tmpd=d[i]*pow(w,(m-i));

tmpd=c[i]*pow(w,(m-i));

for (k=0;k=i ;k++ )

{

ls=m+i-2*k;

tmp=combin(i,i)/(combin(k,k)*combin(i-k,i-k));

work[0*n1+ls]+=tmpd*pow(w0,k)*tmp;

work[1*n1+ls]+=tmpc*pow(w0,k)*tmp;

}

}

for (i=0;i=n2 ;i++ )

{

d[i]=work[0*n1+i];

c[i]=work[1*n1+i];

}

free(work);

bilinear(d,c,b,a,n);//合併每個級的係數到一個大的傳遞函數係數集合

}

static double combin(i1,i2)

int i1,i2;

{

int i;

double s;

s=1.0;

if (i2==0) return(s);

for (i=i1;i(i1-i2) ;i– )

{

s*=i;

}

return(s);

}

static void bilinear(d,c,b,a,n)

int n;

double d[],c[],b[],a[];

{

int i,j,n1;

double sum,atmp,scale,*temp;

n1=n+1;

temp=malloc(n1*n1*sizeof(double));

for (j=0;j=n ;j++ )

{

temp[j*n1+0]=1.0;

}

sum=1.0;

for (i=1;i=n;i++)

{

sum=sum*(double)(n-i-1)/(double)i;

temp[0*n1+i]=sum;

}

for (i=1;i=n ;i++ )

for (j=1;j=n ;j++ )

{

temp[j*n1+i]=temp[(j-1)*n1+i]-temp[j*n1+i-1]-temp[(j-1)*n1+i-1];

}

for (i=n;i=0 ;i– )

{

b[i]=0.0;

atmp=0.0;

for (j=0;j=n ;j++ )

{

b[i]=b[i]+temp[j*n1+i]*d[j];

atmp=atmp+temp[j*n1+i]*c[j];

}

scale=atmp;

if (i!=0)

{

a[i]=atmp;

}

}

for (i=0;i=n ;i++ )

{

b[i]=b[i]/scale;

a[i]=a[i]/scale;

}

a[0]=1.0;

free(temp);

}

如何用C語言實現低通濾波器

float middle_filter(float middle_value [] , intcount)

{

    float sample_value, data;

    int i, j;

    for (i=1; i for(j=count-1; j=i,–j){

        if(middle_value[j-1]=middle_value[j]{

            data=middle_value[j-1];

            middle_value[j-1]=middle_value[j]

            middle_value[j]=data;

        }

    }

    sample_value=middle_value(count-1)/2];

    return(sample_value);

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/253882.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-14 02:17
下一篇 2024-12-14 02:17

相關推薦

  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28
  • Python基礎語言

    Python作為一種高級編程語言擁有簡潔優雅的語法。在本文中,我們將從多個方面探究Python基礎語言的特點以及使用技巧。 一、數據類型 Python基礎數據類型包括整數、浮點數、…

    編程 2025-04-28

發表回復

登錄後才能評論