数 字 信 号 处 理 实 验 报 告实验名称:离散时间信号通过线性时不变系统姓 名:专 业:年 级:学 号:指导教师:一、实验目的 1、通过本实验,进一步加深对离散线性时不变系统的理解2、掌握利用线性卷积求解离散线性时不变系统输出的方法3、掌握利用差分方程求解离散线性时不变系统输出的方法二、实验要求1、简述实验目的及原理2、实验步骤附上输入输出信号曲线,分析所得的图形3、总结实验中的主要结论三、实验步骤1、编程前复习相关理论知识2、编制信号产生、卷积、求解差分方程和显示子程序Xa(n)=sin(2πfn),0≤n≤N,f=1/55Xb(n)=sin(2πf1n)+ sin(2πf2n) ),0≤n≤N-1,f1=1/55,f2=20/55;N取大于等于500.设两个离散时间线性时不变系统分别为:系统1:h1(n)=1, 0≤n≤49,系统2:其中b0=0.0223,b1=0.01,b2=0.0223,a1=-1.7007,a2=0.7613.四、实验结果及分析实现代码1:#include#include #includevoid main(){ int i,j,sum; float x[550]={0.0},h[550]={0.0},y[550]={0.0},w[550]={0.0},z[550]={0.0}; for(i=0;i<500;i++) x[i]=sin(6.28/55.0*i); for(i=0;i<500;i++) w[i]=sin(6.28/55.0*i)+sin(125.6/55.0*i); for(j=0;j<50;j++) h[j]=1.0; for(j=0;j<550;j++) { for(i=0;i<=j;i++) { y[j]=y[j]+x[i]*h[j-i]; } } for(j=0;j<550;j++) { for(i=0;i<=j;i++) { z[j]=z[j]+w[i]*h[j-i]; } } initgraph(1200,600); for(i=0;i<550;i++) line(100+i,50,100+i,x[i]*25+50); for(i=0;i<550;i++) line(100+i,150,100+i,w[i]*25+150); for(i=0;i<550;i++) line(100+i,280,100+i,y[i]*5+280); for(i=0;i<550;i++) line(100+i,400,100+i,z[i]*5+400); getchar(); closegraph();} 图1说明:从上往下分别为:xa(n),xb(n),xa(n)过系统1,xb(n)过系统1代码2:#include#include#include void main(){ int i,j,n; float x[550]={0.0},w[550]={0.0},h[550]={0.0},y[550]={0.0},z[550]={0.0},a[550]={0.0},b[550]={0.0}; for(i=0;i<500;i++) x[i]=sin(6.28/55.0*i); for(i=0;i<500;i++) w[i]=sin(6.28/55.0*i)+sin(125.6/55.0*i); a[1]=-1.7007,a[2]=0.7613; b[0]=0.0233, b[1]=0.01, b[2]=0.233; y[0]=0.0223*x[0]; printf("%f",y[0]); for(n=1;n<550;n++) { for(i=1;(i<3)&&((n-i)>=0);i++) { y[n]=y[n]-a[i]*y[n-i]; } for(j=0;(j<3)&&((n-j+1)>=0);j++) { y[n]=y[n]+b[j]*x[n-j]; } } z[0]=0.0223*w[0]; printf("%f",z[0]); for(n=1;n<550;n++) { for(i=1;(i<3)&&((n-i)>=0);i++) { z[n]=z[n]-a[i]*z[n-i]; } for(j=0;(j<3)&&((n-j+1)>=0);j++) { z[n]=z[n]+b[j]*w[n-j]; } } initgraph(1200,600); for(i=0;i<550;i++) line(100+i,50,100+i,x[i]*25+50); for(i=0;i<550;i++) line(100+i,150,100+i,w[i]*25+150); for(i=0;i<550;i++) line(100+i,280,100+i,y[i]*5+280); for(i=0;i<550;i++) line(100+i,400,100+i,z[i]*5+400); getchar(); closegraph();} 图2说明:从上往下分别为:xa(n),xb(n),xa(n)过系统2,xb(n)过系统2.实验分析: 比较图1与图2可以看出,对信号1而言,区别:系统1输出相对于系统2有较大的延迟! 共性:两系统对信号1的高频分量的滤除效果均比较好!对信号2而言:区别:系统1滤除效果明显比系统2差,系统1相较于系统2延迟较大。
共性:均对高频有一定的滤除效果进一步分析系统一的幅频特性系统一为50阶矩形窗低通滤波器:N=50;wn=rectwin(N);X=20*log10(abs(fft(wn,1024))/max(abs(fft(wn,1024))));plot((1:1024)/512,X(1:1024));grid on;xlabel('\omega/\pi');ylabel('20lg|H(\omega)|');title('系统一幅频响应');, ,从图像上可以看出,系统一对的衰减不到13dB,因此通过系统后可以较好保留,而对的衰减达到了约35dB, 但是FIR滤波器滤波效果差,实际滤波的时候对的信号频率分量没有完全滤除,其上出现的毛刺为没有完全滤除的频率分量系统二的幅频响应角度进行分析:A=[1 -1.7007 0.7613];B=[0.0223 0.01 0.0223];[H,w]=freqz(B,A);X=20*log10(abs(H)/max(abs(H)));w=w/pi;plot(w,X);grid on;xlabel('\omega/\pi');ylabel('20lg|H(\omega)|');title('系统二幅频响应');系统二的幅频特性此时可以看出系统二也是低通滤波器,对的衰减接近于0,而对于的衰减达到-45dB,因此信号和通过系统二后的输出相同,都将频率为的信号保留下来,把频率为的信号滤掉了。
五、实验总结① 通过实验现象与理论分析结果相结合可以加深对FIR和IIR系统的理解FIR系统暂态较长,还有拖尾现象这是由于H(n)有限长,在做线性卷积时,输出结果还与输入的前m-1点有关从幅频响应上来看,其滤波效果也并不理想,过渡带较长,且旁瓣最大衰减不够大IIR系统存在着输出对输入的反馈,系统存在极点,它的暂态几乎为零,从幅频响应上看,通带衰减很小,阻带衰减较大,因此对本次实验的滤波效果很好② 实际中需要根据输入信号来合理的选取滤波器并确定滤波器的阶数FIR和IIR各有特点,应该结合实际灵活应用③ 对于C语言,首先要理解计算过程,对于算法的实现可以帮助加深对相关知识的理解教 师 评 语指导教师: 年 月 日。