欢迎来到天天文库
浏览记录
ID:20484849
大小:938.43 KB
页数:18页
时间:2018-10-12
《陈宸数字与信号处理matlab实验报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、数字信号处理MATLAB实验报告学院:信息与通信工程学院班级:2013211113学号:2013210375姓名:陈宸班内序号:12重叠保留以及重叠相加法的matlab实现:1、重叠和加法:①算法的概括性说明:重叠相加法是将待过滤的信号分割成长为N的若干段,每一段都可以和冇限时宽单位取样响应作卷积,再将过滤后的各段重叠和加。建立缓存序列,每次输AN点序列,通过计算x(n)和h(n)的循环卷积实现线性卷积运算,将缓存的M-1点序列和卷积结果相加,并输出前N点作为计算结果,同吋缓存后M-1点,如此循环,直至所宥分段计算完毕,贝懒出序列y(n)力最终计算结來。②源代码及流程阁:
2、jIxAn)L=N+M-1个前N点度丄否1)functiony=ovrlplus(x,h,N)%重叠相加法实现M=length(h);%获得h(n)的长度ifN3、够长fori=0:1:Txi=i*N+l;x_seg=x(xi:xi+N-l);%选择循环卷稅计算时的分段x(n)y_seg=circonvt(x_seg,h,L);%调用循环卷积计算线性卷积y_seg(l:M-l)=y_seg(1:M-1)(1:M-1);%完成重叠相加t(1:M-1)=y_seg(N+l:L);%重新对t(n)赋值为保留的后M-l点y(xi:xi+N-l)=y_seg(1:N);%直接输出前N个点endy=y(1:Lx+M-1);%取川最终的输Hi序列2)function[y]=circonvt(xl,x2,N)//循环卷稅实现iflength(xl)4、>Nerror(1Nmustbe>=thelengthofxl1)endiflength(x2)>Nerror(fNmustbe>=thelengthofxl!)endxl=[xlzeros(1,N-length(xl))];x2=[x2zeros(1,N-length(x2))];m=[0:1:N-1];x2=x2(mod(-m,N)+1);H=zeros(N,N);forn=l:1:NH(n,:)=cirshftt(x2zn-1,N);endy=xl*conj(H');3)functiony=cirshftt(x,m,N)//循环移位实现iflength(x)>Ner5、ror(1Nmustbe>=thelengthofx1)endx=[xzeros(1zN-length(x))];补零函数(x(n)的长度小于N,将不够的地方全部补零)n=[0:1:N-1];n=mod(n-m,N);y=x(n+1);2、重叠保留法:①算法的概括性说明:重叠保留法相当于将xZ(n)和h(n>作循环卷积,然后找出循环卷积中相当于线性卷积的部分。在这种情况下,将序列y(n)分为长为N的若干段,每个输入段和前一段有M-1个重叠点。此时只需耍将发生重叠的前M-1个点舍去,保留重叠的部分并输出,则可获得序列y(n)。①流程图及源代码:'.1[1,111y0(»)y6、!(打)y2(")计算各序列K:度、序列分段K度生成临时缓存序列输出前N个点,并为t㈧重新赋值为保留值分段循环卷积是1)function[y]=ovrlpsav(x,h,N)实现重叠保留的主函数Lenx=length(x);M=length(h);L=N-M1;h=[hzeros(1ZN-M)];x=[zeros(1,M1),x,zeros(1ZN-1)];K=floor((Lenx+Ml-1)/(L));Y=zeros(K+l,N);fork=0:Kxk=x(k*L+l:k*L+N);Y(k+1,:)=circonvt(xkzh,N);endY=Y(:,M:N)';y=7、(Y(:))1;1)function[y]=circonvt(xl,x2zN)//循环卷积iflength(xl)>Nerror(fNmustbe>=thelengthofxl’)endiflength(x2)>NerrorpNmustbe>=thelengthofxl222222222-9-10)endxl=[xlzeros(l,N-length(xl))];x2=[x2zeros(1zN-length(x2))];m=[0:1:N-1];x2=x2(mod(-m,N)+1);H=zeros(N,N);forn=l:1:NH
3、够长fori=0:1:Txi=i*N+l;x_seg=x(xi:xi+N-l);%选择循环卷稅计算时的分段x(n)y_seg=circonvt(x_seg,h,L);%调用循环卷积计算线性卷积y_seg(l:M-l)=y_seg(1:M-1)(1:M-1);%完成重叠相加t(1:M-1)=y_seg(N+l:L);%重新对t(n)赋值为保留的后M-l点y(xi:xi+N-l)=y_seg(1:N);%直接输出前N个点endy=y(1:Lx+M-1);%取川最终的输Hi序列2)function[y]=circonvt(xl,x2,N)//循环卷稅实现iflength(xl)
4、>Nerror(1Nmustbe>=thelengthofxl1)endiflength(x2)>Nerror(fNmustbe>=thelengthofxl!)endxl=[xlzeros(1,N-length(xl))];x2=[x2zeros(1,N-length(x2))];m=[0:1:N-1];x2=x2(mod(-m,N)+1);H=zeros(N,N);forn=l:1:NH(n,:)=cirshftt(x2zn-1,N);endy=xl*conj(H');3)functiony=cirshftt(x,m,N)//循环移位实现iflength(x)>Ner
5、ror(1Nmustbe>=thelengthofx1)endx=[xzeros(1zN-length(x))];补零函数(x(n)的长度小于N,将不够的地方全部补零)n=[0:1:N-1];n=mod(n-m,N);y=x(n+1);2、重叠保留法:①算法的概括性说明:重叠保留法相当于将xZ(n)和h(n>作循环卷积,然后找出循环卷积中相当于线性卷积的部分。在这种情况下,将序列y(n)分为长为N的若干段,每个输入段和前一段有M-1个重叠点。此时只需耍将发生重叠的前M-1个点舍去,保留重叠的部分并输出,则可获得序列y(n)。①流程图及源代码:'.1[1,111y0(»)y
6、!(打)y2(")计算各序列K:度、序列分段K度生成临时缓存序列输出前N个点,并为t㈧重新赋值为保留值分段循环卷积是1)function[y]=ovrlpsav(x,h,N)实现重叠保留的主函数Lenx=length(x);M=length(h);L=N-M1;h=[hzeros(1ZN-M)];x=[zeros(1,M1),x,zeros(1ZN-1)];K=floor((Lenx+Ml-1)/(L));Y=zeros(K+l,N);fork=0:Kxk=x(k*L+l:k*L+N);Y(k+1,:)=circonvt(xkzh,N);endY=Y(:,M:N)';y=
7、(Y(:))1;1)function[y]=circonvt(xl,x2zN)//循环卷积iflength(xl)>Nerror(fNmustbe>=thelengthofxl’)endiflength(x2)>NerrorpNmustbe>=thelengthofxl222222222-9-10)endxl=[xlzeros(l,N-length(xl))];x2=[x2zeros(1zN-length(x2))];m=[0:1:N-1];x2=x2(mod(-m,N)+1);H=zeros(N,N);forn=l:1:NH
此文档下载收益归作者所有