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

📄 fir.c

📁 实验目的:1、掌握用窗函数法设计FIR数字滤波器的原理和方法 2、熟悉线性相位FIR数字滤波器特性; 3、了解各种窗函数对滤波特性的影响。
💻 C
字号:
#include <math.h>
#include <stdio.h>


#define N 21
#define pi 3.1415926
int i,k,a,b;
double w[N],hd[N],h[N],db[201],wf,re,im,d,wc;



void W1(double w[]) 
{
    int i;
    for(i=0;i<N;i++)
    {
        w[i]=1.0;
    }
}
void W2(double w[]) 
{
    int i;
    for(i=0;i<N;i++)
    {
        if (i<=(N-1)/2)
        {
            w[i]=2.0*i/(N-1);
        }
        else    w[i]=2.0-2.0*i/(N-1);
    }
}
void W3(double w[])  
{
    int i;
    for(i=0;i<N;i++)
    {
        w[i]=0.5*(1-cos(2*pi*i/(N-1)));
    }
}
void W4(double w[]) 
{
    int i;
    for(i=0;i<N;i++)
    {
        w[i]=0.54-0.46*cos(2*pi*i/(N-1));
    }
}
void W5(double w[])
{
    int i;
    for(i=0;i<N;i++)
    {
        w[i]=0.42-0.5*cos(2*pi*i/(N-1))+0.08*cos(4*pi*i/(N-1));
    }
} 

main(){
wc=pi/4;
W5(w);

for(i=0;i<N;i++){
a=(N-1)/2;
if(i==a) hd[i]=0.25;
else 
{b=i-a ;
hd[i]=sin(b*wc)/(pi*b);
 }
h[i]=hd[i]*w[i];
} 

for(k=0;k<201;k++)
      {
         wf=pi*k/201;
         re=0.0;
         im=0.0;
        
         for(i=0;i<N;i++)
         {
            re=re+h[i]*cos((float)i*wf);
            im=im+h[i]*sin((float)i*wf);
         }
         d=sqrt(pow(re,2)+pow(im,2));
         db[k]=20.0*log10(d);
      }



}

⌨️ 快捷键说明

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