⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 低通fir滤波器设计.c

📁 利用窗口法设计低通FIR数字滤波器
💻 C
字号:
函数功能:利用窗口法设计低通FIR数字滤波器。
参数:window_type是所选择的窗口类型,1至8分别为矩形窗、汉宁窗、海明窗、布莱克曼窗、三项窗、最小三项窗、四项窗,最小四项窗。FH为低通滤波器的数字截止频率(0-1),DF为过渡带宽;*h为存放所设计的滤波器系数的地址指针,程序结束返回滤波器长度n。
特点:该算法可用多种窗口设计FIR滤波器,以满足不同阻带衰减和过渡带宽的需求(过渡带宽不小于0.05)。当需要过渡带宽小于0.05时,要增加中间工作单元w的尺寸。

int LowpassFIR(int window_type,float FH,float DF,float *h)
{
float w[200];
int i,j,n;
int NA1,NS1,I2,IS,IV;
float a[4],D;
switch(window_type)
{case 1: a[0]=1.0;a[1]=-0.0;a[2]=0.0;a[3]=-0.0;D=2;
            break;
 case 2: a[0]=0.5;a[1]=-0.5;a[2]=0.0;a[3]=-0.0;D=4;
            break;
 case 3: a[0]=0.54;a[1]=-0.46;a[2]=0.0;a[3]=-0.0;D=4;
            break;
 case 4: a[0]=0.42;a[1]=-0.5;a[2]=0.08;a[3]=-0.0;D=6;
            break;
 case 5: a[0]=0.44959;a[1]=-0.49364;a[2]=0.05677;a[3]=-0.0;D=5.5;
            break;
 case 6: a[0]=0.42323;a[1]=-0.49755;a[2]=0.07922;a[3]=-0.0;D=6;
            break;
 case 7: a[0]=0.4021;a[1]=-0.49703;a[2]=0.09392;a[3]=-0.00188;D=7;
            break;
 case 8: a[0]=0.35878;a[1]=-0.48829;a[2]=0.14128;a[3]=-0.01168;D=9;
            break;
}
n=D/DF+1;
NA1=(n+1)/2;
NS1=(n-1)/2;
for(i=0;i<n;i++)
{w[i]=0.0;
 for(j=0;j<=3;j++) w[i]+=a[j]*cos(2.0*M_PI*i/(n-1)*j);
}
if(n/2.0!=float(n/2))
{   for(i=0;i<NA1;i++)
    {IS=i+NS1;
     if(i==0) h[IS]=2.0*FH;
     else h[IS]=2.0*(FH*sin(2.0*M_PI*i*FH)/(2.0*M_PI*i*FH));
     IV=n-IS-1;
     h[IV]=h[IS];
    }
}
else
{for(i=-NS1;i<NA1;i++)
     {  IS=i+NS1;
        h[IS]=sin(2.0*M_PI*(i-0.5)*FH)/(M_PI*(i-0.5));
     }
}
for(i=0;i<n;i++)   h[i]*=w[i];
return n;
}





















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -