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

📄 zero.c

📁 完整的C语言编写的带通滤波器 运行成功并在matlab上检验
💻 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 + -