📄 fir.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 + -