滤波器代码.docx

上传人:b****6 文档编号:12829518 上传时间:2023-06-08 格式:DOCX 页数:23 大小:18.12KB
下载 相关 举报
滤波器代码.docx_第1页
第1页 / 共23页
滤波器代码.docx_第2页
第2页 / 共23页
滤波器代码.docx_第3页
第3页 / 共23页
滤波器代码.docx_第4页
第4页 / 共23页
滤波器代码.docx_第5页
第5页 / 共23页
滤波器代码.docx_第6页
第6页 / 共23页
滤波器代码.docx_第7页
第7页 / 共23页
滤波器代码.docx_第8页
第8页 / 共23页
滤波器代码.docx_第9页
第9页 / 共23页
滤波器代码.docx_第10页
第10页 / 共23页
滤波器代码.docx_第11页
第11页 / 共23页
滤波器代码.docx_第12页
第12页 / 共23页
滤波器代码.docx_第13页
第13页 / 共23页
滤波器代码.docx_第14页
第14页 / 共23页
滤波器代码.docx_第15页
第15页 / 共23页
滤波器代码.docx_第16页
第16页 / 共23页
滤波器代码.docx_第17页
第17页 / 共23页
滤波器代码.docx_第18页
第18页 / 共23页
滤波器代码.docx_第19页
第19页 / 共23页
滤波器代码.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

滤波器代码.docx

《滤波器代码.docx》由会员分享,可在线阅读,更多相关《滤波器代码.docx(23页珍藏版)》请在冰点文库上搜索。

滤波器代码.docx

滤波器代码

#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模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2