资源描述:
《北邮《数字信号处理》matlab实验-实验一》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、《数字信号处理》Matlab实验报告实验一班级:2011211114班内序号:27姓名:周园学号:2011210413实验一:实现重叠相加和重叠保留算法,完成线性卷积的分段计算(可任意指定兀⑺)及h{n));1、对算法的概括性说明对如图1所示的线性非移变离散系统而言,可由线性卷积表示其时域上的输入输出关系,即y(n)=x(n)*h(n)iKOJWn)"1图1线性非移变离散系统为方便讨论,令图1所示离散系统为F1R滤波器,即h(n)为一有限长的因果序列,长度为M。(1)重叠相加法将输入序列x(n)进行分割,每段长度为N,且有N2M.如图2所示。每一段都可以和有限时宽单位取样响应作
2、卷积,再将过滤后的各段重叠相加。具体算法实现原理如图3所示,建立缓存序列,每次输入N点序列,通过计算x(n)和h(n)的循环卷积实现线性卷积运算,将缓存的M・1点序列和卷积结果相加,并输出前N点作为计算结果.,同时缓存后M-1点,如此循环,直至所有分段计算完毕,则输出序列y(n)为最终计算结果。图3重叠相加算法(2)重叠保留法与重叠相加法有所不同,重叠保留法是通过对输出序列y5)进行分段后导出的一种线性卷积的计算方法。按图4所示的方式对序列y(n)进行分段,每段长度为N。图4序列y(n)的连续分段每个输入段和前一段有M・1个重叠点。此时只需要将发生重證的前M-1个点舍去,保留重
3、叠的部分并输出,则可获得序列y(n)。算法如图5所示。图5重叠保留法2、流程图及源代码(1)源代码function[y]=circular_conv(x1,x2,L)%利用循环卷积计算线性卷积Xlk=fft(xl,L);%xl做L点FFTX2k=fft(x2,L);%xl做L点FFTYk=Xlk.*X2k;%频域相乘y=ifft(Yk);%FFT反变换得循环卷积结果endfunction[y]=overlap_add(x,h、N)%重叠相加法实现M=length(h);%获得h(n)的长度讦NvM%为N选择合适的值保证运算正确N=M+1;endL=M+N-l;%循坏卷积与线性卷
4、积结果相同时需要进行运算的最少点数Lx=length(x);%获得x(n)的长度T=ceil(Lx/N);%确定分段数Tt=zeros(l,M-l);%初始化序列t(n)x=[x,zeros(l,(T+1)*N-Lx)];%不足的分段补零y=zeros(1,(T+1)*N);%生成输出序列y(n),长度足够长fori=0:l:Txi=i*N+l;x_seg=x(xi:xi+N-l);%选择低点数计算时的分段x(n)y_seg=circular_conv(x_seg,h,L);%调用循环卷积计算线性卷积y_seg(l:M-l)=y_seg(1:M-1)+t(1:M-1);%完成重
5、叠相加t(l:M-l)=y_seg(N+l:L);%重新对t(n)赋值为保留的后M・1点y(xi:xi+N-l)=y_seg(l:N);%直接输出前N个点endy=y(l:Lx+M-l);%取出最终的输出序列endfunction[y]=overlap_save(x,h,N)%重叠保留法实现Lx=length(x);%获得x(n)的长度M=length(h);%获得h(n)的长度讦NvM%为N选择合适的值保证运算正确N=M+1;endL二N+M-l;%为降低点数取M+N-l点循坏卷积即可t=zeros(l,M-l);%初始化序列t(n)T=ceil(Lx/N);%确定分段数x=
6、[x,zeros(l,(T+1)*N-Lx)];%为不足的分段补零y=zeros(1,(T+1)*N);fori=0:l:Txi=i*N+l;x_seg=[t,x(xi:xi+N-l)];%确定每个低点数卷积的分段x(n)t=x_seg(N+l:N+M-l);%为t(n)重新赋值为后M-l个点的值y_seg=circular_conv(x_seg,h,L);%循环卷积计算线性港积y(xi:xi+N-1)=y_seg(M:N+M-1);%直接取出后N个点作为一次计算的输出endy=y(l:Lx+M-l);%取出实际的输出序end流程图如图6所不:图6实现重亞相加法与重叠保留法3・
7、实验结果对两种算法采用同一序列进行测试分析。设x(n)=(n+l),0^n^9;/i(n)=[-2,-1,0,1,2]。计算y(n)=x(n)*h(n)。⑴首先利用Matlab的conv()函数对两序列直接运算,得出正确结果。代码为:x=[1:1:10],h=[-2,-1Al,2],conv(x,h)得到ans-2-5・8-10・10-10252820(2)测试重輕相加算法代码为overlap_add(x,h,4)得到»x=(l:l:10],h=[-2,-l,0,l,2],overlap_a