日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

fir滤波器算法c语言程序,FIR滤波器设计C语言程序

發(fā)布時(shí)間:2023/12/10 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 fir滤波器算法c语言程序,FIR滤波器设计C语言程序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

實(shí)際可運(yùn)行的FIR濾波器系數(shù)設(shè)計(jì)的C語言程序

#include"math.h"

#include"stdio.h"

/*n:濾波器的階數(shù),n是奇數(shù)時(shí)可用來設(shè)計(jì)各種濾波器

band:濾波器類型1、2、3、4分別對(duì)應(yīng)低通,高通,帶通,帶阻

fln:通帶下邊界頻率

fhn:通帶上邊界頻率

wn:窗函數(shù)的類型1-7分別對(duì)應(yīng)

h:長(zhǎng)度為n+1,存放濾波器的系數(shù)

fs:采樣頻率*/

void firwin(n,band,fln,fhn,wn,h)

int n,band,wn;

double fln,fhn,h[];

{

int i,n2,mid;

double s,pi,wc1,wc2,beta,delay,fs;

double window();//窗函數(shù)的計(jì)算

beta=0.0;

if(wn==7)//只有凱塞窗需要輸入系數(shù)beta

{printf("input beta parameter of Kaiser window(2

scanf("%1f",&beta);

}

pi=4.0*atan(1.0);//pi=PI;

if((n%2)==0)/*如果階數(shù)n是偶數(shù)*/

{n2=n/2+1;/**/

mid=1;//

}

else

{n2=n/2;//n是奇數(shù),則窗口長(zhǎng)度為偶數(shù)

mid=0;//

}

delay=n/2.0;

wc1=2.0*pi*fln;//

if(band>=3) /*先判斷用戶輸入的數(shù)據(jù),如果band參數(shù)大于3*/

{wc2=2.0*pi*fhn;}

switch(band)

{

case 1:

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

{s=i-delay;//

h[i]=(sin(wc1*s/fs)/(pi*s))*window(wn,n+1,i,beta);//低通,窗口長(zhǎng)度=階數(shù)+1,故為n+1

h[n-i]=h[i];

}

if(mid==1)h[n/2]=wc1/pi;//n為偶數(shù)時(shí),修正中間值系數(shù)

break;

}

case 2:

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

{s=i-delay;

h[i]=(sin(pi*s)-sin(wc1*s/fs))/(pi*s);//高通-//對(duì)

h[i]=h[i]*window(wn,n+1,i,beta);

h[n-i]=h[i];

}

if(mid==1)h[n/2]=1.0-wc1/pi;//對(duì)

break;

}

case 3:

{for(i=0;i

{s=i-delay;

h[i]=(sin(wc2*s/fs)-sin(wc1*s/fs))/(pi*s);//帶通-//對(duì)

h[i]=h[i]*window(wn,n+1,i,beta);

h[n-i]=h[i];

}

if(mid==1)h[n/2]=(wc2-wc1)/pi;//對(duì)

break;

}

case 4:

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

{s=i-delay;

h[i]=(sin(wc1*s/fs)+sin(pi*s)-sin(wc2*s/fs))/(pi*s);//帶阻-//對(duì)

h[i]=h[i]*window(wn,n+1,i,beta);

h[n-i]=h[i];

}

if(mid==1)h[n/2]=(wc1+pi-wc2)/pi;

break;

}

}

}

/*返回窗函數(shù)的表達(dá)式

n:窗口長(zhǎng)度

type:選擇窗函數(shù)的類型

beta:生成凱塞窗的系數(shù)*/

static double window(type,n,i,beta)

int i,n,type;

double beta;

{

int k;

double pi,w;

double kaiser();

pi=4.0*atan(1.0);//pi=PI;

w=1.0;

switch(type)

{

case 1:

{w=1.0;//矩形窗

break;

}

case 2:

{k=(n-2)/10;

if(i<=k)

w=0.5*(1.0-cos(i*pi/(k+1)));//圖基窗

break;

}

case 3:

{w=1.0-fabs(1.0-2*i/(n-1.0));//三角窗

break;

}

case 4:

{w=0.5*(1.0-cos(2*i*pi/(n-1)));//漢寧窗

break;

}

case 5:

{w=0.54-0.46*cos(2*i*pi/(n-1));//海明窗

break;

}

case 6:

{w=0.42-0.5*cos(2*i*pi/(n-1))+0.08*cos(4*i*pi/(n-1));//布萊克曼窗

break;

}

case 7:

{w=kaiser(i,n,beta);//凱塞窗

break;

}

}

return(w);

}

static double kaiser(i,n,beta)//因凱塞窗的表達(dá)式復(fù)雜,調(diào)用貝塞爾窗表達(dá)式

int i,n;

double beta;

{

double a,w,a2,b1,b2,beta1;

double bessel0();

b1=bessel0(beta);

a

總結(jié)

以上是生活随笔為你收集整理的fir滤波器算法c语言程序,FIR滤波器设计C语言程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。