C语言切比雪夫窗函数 切比雪夫最佳函数

帮帮忙,能不能给我 基于C语言的FIR滤波器设计的程序代码(包括CMD,C,ASM),谢谢了 真的很急!!!

#include"math.h"

在金寨等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站制作、成都网站建设 网站设计制作按需定制设计,公司网站建设,企业网站建设,高端网站设计,营销型网站,外贸网站建设,金寨网站建设费用合理。

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;

double window();

beta=0.0;

if(wn==7)

{printf("input beta parameter of Kaiser window(2beta10)\n");

scanf("%1f",beta);

}

pi=4.0*atan(1.0);

if((n%2)==0)/*如果n是偶数*/

{n2=n/2+1;/*这行什么意思*/

mid=1;

}

else

{n2=n/2;

mid=0;

}

delay=n/2.0;

wc1=2.0*pi*fln;

if(band=3) wc2=2.0*pi*fhn;/*先判断用户输入的数据,如果band参数大于3*/

switch(band)

{case 1:

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

{s=i-delay;

h[i]=(sin(wc1*s)/(pi*s))*window(wn,n+1,i,beta);

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

}

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

break;

}

case 2:

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

{s=i-delay;

h[i]=(sin(pi*s)-sin(wc1*s))/(pi*s);

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;

break;

}

case 3:

{for(i=0;in2;i++)

{s=i-delay;

h[i]=(sin(wc2*s)-sin(wc1*s))/(pi*s);

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

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

}

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

break;

}

case 4:

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

{s=i-delay;

h[i]=(sin(wc1*s)+sin(pi*s)-sin(wc2*s))/(pi*s);

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;

}

}

}

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);

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)

int i,n;

double beta;

{

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

double bessel0();

b1=bessel0(beta);

a=2.0*i/(double)(n-1)-1.0;

a2=a*a;

beta1=beta*sqrt(1.0-a2);

b2=bessel0(beta1);

w=b2/b1;

return(w);

}

static double bessel0(x)

double x;

{int i;

double d,y,d2,sum;

y=x/2.0;

d=1.0;

sum=1.0;

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

{d=d*y/i;

d2=d*d;

sum=sum+d2;

if(d2sum*(1.0e-8)) break;

}

return(sum);

}

这是窗函数法的,当然还有其他的比如切比雪夫,零相位滤波什么的,我也在研究,不是很懂哈

除了用Matlab还有什么方法可以计算滤波器系数?

C语言啊。窗函数,频域最小误差分析,切比雪夫还有零相位滤波。你要代码的话我可以给你,但是零相位滤波我还不太清楚,好像要经过傅里叶变换和时间反转什么的,很复杂啊,我也正在弄,希望我们可以一起解决。

切比雪夫滤波器的C语言实现

其实很简单的,先用matlab实现切比雪夫滤波器

得到转移函数的分子与分母多项式后,

再按照数字信号处理的公式用C语言来实现吧

切比雪夫逼近应用实例。用切比雪夫公式(取6项)逼近函数 1/(2-x),并求当 x=0.5时的函数值。

f=chebyshev('1/(2-x)',6)中的chebyshev中的头字母c要大写,跟前面的命名函数保持一致


网站标题:C语言切比雪夫窗函数 切比雪夫最佳函数
链接分享:http://azwzsj.com/article/hehddd.html