数字信号处理实验报告实验一序列的傅立叶变换一、实验目的1.进一步加深理解DFS,DFT算法的原理;2.研究补零问题;3.快速傅立叶变换(FFT)的应用。二、实验步骤1.复习DFS和DFT的定义,性质和应用;2熟悉MATLAB语言的命令窗口、编程窗口和图形窗口的使用;3利用提供的程序例子编写实验用程序;4.按实验内容上机实验,并进行实验结果分析;5.写出完整的实验报告,并将程序附在后面。三、实验内容1.周期方波序列的频谱试画出下面四种情况下的的幅度频谱,并分析补零后,对信号频谱的影响。2.有限长序列x(n)的DFT(1)取x(n)(n=0:10)时,画出x(n)的频谱X(k)的幅度;(2)将(1)中的x(n)以补零的方式,使x(n)加长到(n:0~100)时,画出x(n)的频谱X(k)的幅度;(3)取x(n)(n:0~100)时,画出x(n)的频谱X(k)的幅度。利用FFT进行谱分析3.已知:模拟信号以t=0.01n(n=0:N-1)进行采样,求N点DFT的幅值谱。请分别画出N=45;N=50;N=55;N=60时的幅值曲线。四、实验数据分析)8cos(5)4sin(2)(tttx)52.0cos()48.0cos()(nnnx1.周期方波序列的频谱分析首先定义一个功能函数dfsfunction[Xk]=dfs(xn,N)n=[0:1:N-1];k=[0:1:N-1];WN=exp(-j*2*pi/N);nk=n'*k;WNnk=WN.^nk;Xk=xn*WNnk;(1)L=5,N=20;%题1.(1)L=5;N=20;%对于(2),(3),(4)问,只要修改L,N的数值就好。n=1:N;xn=[ones(1,L),zeros(1,N-L)];Xk=dfs(xn,N);magXk=abs([Xk(N/2+1:N)Xk(1:N/2+1)]);k=[-N/2:N/2];figure(1)subplot(2,1,1);stem(n,xn);xlabel('n');ylabel('xtide(n)');title('DFSofSQ.wave:L=5,N=20');subplot(2,1,2);stem(k,magXk);axis([-N/2,N/2,0,16]);xlabel('k');ylabel('Xtide(k)');(2)L=5,N=40;(3).L=5,N=60(4)L=7,N=60;结果分析:虽然周期序列不存在FT,但是一个周期序列可以利用其DFS系数X(k)表示它的频谱分布规律,从以上各频谱图可以看出,随着补零点数的增加,周期序列的谐波次数越来越多,其频谱的包络线越来越平滑连续,更能反映幅度值随时间的变化。2.有限长序列的DFT(1)%题2-(1)n=0:10;xn=cos(0.48*pi*n)+cos(0.52*pi*n);N=11;Xk=fft(xn,N);%序列x(n)的N点DFTk=0:N-1;wk=2*k/N;subplot(1,1,1);stem(wk,abs(Xk),'.');title('频谱X(K)的幅度');xlabel('ω/π');ylabel('幅度');(2)%题2-2M=10;N=100;n=1:M;xn=cos(0.48*pi*n)+cos(0.52*pi*n);n1=[0:1:N-1];y1=[xn(1:1:M),zeros(1,N-M)];figure(1)subplot(2,1,1);stem(n1,y1);xlabel('n');ylabel('x(n)');title('序列x(n),0=n=100');axis([0,N,-2.5,2.5]);Y1=fft(y1);magY1=abs(Y1(1:1:N/2+1));k1=0:1:N/2;w1=2*pi/N*k1;subplot(2,1,2);title('x(n)的幅频特性曲线');stem(w1/pi,magY1);axis([0,1,0,60]);xlabel('\omega/\pi');ylabel('|X(K)|');(3)%Example2-3M=10;N=100;n=0:M;xn=cos(0.48*pi*n)+cos(0.52*pi*n);n1=[0:1:N-1];y1=[xn(1:1:M),zeros(1,N-M)];figure(1)subplot(2,2,1);stem(n1,y1);xlabel('n');ylabel('x(n)');title('序列x(n),0=n=100');axis([0,N,-2.5,2.5]);YK=fft(y1);Y=abs(Y1(1:1:N/2+1));k1=0:1:N/2;w1=2*pi/N*k1;subplot(2,2,3);stem(w1/pi,Y);title('x(n)的幅频特性曲线');axis([0,1,0,60]);xlabel('\omega/\pi');ylabel('|X(K)|');subplot(2,2,4);plot(angle(Y1));title('x(n)的相频特性曲线');xlabel('\omega/\pi');ylabel('phi(\omega)');结果分析:由上述仿真图可得,随着n取值范围的增大,其频谱在[0,2π]上的采样间隔越来越小,采样点越来越多。采样点越多,其DFS频谱越接近FT的频谱。其相频特性曲线呈现周期性变化。3.问题三%题3%N=45figure(1)subplot(2,2,1)N=45;n=0:N-1;t=0.01*n;q=n*2*pi/N;x=2*sin(4*pi*t)+5*cos(8*pi*t);y=fft(x,N);plot(q,abs(y))stem(q,abs(y))title('DFTN=45')%N=50subplot(2,2,2)N=50;n=0:N-1;t=0.01*n;q=n*2*pi/N;x=2*sin(4*pi*t)+5*cos(8*pi*t);y=fft(x,N);plot(q,abs(y))stem(q,abs(y))title('DFTN=50')%N=55subplot(2,2,3)N=55;n=0:N-1;t=0.01*n;q=n*2*pi/N;x=2*sin(4*pi*t)+5*cos(8*pi*t);y=fft(x,N);plot(q,abs(y))stem(q,abs(y))title('DFTN=55')%N=60subplot(2,2,4)N=60;n=0:N-1;t=0.01*n;q=n*2*pi/N;x=2*sin(4*pi*t)+5*cos(8*pi*t);y=fft(x,N);plot(q,abs(y))stem(q,abs(y))title('DFTN=60')结果分析:由上述仿真图可得,随着N取值的增大,其频谱在[0,2π]上的采样间隔越来越小,采样点越来越多。采样点越多,其DFS频谱越接近FT的频谱,幅值曲线越来越清晰,更能准确反应幅值随时间的变化规律。五、心得体会对于周期序列的离散傅里叶变换,通过matlab的模拟,可以更好的了解掌握序列采样间隔对其采样频谱的影响。在实验过程中,学习如何使用matlab程序语言解决问题,是很有价值的。让我对matlab的使用更为熟练。实验二用双线性变换法设计IIR数字滤波器一、实验目的1.熟悉用双线性变换法设计IIR数字滤波器的原理与方法;2.掌握数字滤波器的计算机仿真方法;3、通过观察对实际心电图的滤波作用,获得数字滤波器的感性知识。二、实验内容1.用双线性变换法设计一个巴特沃斯低通IIR滤波器,设计指标参数为:在通带内频率低于0.2π时,最大衰减小于1dB;在阻带内[0.3π,π]频率区间上,最小衰减大于15dB2.以0.2π为采样间隔,打印出数字滤波器在频率区间[0,0.2π]上的幅值响应曲线。3.用所设计的滤波器对实际的心电图信号采样序列x(n)=[-4,-2,0,-4,-6,-4,-2,-4,-6,-6,-4,-4,-6,-6,-2,6,12,8,0,-16,-38,-60,-84,-90,-66,-32,-4,-2,-4,8,12,12,10,6,6,6,4,0,0,0,0,0,-2,-4,0,0,0,-2,-2,0,0,-2,-2,-2,-2,0];)进行仿真滤波处理,并分别打印出滤波前后的心电图信号波形图,观察总结滤波作用与效果。三.实验步骤1.复习有关巴特沃斯模拟滤波器设计和双线性变换法设计IIR滤波器的内容2.参考例子程序用MATLAB语言编写仿真实验用程序;3.在通用计算机上运行仿真程序4.写出完整的实验报告并回答思考题。四.实验数据分析1.巴特沃斯低通IIR滤波器的设计由题可得,数字低通技术指标为wp=0.2πrad,αp=1dB,ws=0.3πrad,αs=15dB若T=1s,预畸变校正计算相应的模拟低通的技术指标为Ωp=1dB,Ωs=15dB通过计算可得阶数N=5.3056,向上取整的N=6.Ωc=0.7663rad/s,这样保证阻带技术指标满足要求,通带指标有富余。以下是通过matlab实现的巴特沃斯低通IIR滤波器的设计%1T=1;Fs=1/T;wpz=0.2;wsz=0.3;wp=2*tan(wpz*pi/2);ws=2*tan(wsz*pi/2);rp=1;rs=15;%预畸变校正转换指标[N,wc]=buttord(wp,ws,rp,rs,'s');%设计过渡模拟滤波器[B,A]=butter(N,wc,'s');[Bz,Az]=bilinear(B,A,Fs);%用双线性变换法转换成数字滤波器fk=0:1/512:1;wk=2*pi*fk;Hk=freqs(B,A,wk);figure(1);subplot(2,1,1);plot(fk,20*log10(abs(Hk)));gridon;title('模拟滤波器幅值响应曲线');xlabel('\omega/\pi');ylabel('幅度(dB)');axis([0,1,-100,5]);[Nd,wdc]=buttord(wpz,wsz,rp,rs);%调用buttord和butter直接设计数字滤波器[Bz,Az]=butter(N,wdc);wk=0:pi/512:pi;Hz=freqz(Bz,Az,wk);subplot(2,1,2);plot(wk/pi,20*log10(abs(Hz)));gridon;title('数字滤波器幅值响应曲线');xlabel('\omega/\pi');ylabel('幅度(dB)');axis([0,1,-100,5]);2.以0.2π为采样间隔,打印出数字滤波器在频率区间[0,0.2π]上的幅值响应曲线。在第一问的基础上加上下面的程序%2figure(2);freqz(Bz,Az,[0:0.02*pi:0.2*pi])3.在第一问程序的基础上加上如下程序即可figure(3);x=[-4,-2,0,-4,-6,-4,-2,-4,-6,-6,-4,-4,-6,-6,-2,6,12,8,0,-16,-38,-60,-84,-90,-66,-32,-4,-2,-4,8,12,12,10,6,6,6,4,0,0,0,0,0,-2,-4,0,0,0,-2,-2,0,0,-2,-2,-2,-2,0];subplot(2,2,1);n=0:55;stem(n,x,'.');title('x(n)的脉冲响应');xlabel('n');ylabel('x(n)');A=0.09036;b1=[A,2*A,A];a1=[1,-1.2686,0.7051];h1=filter(b1,a1,x);[H1,w]=freqz(b1,a1,100);b2=[A,2*A,A];a2=[1,-1.0106,0.3583];h2=filter(b2,a2,h1);[H2,w]=freqz(b2,a2,100);b3=[A,2*A,A];a3=[1,-0.9044,0.2155