滤波器代码.docx
- 文档编号:25441486
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:23
- 大小:18.12KB
滤波器代码.docx
《滤波器代码.docx》由会员分享,可在线阅读,更多相关《滤波器代码.docx(23页珍藏版)》请在冰豆网上搜索。
滤波器代码
#include
#include
doublePI=3.141592654;
intmain()
{
voidLPF();//低通滤波器函数的声明
voidHPF();//高通滤波器函数的声明
voidBPF();//带通滤波器函数的声明
voidBSF();//带通滤波器函数的声明
chara,b;
printf("请选择滤波器类型:
A:
低通B:
高通C:
带通D:
带阻\n\n");
scanf("%c",&a);
b=getchar();
printf("\n确认选择:
");
switch(getchar())
{
case'a':
case'A':
LPF();break;
case'b':
case'B':
HPF();break;
case'c':
case'C':
BPF();break;
case'd':
case'D':
BSF();break;
default:
putchar('\a');
}
system("pause");
return0;
}
voidLPF()//低通滤波器
{
intN,M,i,k;
doublewp,ws,as,wd,Bt;
doublehd[10000]={0.0};
printf("\n请输入设计指标\n\n");
printf("*********************************\n\n");
printf("通带截至频率wp(以Pi为单位):
");
scanf("%lf",&wp);
printf("\n阻带起始频率ws(以Pi为单位):
");
scanf("%lf",&ws);
printf("\n阻带最小衰减as:
");
scanf("%lf",&as);
printf("\n*********************************\n");
printf("\n\n\n");
wd=0.5*(wp+ws);
Bt=ws-wp;
printf("以下窗口类型可供你选择\n\n");
printf("***********************************************\n");
printf("标号窗口类型阻带最小衰减*\n");
printf("1:
矩形窗21dB*\n");
printf("2:
巴特列特窗(三角形窗)25dB*\n");
printf("3:
汉宁窗(升余弦窗)44dB*\n");
printf("4:
汉明窗(改进的升余弦窗)53dB*\n");
printf("5:
布莱克曼窗(二阶升余弦窗)74dB*\n");
printf("***********************************************");
printf("\n\n请你根据as选择合适的窗:
");
scanf("%d",&k);
printf("\n\n结果如下:
\n\n\n");
if(k=1)//选用矩形窗
{
N=(int)(4/Bt+0.5);
if(fmod(N,2.)==0)//判断N的奇偶性,若为偶则加1
{
N++;
M=(N-1)/2;
}
elseM=(N-1)/2;
printf("hn的长度为:
%d\n\n",N);
printf("hn序列:
\n\n");
for(i=0;i { hd[i]=sin(wd*PI*(i-M))/(PI*(i-M)); printf("%lf\t",hd[i]); } printf("\n\n\n"); } elseif(k=2)//选用三角窗 { N=(int)(8/Bt+0.5); if(fmod(N,2.)==0) { N++; M=(N-1)/2; } elseM=(N-1)/2; printf("hn的长度为: %d\n\n",N); printf("hn序列: \n\n"); for(i=0;i<=M;i++) { hd[i]=sin(wd*PI*(i-M))/(PI*(i-M)); hd[i]=hd[i]*(2*i/(N-1)); } for(i=M+1;i { hd[i]=sin(wd*PI*(i-M))/(PI*(i-M)); hd[i]=hd[i]*(2-2*i/(N-1)); printf("%lf\t",hd[i]); } printf("\n\n\n"); } elseif(k=3)//选用汉宁窗 { N=(int)(8/Bt+0.5); if(fmod(N,2.)==0) { N++; M=(N-1)/2; } elseM=(N-1)/2; printf("hn的长度为: %d\n\n",N); printf("hn序列: \n\n"); for(i=0;i { hd[i]=sin(wd*PI*(i-M))/(PI*(i-M)); hd[i]=hd[i]*(0.5*(1-cos(2*PI*i/(N-1)))); printf("%lf\t",hd[i]); } printf("\n\n\n"); } elseif(k=4)//选用汉明窗 { N=(int)(8/Bt+0.5); if(fmod(N,2.)==0) { N++; M=(N-1)/2; } elseM=(N-1)/2; printf("hn的长度为: %d\n\n",N); printf("hn序列: \n\n"); for(i=0;i { hd[i]=sin(wd*PI*(i-M))/(PI*(i-M)); hd[i]=hd[i]*(0.54-0.46*cos(2*PI/(N-1))); printf("%lf\t",hd[i]); } printf("\n\n\n"); } elseif(k=5)//选用布莱克曼窗 { N=(int)(12/Bt+0.5); if(fmod(N,2.)==0) { N++; M=(N-1)/2; } elseM=(N-1)/2; printf("hn的长度为: %d\n\n",N); printf("hn序列: \n\n"); for(i=0;i { hd[i]=sin(wd*PI*(i-M))/(PI*(i-M)); hd[i]=hd[i]*(0.42-0.5*cos(2*PI*i/(N-1))+0.08*cos(4*PI*i/(N-1))); printf("%lf\t",hd[i]); } printf("\n\n\n"); } } voidHPF()//高通滤波器 { intN,M,i,k; doublewp,ws,as,wd,Bt; doublehd[10000]={0.0},dd[10000]={1.0}; printf("\n请输入设计指标: \n\n"); printf("*********************************\n\n"); printf("通带截至频率wp(以Pi为单位): "); scanf("%lf",&wp); printf("\n阻带起始频率ws(以Pi为单位): "); scanf("%lf",&ws); printf("\n阻带最小衰减as: "); scanf("%lf",&as); printf("\n*********************************\n"); printf("\n\n\n"); wd=0.5*(wp+ws); Bt=wp-ws; printf("以下窗口类型可供你选择\n\n"); printf("***********************************************\n"); printf("标号窗口类型阻带最小衰减*\n"); printf("1: 矩形窗21dB*\n"); printf("2: 巴特列特窗(三角形窗)25dB*\n"); printf("3: 汉宁窗(升余弦窗)44dB*\n"); printf("4: 汉明窗(改进的升余弦窗)53dB*\n"); printf("5: 布莱克曼窗(二阶升余弦窗)74dB*\n"); printf("***********************************************"); printf("\n\n请你根据as选择合适的窗: "); scanf("%d",&k); printf("\n\n结果如下: \n\n\n"); if(k=1)//选用矩形窗 { N=(int)(4/Bt+0.5); if(fmod(N,2.)==0) { N++; M=(N-1)/2; } elseM=(N-1)/2; printf("hn的长度为: %d\n\n",N); printf("hn序列: \n\n"); for(i=0;i { hd[i]=sin(wd*PI*(i-M))/(PI*(i-M)); hd[i]=dd[i]-hd[i]; printf("%lf\t",hd[i]); } printf("\n\n\n"); } elseif(k=2)//选用三角窗 { N=(int)(8/Bt+0.5); if(fmod(N,2.)==0) { N++; M=(N-1)/2; } elseM=(N-1)/2; printf("hn的长度为: %d\n\n",N); printf("hn序列: \n\n"); for(i=0;i<=M;i++) { hd[i]=sin(wd*PI*(i-M))/(PI*(i-M)); hd[i]=dd[i]-hd[i]; hd[i]=hd[i]*(2*i/(N-1)); } for(i=M+1;i { hd[i]=sin(wd*PI*(i-M))/(PI*(i-M)); hd[i]=dd[i]-hd[i]; hd[i]=hd[i]*(2-2*i/(N-1)); printf("%lf\t",hd[i]); } printf("\n\n\n"); } elseif(k=3)//选用汉宁窗 { N=(int)(8/Bt+0.5); if(fmod(N,2.)==0) { N++; M=(N-1)/2; } elseM=(N-1)/2; printf("hn的长度为: %d\n\n",N); printf("hn序列: \n\n"); for(i=0;i { hd[i]=sin(wd*PI*(i-M))/(PI*(i-M)); hd[i]=dd[i]-hd[i]; hd[i]=hd[i]*(0.5*(1-cos(2*PI*i/(N-1)))); printf("%lf\t",hd[i]); } printf("\n\n\n"); } elseif(k=4)//选用汉明窗 { N=(int)(8/Bt+0.5); if(fmod(N,2.)==0) { N++; M=(N-1)/2; } elseM=(N-1)/2; printf("hn的长度为: %d\n\n",N); printf("hn序列: \n\n"); for(i=0;i { hd[i]=sin(wd*PI*(i-M))/(PI*(i-M)); hd[i]=dd[i]-hd[i]; hd[i]=hd[i]*(0.54-0.46*cos(2*PI/(N-1))); printf("%lf\t",hd[i]); } printf("\n\n\n"); } elseif(k=5)//选用布莱克曼窗 { N=(int)(12/Bt+0.5); if(fmod(N,2.)==0) { N++; M=(N-1)/2; } elseM=(N-1)/2; printf("hn的长度为: %d\n\n",N); printf("hn序列如下: \n\n"); for(i=0;i { hd[i]=sin(wd*PI*(i-M))/(PI*(i-M)); hd[i]=dd[i]-hd[i]; hd[i]=hd[i]*(0.42-0.5*cos(2*PI*i/(N-1))+0.08*cos(4*PI*i/(N-1))); printf("%lf\t",hd[i]); } printf("\n\n\n"); } } voidBPF()//带通滤波器 { intN,M,i,k; doublewpl,wpu,wsl,wsu,as,wd1,wd2,Bt1,Bt2,Bt; doublehd[10000]={0.0}; printf("\n请输入设计指标: \n\n"); printf("*********************************\n\n"); printf("通带截至频率(以Pi为单位)\n\n"); printf("wpl: "); scanf("%lf",&wpl); printf("wpu: "); scanf("%lf",&wpu); printf("\n阻带起始频率(以Pi为单位)\n\n"); printf("wsl: "); scanf("%lf",&wsl); printf("wsu: "); scanf("%lf",&wsu); printf("\n阻带最小衰减: "); scanf("%lf",&as); printf("\n*********************************\n"); printf("\n\n\n"); wd1=0.5*(wpl+wsl); wd2=0.5*(wpu+wsu); Bt1=wpl-wsl; Bt2=wsu-wpu; if(Bt1>=Bt2)Bt=Bt2; elseBt=Bt1; printf("以下窗口类型可供你选择\n\n"); printf("***********************************************\n"); printf("标号窗口类型阻带最小衰减*\n"); printf("1: 矩形窗21dB*\n"); printf("2: 巴特列特窗(三角形窗)25dB*\n"); printf("3: 汉宁窗(升余弦窗)44dB*\n"); printf("4: 汉明窗(改进的升余弦窗)53dB*\n"); printf("5: 布莱克曼窗(二阶升余弦窗)74dB*\n"); printf("***********************************************"); printf("\n\n请你根据as选择合适的窗: "); scanf("%d",&k); printf("\n\n结果如下: \n\n\n"); if(k=1)//选用矩形窗 { N=(int)(4/Bt+0.5); if(fmod(N,2.)==0) { N++; M=(N-1)/2; } elseM=(N-1)/2; printf("hn的长度为: %d\n\n",N); printf("hn序列: \n\n"); for(i=0;i { hd[i]=sin(wd2*PI*(i-M))/(PI*(i-M)); hd[i]=hd[i]-sin(wd1*PI*(i-M))/(PI*(i-M)); printf("%lf\t",hd[i]); } printf("\n\n\n"); } elseif(k=2)//选用三角窗 { N=(int)(8/Bt+0.5); if(fmod(N,2.)==0) { N++; M=(N-1)/2; } elseM=(N-1)/2; printf("hn的长度为: %d\n\n",N); printf("hn序列: \n\n"); for(i=0;i<=M;i++) { hd[i]=sin(wd2*PI*(i-M))/(PI*(i-M)); hd[i]=hd[i]-sin(wd1*PI*(i-M))/(PI*(i-M)); hd[i]=hd[i]*(2*i/(N-1)); } for(i=M+1;i { hd[i]=sin(wd2*PI*(i-M))/(PI*(i-M)); hd[i]=hd[i]-sin(wd1*PI*(i-M))/(PI*(i-M)); hd[i]=hd[i]*(2-2*i/(N-1)); printf("%lf\t",hd[i]); } printf("\n\n\n"); } elseif(k=3)//选用汉宁窗 { N=(int)(8/Bt+0.5); if(fmod(N,2.)==0) { N++; M=(N-1)/2; } elseM=(N-1)/2; printf("hn的长度为: %d\n\n",N); printf("hn序列: \n\n"); for(i=0;i { hd[i]=sin(wd2*PI*(i-M))/(PI*(i-M)); hd[i]=hd[i]-sin(wd1*PI*(i-M))/(PI*(i-M)); hd[i]=hd[i]*(0.5*(1-cos(2*PI*i/(N-1)))); printf("%lf\t",hd[i]); } printf("\n\n\n"); } elseif(k=4)//选用汉明窗 { N=(int)(8/Bt+0.5); if(fmod(N,2.)==0) { N++; M=(N-1)/2; } elseM=(N-1)/2; printf("hn的长度为: %d\n\n",N); printf("hn序列: \n\n"); for(i=0;i { hd[i]=sin(wd2*PI*(i-M))/(PI*(i-M)); hd[i]=hd[i]-sin(wd1*PI*(i-M))/(PI*(i-M)); hd[i]=hd[i]*(0.54-0.46*cos(2*PI/(N-1))); printf("%lf\t",hd[i]); } printf("\n\n\n"); } elseif(k=5)//选用布莱克曼窗 { N=(int)(12/Bt+0.5); if(fmod(N,2.)==0) { N++; M=(N-1)/2; } elseM=(N-1)/2; printf("hn的长度为: %d\n\n",N); printf("hn序列: \n\n"); for(i=0;i { hd[i]=sin(wd2*PI*(i-M))/(PI*(i-M)); hd[i]=hd[i]-sin(wd1*PI*(i-M))/(PI*(i-M)); hd[i]=hd[i]*(0.42-0.5*cos(2*PI*i/(N-1))+0.08*cos(4*PI*i/(N-1))); printf("%lf\t",hd[i]); } printf("\n\n\n"); } } voidBSF()//带阻滤波器 { intN,M,i,k; doublewpl,wpu,wsl,wsu,as,wd1,wd2,Bt1,Bt2,Bt; doublehd[10000]={0.0},dd[10000]={1.0}; printf("\n请输入设计指标: \n\n"); printf("*********************************\n\n"); printf("通带截至频率(以Pi为单位)\n\n"); printf("wpl: "); scanf("%lf",&wpl); printf("wpu: "); scanf("%lf",&wpu); printf("\n阻带起始频率(以Pi为单位)\n\n"); printf("wsl: "); scanf("%lf",&wsl); printf("wsu: "); scanf("%lf",&wsu); printf("\n阻带最小衰减: "); scanf("%lf",&as); printf("\n*********************************\n"); printf("\n\n\n"); wd1=0.5*(wpl+wsl); wd2=0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 滤波器 代码