多频窄带数字信号处理仿真系统设计毕业论文.docx

上传人:wj 文档编号:499644 上传时间:2023-04-29 格式:DOCX 页数:50 大小:458.21KB
下载 相关 举报
多频窄带数字信号处理仿真系统设计毕业论文.docx_第1页
第1页 / 共50页
多频窄带数字信号处理仿真系统设计毕业论文.docx_第2页
第2页 / 共50页
多频窄带数字信号处理仿真系统设计毕业论文.docx_第3页
第3页 / 共50页
多频窄带数字信号处理仿真系统设计毕业论文.docx_第4页
第4页 / 共50页
多频窄带数字信号处理仿真系统设计毕业论文.docx_第5页
第5页 / 共50页
多频窄带数字信号处理仿真系统设计毕业论文.docx_第6页
第6页 / 共50页
多频窄带数字信号处理仿真系统设计毕业论文.docx_第7页
第7页 / 共50页
多频窄带数字信号处理仿真系统设计毕业论文.docx_第8页
第8页 / 共50页
多频窄带数字信号处理仿真系统设计毕业论文.docx_第9页
第9页 / 共50页
多频窄带数字信号处理仿真系统设计毕业论文.docx_第10页
第10页 / 共50页
多频窄带数字信号处理仿真系统设计毕业论文.docx_第11页
第11页 / 共50页
多频窄带数字信号处理仿真系统设计毕业论文.docx_第12页
第12页 / 共50页
多频窄带数字信号处理仿真系统设计毕业论文.docx_第13页
第13页 / 共50页
多频窄带数字信号处理仿真系统设计毕业论文.docx_第14页
第14页 / 共50页
多频窄带数字信号处理仿真系统设计毕业论文.docx_第15页
第15页 / 共50页
多频窄带数字信号处理仿真系统设计毕业论文.docx_第16页
第16页 / 共50页
多频窄带数字信号处理仿真系统设计毕业论文.docx_第17页
第17页 / 共50页
多频窄带数字信号处理仿真系统设计毕业论文.docx_第18页
第18页 / 共50页
多频窄带数字信号处理仿真系统设计毕业论文.docx_第19页
第19页 / 共50页
多频窄带数字信号处理仿真系统设计毕业论文.docx_第20页
第20页 / 共50页
亲,该文档总共50页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

多频窄带数字信号处理仿真系统设计毕业论文.docx

《多频窄带数字信号处理仿真系统设计毕业论文.docx》由会员分享,可在线阅读,更多相关《多频窄带数字信号处理仿真系统设计毕业论文.docx(50页珍藏版)》请在冰点文库上搜索。

多频窄带数字信号处理仿真系统设计毕业论文.docx

多频窄带数字信号处理仿真系统设计

多频窄带数字信号处理仿真系统设计

摘要

本文主要是实现在TC2.0的环境下利用C语言实现多频窄带数字信号处理仿真系统。

系统功能包括信号采集、信号时域及频域分析、FIR滤波器设计、数字信号滤波,在本文中主要设计四种滤波系统:

低通滤波系统、高通滤波系统、带通滤波系统、带阻滤波系统。

在FIR滤波器设计时使用的是窗函数设计的方法,涉及四种窗函数,分别是矩形窗、哈明窗、汉宁窗、布莱克曼窗。

最后本文对设计的系统程序进一步改进,使之可以完成信号模拟到数字的转换功能、根据数字滤波器指标自动完成滤波器设计的功能、四种滤波功能以及个步骤的时域频域图形绘制。

关键词:

多频窄带数字信号处理仿真系统、FIR滤波器、C语言、TC2.0

前言:

本次数字信号处理小项目主要是利用数字信号的理论结合编程实现一个多频窄带数字信号处理仿真系统设计。

MATLAB强大的数字图像处理能力为我们提供了很好的处理环境,但是由于其处理都是集成的,给我们的使用带来一定的不便性,对于我们理解信号处理过程和定制我们需要的信号处理软件没有参考价值。

故我们选择利用tc2.0环境下的C语言进行系统设计与编写,预期实现信号的采集、信号时域及频域分析、FIR滤波器设计、数字信号滤波等功能的多频窄带数字信号处理软件仿真系统。

正文

1系统整体设计思想

本报告主要是用C语言在tc2.0环境下实现信号采集、信号时域及频域分析、FIR滤波器设计、数字信号滤波等功能的多频窄带数字信号处理软件仿真系统。

由此可知,该报告设计需包括以下系统:

A模拟信号采集模块:

完成对模拟信号的采样、量化,使信号变成数字信号。

B显示模块:

完成对信号的时域和频域显示,以便于对信号的频谱和时域分布进行分析。

C滤波器模块:

根据模拟信号生成的数字信号的频域特点确定要完成的滤波指标,进而按照一定的原则选择合适的滤波器进行最后要完成的滤波过程。

D滤波模块:

系统的最后一步,完成对要求滤除的信号频率的滤除和有用频率分量的保留。

具体的系统整体设计流程见图1-1系统设计框图:

图1-1系统设计框图

2各模块设计

2.1模拟信号采集模块

本项目的研究的原始信号是模拟信号,而计算机只能处理二进制编码形式的数字信号,故模拟信号与数字信号之间需有一个误差比较小或者无误差的转换过程,而这个过程就是通过我们的模拟信号采集模块实现的。

由理论知识可知,这个转变过程至少需要满足两个条件,一是数字信号可以无失真的还原原模拟信号,二是数字信号的频域相对于模拟信号的频域发生的改变。

无失真的还原原模拟信号就要满足采样频率fs大于等于模拟信号的最高频率以

为例,采样后的数字信号为,。

故编程实现即为:

voidSignal_low_high(intn)/*高通和低通信号滤波测试信号函数*/

{inti;

for(i=0;i

{

ARRAYI[i]=0.0;

ARRAYR[i]=(float)cos(2*PI*i*f1/fs)+(float)cos(2*PI*i*f2/fs);

}

}

程序中ARRAYR,ARRAYI数组表示采集数字信号的实部和虚部。

2.2显示模块

为了实现信号的采样滤波过程的图形显示,本次项目选择用TC2.0编译环境实现对信号的时域和频域显示。

考虑到信号包含实部和虚部,因此程序编写时为了方便,选择将一个信号用实部和虚部表示。

因此显示的时候就出现了两种情况,时域显示和频域显示,信号不同域波形需要不同的求模函数实现对信号强度的表示,具体程序函数声明为:

/*取模函数,主要用来对时域信号的取模*/

voidGetModu1(floata[],floatb[],intll)

/*取模函数,主要用来对频域信号的取模*/

voidGetModu2(floata[],floatb[],intNNN)

在具体的DOS环境下的图形显示,考虑系统功能实现问题,设计两个绘图函数,GRAPH用于专门显示窗函数的衰减曲线,GRAPH1通用绘图函数为显示步骤中函数的时域和频域,具体见程序:

/*画图程序,用以画窗函数的时域图*/

voidGRAPH(floatxw[MAX],intnn,intkk)/*xw表示窗函数,nn表示描点点数,kk表示滤波器类型*/

/*画图程序,用以画函数的时域和频域的图型*/

voidGRAPH1(floata[],intn,intii,inthigh)/*n表示描点点数,ii表示步长,high表示所控制的画图函数的高度*/

2.3滤波器模块

本项目选择使用FIR滤波器设计方法。

FIR滤波器通常采用窗函数方法来设计。

窗设计的基本思想是,首先选择一个适当的理想选频滤波器(它总是具有一个非因果,无限持续时间脉冲响应),然后截取(加窗)它的脉冲响应得到线性相位和因果FIR滤波器。

因此这种方法的重点是选择一个合适的窗函数和理想滤波器。

我们用表示理想的选频滤波器,它在通带上具有单位增益和线性相位,在阻带上具有零响应。

一个带宽的低通滤波器由下式给定:

为了从得到一个FIR滤波器,必须同时在两边截取。

而要得到一个因果的线性相位滤波器,它的长度为,必须有:

这种操作叫做加窗,可以看作是与窗函数的乘积:

其中

根据的不同定义,可以得到不同的窗结构。

在频域中,因果FIR滤波器响应由和窗响应的周期卷积得到,即:

  常用的窗函数有矩形窗、巴特利特(BARTLETT)窗、汉宁(HANNING)窗、海明(HAMMING)窗、布莱克曼(BLACKMAN)窗、凯泽(KAISER)窗等。

窗函数设计的具体步骤见流程图2-1:

图2-1窗函数设计流程图

图2-2滤波器指标选择窗和理想响应流程

本项目实现提供四个窗函数选择,分别是矩形窗、哈明窗、汉宁窗、布莱克曼窗,通过给定的数字滤波器指标可以求出wn(n)窗函数,wn(n)窗函数得到程序实现上见附录程序中JXC(),HNC(),HMC(),BLKMC()四个窗函数子函数。

具体选择的窗函数类型需根据as阻带最小衰减,ws阻带截止频率,wp通带截止频率,wsl、wsh、wpl、wph带通带阻滤波器的上下边带阻带通带截止频率确定,由指标选择窗函数的子程序见choose_window()子程序,具体见流程图2-2。

理想单位脉冲函数Hd(n)获取上,因为我们设计的滤波器为低通、高通、带通、带阻四种,故需要四个能产生理想逼近单位响应函数的子函数。

查阅资料可知,对于高通滤波器函数来说,其理想频率响应和理想单位脉冲响应函数分别为:

对于带通滤波器函数来说,其理想频率响应和理想单位脉冲响应函数分别为:

对于带阻滤波器函数来说,其理想频率响应和理想单位脉冲响应函数分别为:

所以,由公式可以编写具体的函数产生程序,具体函数的产生见附录子函数HDN(),HDN1(),HDN2(),HDN3()程序。

滤波器的单位脉冲响应h(n)得到是窗函数设计滤波器的最后一步,又流程图3-1可知,h(n)=Wn(n)*Hd(n),通过一个简单的for循环即可实现最后的相乘工作,即程序:

for(i=0;i

{ Hr[i]=Hd[i]*wn[i];

Hi[i]=0.0;

}

2.4滤波模块

滤波模块是设计的多频窄带数字信号处理仿真系统的最后一个步骤。

该步骤的设计流程图见图2-3。

图2-3滤波设计流程图

流程图中的截断处理是因为线性卷积过程中会在输出信号的两边形成过渡带,过渡带中包含的信号并不是我们想要的信号,而且过渡带中包含许多我们不想要的频率分量,因此为避免上述的过渡带带来的影响,我们对线性卷积的得到的结果进行截断处理,使得到的输出信号y(n)与原信号等长,这也满足我们对数字信号处理的基本要求。

在程序的具体实现上,线性卷积程序为Cir_conv()子函数程序(具体见附录程序),截断函数程序为

for(I=0;I

{Jieduanr[I]=DfCvAR[I+(N-1)/2];

Jieduani[I]=DfCvAI[I+(N-1)/2];

}

在信号的分析过程中,对于时域频域之间的转换,我们的设计思路是以DFT(程序见附录Dft子函数)变换为主,以FFT(程序见附录DFT_FFT子函数)变换为辅。

因FFT程序运行速度快,但变换点数必须为2的幂次,因此主要用来完成窗函数的时域到频域的转换;其他时域频域之间的不定点转换则选择DFT实现。

3滤波实现

3.1低通滤波(程序见附录)

测试信号函数为10Hz和45Hz的混合信号,采样频率为100Hz,采样时间为2.0s,测试信号DFT变换点数为200点。

实现对45Hz高频信号的滤出,信号的时域波形和频域波形见图3-1-1与图3-1-2。

图3-1-1测试信号时域波形

图3-1-2测试信号频域波形

运行结果图:

图3-1-3滤波器指标输入

图3-1-4窗函数时域波形

图3-1-5滤波未截断时域波形

图3-1-6滤波截断后时域波形

图3-1-7滤波截断后频域波形

图3-1-8窗函数衰减波形

3.2高通滤波(程序见附录)

测试信号函数为10Hz和45Hz的混合信号,采样频率为100Hz,采样时间为2.0s,测试信号DFT变换点数为200点。

实现对10Hz低频信号的滤出。

信号的时域波形和频域波形见图3-1-1与图3-1-2。

运行结果图为:

图3-2-1滤波器指标输入

图3-2-2滤波未截断时域波形

图3-2-3滤波截断后时域波形

图3-2-4滤波截断后频域波形

图3-2-5窗函数衰减波形

3.3带通滤波(程序见附录)

测试信号函数为10Hz、30Hz、45Hz的混合信号,采样频率为100Hz,采样时间为2.0s,测试信号DFT变换点数为200点。

实现对10Hz和45Hz频率信号的滤出。

信号的时域波形和频域波形见图3-3-1与图3-3-2。

运行结果图为:

图3-3-1测试信号的时域波形

图3-3-2测试信号的频域波形

图3-3-3滤波器指标输入

图3-3-4滤波未截断时域波形

图3-3-5滤波截断后时域波形

图3-3-6滤波截断后频域波形

图3-3-7窗函数衰减波形

3.4带阻滤波(程序见附录)

测试信号函数为10Hz、30Hz、45Hz的混合信号,采样频率为100Hz,采样时间为2.0s,测试信号DFT变换点数为200点。

实现对30Hz频率信号的滤出。

信号的时域波形和频域波形见图3-3-1与图3-3-2。

运行结果图为:

图3-4-1滤波器指标输入

图3-4-2滤波未截断时域波形

图3-4-3滤波截断后时域波形

图3-4-4滤波截断后频域波形

图3-4-5窗函数衰减波形

4项目结论与感想

通过这次的项目研究,让我们加深了对C语言和数字信号处理理论的理解。

同时,团队良好的配合是我们完成的这次项目完成的基础。

我们不仅加深了基础知识的理解,更熟悉理解了一些我们在课堂上没有学习到的、没能理解的知识点。

对于项目中遇到的问题,我们采取边查边改的方式,一边查询问题所在,一遍翻阅资料,查找改进方法,修改程序。

附录:

#include

#include

#include

#include

#include

#definePI3.1415926

#defineMAX600

#definef110.0

#definef245.0

#definef330.0

#definefs100.0

#defineTp2

intL,NN,k,N;

floatARRAYR[MAX],ARRAYI[MAX],DfCvAR[MAX],DfCvAI[MAX],

MODULUS[MAX],MODULUS1[MAX],Hr[MAX],Hi[MAX],Hd[MAX],wn[MAX];

floatwc,wl,wh;

voidDft(floatre[],floatim[],ints,intN11);

voidGetModu1(floata[],floatb[],intll);

voidGetModu2(floata[],floatb[],intNNN);

voidSignal_low_high(intn);

voidSignal_ee(intn);

voidCir_conv(floath[],floatx[],inth_size,intx_size);

main()

{

inti,m,n,fff,nn,kk,I,LL,lll;

voidHDN(),JXC(),HNC(),HMC(),BLKMC(),HDN1(),HDN2(),HDN3();

floatJieduanr[MAX],Jieduani[MAX],Hk[MAX],Hkxw[MAX],arrayr[MAX],arrayi[MAX];

voidDFT_FFT();

voidConvolution_LLL();

voidGRAPH();

voidGRAPH1();

voidchoose_window();

m=7;

n=(int)pow(2,m);/*DFT_FFTLENGTH*/

L=Tp*fs;

printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");

printf("pleasechoosewhatstyleoffilteryouwant\n");

printf("1-low-passfilter2-high-passfilter3-bandpassfilter,4-bandstopfilter*/;\n");

scanf("%d",&fff);

if(fff<=2)

{Signal_low_high(L);

}

else

{Signal_ee(L);

}

printf("yoursignalstylesare%d\n",L);

printf("PleaseInputx(n)-DFTNN:

\n");

scanf("%d",&NN);

GetModu1(ARRAYR,ARRAYI,NN);

GRAPH1(MODULUS1,NN,3,20);

Dft(ARRAYR,ARRAYI,1,NN);

GetModu2(DfCvAR,DfCvAI,NN);

GRAPH1(MODULUS,NN,3,5);

choose_window(fff,n);

for(i=0;i

{

Hr[i]=Hd[i]*wn[i];

Hi[i]=0.0;

}

GRAPH1(Hr,n,6,300);

for(I=0;I

{

arrayr[I]=Hr[I];

arrayi[I]=Hi[I];

}

DFT_FFT(Hr,Hi,m,n);

for(i=0;i

{Hk[i]=sqrt(pow(Hr[i],2)+pow(Hi[i],2));}

for(i=0;i

{Hkxw[i]=20*log10(Hk[i]);}

GRAPH(Hkxw,n,k);

printf("PleaseInputconvolutionLLL(LLL>=%d):

\n",(N+NN-1));

scanf("%d",&lll);

Cir_conv(arrayr,ARRAYR,N,NN);

GetModu1(DfCvAR,DfCvAI,lll);

GRAPH1(MODULUS1,lll,2,120);

for(I=0;I

{

Jieduanr[I]=DfCvAR[I+(N-1)/2];

Jieduani[I]=DfCvAI[I+(N-1)/2];

}

GRAPH1(Jieduanr,NN,2,80);

Dft(Jieduanr,Jieduani,1,NN);

GetModu2(DfCvAR,DfCvAI,NN);

GRAPH1(MODULUS,NN,2,2);

getch();

}

voidGRAPH(floatxw[MAX],intnn,intkk){

intgdriver,mode,i;

gdriver=DETECT;

mode=0;

registerbgidriver(EGAVGA_driver);

initgraph(&gdriver,&mode,"C:

\Progra~1\WINYES\TC20H\BGI");

setbkcolor(42);

setcolor(30);

moveto(30,30);

line(30,30,619,30);

line(30,30,30,430);

for(i=0;i

{xw[i]=abs(xw[i]);}

for(i=0;i

{lineto(30+i*3,30+xw[i]*3);}

for(i=30;i<240;i+=30)

{line(30,30+i,25,30+i);}

for(i=30+i;i<=386;i+=96)

{line(30+i,30,30+i,35);}

outtextxy(23,23,"O");

outtextxy(0,34,"(db)");

outtextxy(0,90,"-20");

outtextxy(0,150,"-40");

outtextxy(0,210,"-60");

outtextxy(130,37,"/2");

outtextxy(226,37,"1");

outtextxy(322,37,"3/2");

outtextxy(420,37,"");

if(kk==1)outtextxy(100,400,"---RECTANGLEWINDOW---");

if(kk==2)outtextxy(100,400,"---HANNINGWINDOW---");

if(kk==3)outtextxy(100,400,"---HANNINGWINDOW---");

if(kk==4)outtextxy(100,400,"---BLACKMANWINDOW---");

outtextxy(100,420,"PRESSANYKEYTOEND.");

getch();

setbkcolor(0);

setcolor(15);

closegraph();

}

voidchoose_window(intfff,intn)

{

floatws,wp,wsl,wsh,wpl,wph;

intas;

if(fff==3||fff==4)

{

printf("pleaseinputwsl:

PI*");

scanf("%f",&wsl);

printf("pleaseinputwpl:

PI*");

scanf("%f",&wpl);

wl=(wpl+wsl)/2;

printf("wl=%f*PI\n",wl);

printf("pleaseinputwsh:

PI*");

scanf("%f",&wsh);

printf("pleaseinputwph:

PI*");

scanf("%f",&wph);

wh=(wph+wsh)/2;

printf("wh=%f*PI\n",wh);

if((fabs(wpl-wsl)-fabs(wph-wsh))>0){

wp=wph;ws=wsh;

}

else

{

wp=wpl;ws=wsl;

}

}

else

{

printf("pleaseinputws:

PI*");

scanf("%f",&ws);

printf("pleaseinputwp:

PI*");

scanf("%f",&wp);

wc=(wp+ws)/2;

printf("wc=%f*PI\n",wc);

}

printf("pleaseinputas:

");

scanf("%d",&as);

if(as<=21)

{

k=1;

printf("CHOSERectangleWINDOW\n");

N=1.8/(fabs(ws-wp));

if(N%2==0){N=N+1;}

else{N=N+2;}

printf("windowsizeN=%d\n",N);

getch();

}

elseif(as<=44)

{

k=2;

printf("CHOSEhanningWINDOW\n");

N=6.2/(fabs(ws-wp));

if(N%2==0)

{N=N+1;}

else{N=N+2;}

printf("windowsizeN=%d\n",N);

getch();

}

elseif(as<=53)

{

k=3;

printf("CHOSEhanmingWINDOW\n");

N=6.6/(fabs(ws-wp));

if(N%2==0)

{N=N+1;}

else{N=N+2;}

printf("windowsizeN=%d\n",N);

getch();

}

elseif(as<=74)

{

k=4;

printf("CHOSEBlackmanWINDOW\n");

N=11/(fabs(ws-wp));

if(N%2==0)

{N=N+1;}

else

{N=N+2;}

printf("windowsizeN=%d\n",N);

getch();

}

elseif(as>74)

{

printf("cannotrealize,pleasequit.\n");

getch();

}

switch(k)

{

case1:

JXC(n,N);br

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

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

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