?? zero.c
字號:
#include "math.h"
void main()
{
int n,j,k,kk,XLen,HLen;
double fln,fhn,h[100],x[100],y[100];
int i,n2,mid;
double s,pi,wc1,wc2,delay,fs;
double win();
pi=4.0*atan(1.0);
printf("input the filter order n:\n");
scanf("%d",&n);
printf("input low frequency fln:\n");
scanf("%lf",&fln);
printf("input high frequency fhn:\n");
scanf("%lf",&fhn);
printf("input sample frequency fs:\n");
scanf("%lf",&fs);
fln=fln/fs;
fhn=fhn/fs;
/*開始計算數字濾波器的h(n)*/
if((n%2)==0)
{
n2=n/2-1;
mid=1;
}
else
{
n2=n/2;
mid=0;
}
delay=n/2.0;
wc1=2.0*pi*fln;
wc2=2.0*pi*fhn;
for(i=0;i<=n2;i++)
{
s=i-delay;
h[i]=(sin(wc2*s)-sin(wc1*s))/(pi*s);
h[i]=h[i]*(0.5*(1.0-cos(2*i*pi/n)));
h[n-i]=h[i];
}
if(mid==1)
h[n/2]=(wc2-wc1)/pi;
for(i=0;i<n;i++)
printf("h[%d]=%lf\n",i,h[i]);
/*數字濾波器的h(n)計算結束*/
for(i=0;i<n;i++)
{
printf("input x[%d] number",i);
scanf("%lf",&x[i]);
}
/*輸入信號x(n)的導入*/
/*計算x(n)和h(n)的卷積*/
XLen=n;
HLen=n;
for(n=0;n<(XLen+HLen-1);n++) //結果y的長度一定為x的長度加上y的長度減去1
{
y[n]=0;
if(n>=HLen)
k=n-HLen+1;
else
k=0;
if(XLen>n)
kk=n;
else
kk=XLen-1;
for(;k<=kk;k++)
y[n]+=x[k]*h[n-k];
printf("y[%d]=%lf\n",n,y[n]);/*卷積計算結束,輸出結果y(n)*/
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -