《数字信号处理》Matlab实验学院:信息与通信工程学院姓名:兰梅珍班级:2012211114学号:2012210421班内序号:27实验一:实现重叠相加和重叠保留算法,完成线性卷积的分段计算(可任意指定()xn及()hn);1.对算法的概括性说明;重叠相加法和重叠保留法都是为了实现卷积的快速计算,两种方法都是以追逐段地方式通过循环卷积来完成线性卷积的计算。将输入序列x(n)进行分段,每段长为N,且N=M(M为有限长因果序列h(n)的长度),x(n)逐段与h(n)进行循环卷积,在重叠保留法中需在x(n)序列首部加入长度为M-1的0序列。在算法中,在获得N个点的输入后,进行N+M-1点循环卷积计算,之后输出N个点。通过for循环逐段进行循环卷积,使用fft和ifft计算两个有限长的N点循环卷积结果。2.源代码及流程图;重叠相加法function[Y]=overl(x,h,N)Lx=length(x);M=length(h);x=[x,zeros(1,N-1)];t=zeros(1,M-1);Y=zeros(1,Lx+M-1);a=floor(Lx/N);fork=0:aA=x(k*N+1:k*N+N);y1=fft(A,Lx+M-1);y2=fft(h,Lx+M-1);y3=y1.*y2;q=ifft(y3,Lx+M-1);Y(k*N+1:k*N+M-1)=q(1:M-1)+t(1:M-1);Y(k*N+M:k*N+N)=q(M:N);t(1:M-1)=q(N+1:N+M-1);endY(1:Lx+M-1);X1(n)后M-1点y(n)L=N+M-1h(n)重叠保留法L点循环卷积+M-1点缓存function[Y]=overlsav(x,h,N)Lx=length(x);M=length(h);M1=M-1;L=N-M1;h=[h,zeros(1,N-M)];x=[zeros(1,M1),x,zeros(1,N-1)];a=floor((Lx+M1-1)/(L))+1;Y=zeros(1,N);fork=0:a-1xk=x(k*L+1:k*L+N);b=fft(xk,N);C=fft(h,N);Z=b.*C;Y(k+1,:)=ifft(Z,N);endY=Y(:,M:N)';Y=(Y(:))';Y(n)每N点输入h(n)3.实验结果;重叠相加法x=[1,2,3,4,5,6,7,8,9,10]h=[1,0,-1]N=6M-1点缓存序列衔接N+M-1点循环卷积重叠保留法x=[1,2,3,4,5,6,7,8,9,10]h=[1,0,-1]N=44.结合教材3.5.1节作运算量分析;有限长因果序列x(n)h(n)的长度分别为N和M,直接计算线性卷积y(n),y(n)可视为N个序列的叠加结果,序列长度为M,所以每成一个序列需完成M次乘法,则共需要完成MN次乘法运算。这N个序列依次向右移动一位故需(N-1)(M-1)次加法运算。5.总结实验过程中出现的问题以及解决问题的具体措施。N越大时,算法的运算量越小,即实现重叠相加法和重叠保留法的运算量越小。实验二:周期序列的谱分析利用DFT分析模拟信号cos16axtt之频谱;试验要求:1.设定采样周期T并说明原因;由奈奎斯特抽样条件,fs=2f=2*8=16Hz,所以取fs=20Hz,T=1/f=0.05s。2.若令()cos(16)xnnT,确定该序列之周期N并说明原因;因为x(n)=cos(4/5πn),2π/4=5/2,所以周期N=5.3.绘制10个周期内()xn的取值情况;T=1/20;t=0:T:5-T;N=5;figure(1);xn=cos(16*pi*t);stem(0:10*N-1,xn(1:10*N));title('10个周期内x(n)的取值情况');ylabel('x(n)');xlabel('n');4.令1()xn表示()xn的主值序列,绘制1(())DFTxn,解释取值情况;figure(2)x1n=xn(1:N);stem(0:N-1,x1n);title('x(n)的主旨序列');ylabel('x1(n)');xlabel('n');figure(3);xk=fft(x1n,N);stem(0:N-1,abs(xk));title('|DFT(x1(n))|');ylabel('x1(k)');xlabel('k');所得x1(k)取值即为x(n)的5点(一个周期内)DFT结果,为清晰谱线。5.令1()xn表示()xn的任一周期,绘制1(())DFTxn,解释取值情况;figure(4);r=4;x2n=xn(r:r+N-1);stem(0:N-1,x2n);title('x(n)的任一周期');ylabel('x2(n)');xlabel('n');figure(5);Xk=fft(x2n,N);stem(0:N-1,abs(Xk));title('|DFT(x2(n))|');ylabel('X2(k)');xlabel('k');所得x2(k)取值与x(n)主值序列DFT结果相同。因为DFT是反映信号的频域特性,所以同为一个周期,频域特性一定相同,无论起始位置如何,其DFT情况相同。6.令1()xn表示()xn的2个周期,绘制1(())DFTxn,解释取值情况(参照习题3.7、3.8或3.16分析);figure(6);x3n=xn(1:2*N);stem(0:2*N-1,x3n);title('x(n)的2个周期');ylabel('x3(n)');xlabel('n');figure(7);Xk=fft(x3n,2*N);stem(0:2*N-1,abs(Xk));title('|DFT(x3(n))|');ylabel('X3(k)');xlabel('k');所得x3(k)是在x(n)主值序列DFT结果的基础上插入取值为零的点,将点数提高至10,仍为清晰谱线。因为选取了2个周期,所以DFT点数是x1(k)的2倍。因为取的周期的整数倍,所以可以得到清晰谱线。7.(选作)若1()()()MxnxnRn,而M不是()xn周期的整数倍,绘制1(())DFTxn,解释取值情况。figure(8);M=8;x4n=xn(1:M);stem(0:M-1,x4n);title('x(n)*R8(n)');ylabel('x4(n)');xlabel('n');figure(9);Xk=fft(x4n,M);stem(0:M-1,abs(Xk));title('|DFT(x4(n))|');ylabel('X4(k)');xlabel('k');所得x4(k)是非周期整数点数的DFT,不是清晰谱线。因为选取了1.3个周期,不是周期的整数倍,选取的x4(n)没有体现出x(n)的周期特性,所以得到的谱线的形状特征必然与x1(k),x2(k),x3(k)不同。实验三:梳状滤波器的应用录制一段自己的话音,时间长度及取样频率自定;对该段声音加入一次反射、三次反射和无穷多次反射。试验报告要求:1.实验原理的说明:回声可以认为是原始声音经过多次衰减后的多个延迟叠加组成的,因此回声可以用延迟来达到。x(n)表示原始信号,a为衰减系数,T为延迟周期,回声信号Y(n)=x(n)+a*x(n-T)+a^2*x(n-2T)+……+a^k*x(n-kT).z变换后的系统函数H(z)可由梳状滤波器实现,本实验用MATLAB中的filter(b,a,x)函数可用来仿真差分方程a(1)*y(n)=b(1)*x(n)+b(2)*x(n‐1)+...+b(nb+1)*x(n‐nb)‐a(2)*y(n‐1)‐...‐a(na+1)*y(n‐na)。2.一张图上,绘制原声音序列()xn、加入一次反射后的声音序列1()xn、加入三次反射后的声音序列3()xn和加入无穷多次反射后的声音序列()Ixn;title('|DFT(x4(n))|');ylabel('X4(k)');xlabel('k');[x,fs]=wavread('C:\Users\acrs\Desktop\REC033.wav');%sound(x,fs);a=0.6;T=0.2;y1=filter([1,zeros(1,T*fs-1),a],1,x);%sound(y1,fs);wavwrite(y1,fs,'echo1.wav');y2=filter([1,zeros(1,T*fs-1),a,zeros(1,T*fs-1),a^2,zeros(1,T*fs-1),a^3],1,x);%sound(y2,fs);wavwrite(y2,fs,'echo2.wav');y3=filter(1,[1,zeros(1,T*fs-1),a],x);%sound(y3,fs);wavwrite(y3,fs,'echo3.wav');plot(y3,'m');holdon;plot(y2,'r');holdon;plot(y1,'g');holdon;plot(x,'b');如图,蓝色序列为原声音序列x(n),粉红色为加入一次反射后的声音序列x1(n),绿色为加入三次反射后的声音序列x2(n),红色为加入无穷次反射的声音序列x3(n)。3.结合上述各序列,分析延时、衰减系数对回声效果的影响(提示:定量考察序列()xn、1()xn、3()xn和()Ixn之间的区别)。延时不变的时候,衰减系数a从0到1的过程中,回声效果会由差变好再变差。A很小时,几乎听不到回声,a在0.5时,回声效果最明显,a接近1时,声音变的不清晰,几乎不可识别。衰减系数不变时,延时T从0开始增大,回声效果由差变好再变差。T接近0时,可以听到回声,但多次回声的层次感会变得不清晰。0.1sT0.1s时,回声效果最好,多次回声层次感强。T1s时,回声感不强,只是单纯的重复。