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

📄 fir.cpp

📁 利用最佳一致逼近设计数字滤波器的程序
💻 CPP
字号:

#include "firdf.h"


#include<stdio.h>
#include<malloc.h>

void main()
{
/*int N=43,Nbands=2;
double Edge[4]={0,0.3,0.35,0.5};
double Fx[2]={1.0,0.0};
double Wtx[2]={1.0,1.0};
double h[43],*p;

defirdf3(N,Nbands,Edge,Fx,Wtx,h);
   p=h;
  for(int i=0;i<N;i++,p++)
  {
	  printf("h(%d)=%lf  ",i,*p);
	  if(i%5==4)printf("\n");
  }
  printf("\n"); */

  int N,Nbands;  //N 单位抽样响应的长度 Nbands:通带和阻带的总数目
  double *Edge;  //滤波器的通带和阻带的带边归一化频率。
  double *Fx;    //理想滤波器通带和阻带的幅值。
  double *Wtx;  //对应通带和阻带的加权
  double *h;   //所求滤波器的单位抽样响应
  double *p;
  
  
  printf("请输入单位抽样响应的长度N(N<128,取奇数):");
  scanf("%d",&N);
  printf("\n请输入通带和阻带的总数目Nbands(NBands<10):");
  scanf("%d",&Nbands);

  Edge=(double *)malloc(sizeof(double)*(2*Nbands));
  //Edge=new double(2*Nbands);
  //p=Edge;p0=++p;
  printf("\n请依次输入通带和阻带的带边归一化频率(0~0.5):");
  for(int i=0;i<Nbands;i++)
  {
	  printf("\n请输入带 %d 的下限截止频率和上限截止频率",i+1);
	  printf("\n(数据之间用逗号分割):");
	  scanf("%lf,%lf",&Edge[2*i],&Edge[2*i+1]);
  }
  
  Fx=(double *)malloc(sizeof(double)*Nbands);
  //Fx=new double(Nbands);
  p=Fx;
  printf("\n请依次输入通带和阻带的幅值:");
  for(i=0;i<Nbands;i++,p++)
  {
	  printf("\n请输入带 %d 的幅值:",i+1);
	  scanf("%lf",p);
  }

  Wtx=(double *)malloc(sizeof(double)*Nbands);
  //Wtx=new double(Nbands);
  p=Wtx;
  printf("\n请依次输入对应通带和阻带的加权:");
  for(i=0;i<Nbands;i++,p++)
  {
	  printf("\n请输入带 %d 的加权:",i+1);
	  scanf("%lf",p);
  }
  
  h=(double *)malloc(sizeof(double)*N);
  //h=new double(N);

  printf("\n单位抽样响应的长度:%d",N);
  printf("\n通带和阻带的总数目:%d",Nbands);

  printf("\n通带和阻带的带边归一化频率:\n");
  p=Edge;
  for(i=0;i<Nbands;i++,p++)
  {
	 printf("带%d: %f  %f  ",i+1,*p++,*p);
	 if(i%3==2) printf("\n");
  }

  printf("\n通带和阻带的幅值:\n");
  p=Fx;
  for(i=0;i<Nbands;i++,p++)
  {
	 printf("带 %d 幅值%f   ",i+1,*p);
	 if(i%4==3) printf("\n");
  }

  printf("\n通带和阻带的加权:\n");
  p=Wtx;
  for(i=0;i<Nbands;i++,p++)
  {
	 printf("带 %d 加权%f   ",i+1,*p);
	 if(i%4==3) printf("\n");
  }

  defirdf3(N,Nbands,Edge,Fx,Wtx,h);
  p=h;
  for(i=0;i<N;i++,p++)
  {
	  printf("h(%d)=%lf  ",i,*p);
	  if(i%4==3)printf("\n");
  }
  printf("\n");
  p=h;
  for(i=0;i<N;i++,p++)
  {
	  printf("%lf ",*p);
	  if(i%4==3)printf(" ...\n");
  }

  printf("\n");
  
  free(Edge);free(Fx);free(Wtx);free(h);

}

⌨️ 快捷键说明

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