ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:195.50KB ,
资源ID:10424671      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10424671.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(通过重叠相加法实现卷积的报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

通过重叠相加法实现卷积的报告.docx

1、通过重叠相加法实现卷积的报告数字信号处理课程设计题目:通过重叠相加法实现卷积 院系:自动化与信息工程学院 专业:通信工程 班级: 通信091 学号: 3090432028姓名: 雷帛川 指导教师: 李建勋 职称: 副教授 2012年7月10日2012年7月14日设计任务对随机信号进行滑动均值滤波,分析统计特征。功能:对给定的数据进行滑动均值滤波。要求从文本文件中读入数据,分析滤波前后的信号统计特征:包括均值、方差、平均功率、自相关和功率谱密度。各项功能可以在界面中选择。画出原始数据的曲线,滤波后的波形,以及自相关序列,功率谱密度。设计步骤:1) 初步完成总体设计,搭好框架,确定人机对话的界面,

2、确定输入输出函数的接口;2) 编写主要程序,包括快速傅立叶正变换和逆变换的程序;3) 编写实现输入输出功能的程序;4) 编写波形输出程序;5) 用matlab的相应函数进行检验。要求:1) 用结构化设计方法。一个程序划分成若干模块,每一个模块的函数功能要划分好,总体设计应画出流程图;2) 输入输出界面要友好;3) 源程序书写要规范,加必要的注释;4) 要提供通过Matlab函数进行检验的结果;5) 程序一定要要能运行起来。一、 原理 经常遇到两个序列的长度相差很大的情况,解决这个问题的方法就是将长序列分段计算,运用分段处理方法中的重叠相加法计算两个序列的卷积运算。 设一个给定序列是长度为n1的

3、A,另一个导入序列是长度为n2的B,其中B序列是相对A序列比较长的,所以可以把B分为和A一样长的若干段段,即B分后每一小段长度为n1。根据公式:可知将B序列的每一小段与A序列做现行卷积,然后将所有的n2/n1段的线性卷积结果相加起来就是整个B序列和A序列的线性卷积结果,而又在本设计中,B序列的一小段和A序列的线性卷积又可由循环卷积来实现,只要让循环卷积的点数,循环卷积的结果就和线性卷积的结果等价,在本实验中取,故A序列和B序列的线性卷积可认为是由A序列和B的每一小段做点的循环卷积的最终累加和,另外还有两个个问题需要考虑,首先是做循环卷积时要对A序列和B序列的那一小段补零做卷积后,最终做累加的时

4、候要考虑重叠的片段,必须将重叠的两段加起来。不重叠的片段直接赋值。其次是如果B序列长度n2不是A序列长度n1的整数倍时,必须将B序列余下的那几个数补零后和A序列做点循环卷积再加到最终的结果的相应位置。下列是计算循环卷积的过程:在本次课设题中序列A和B序列的某一小段做循环卷积,由于已知A序列的长度为n1,故可取B序列的每一小段都和A序列相等长度,并且取循环卷积的点数为,这就保证每一组的循环卷积都等效于线性卷积。做循环卷积可运用循环卷积矩阵做,其第一步是将A序列和B序列的某一小段补零到长度为,然后把A序列通过变换生成的循环卷积矩阵,将补零后的B的某一小段转置,然后用循环卷积矩阵乘以它就可以得到循环

5、卷积的结果,在此也即线性卷积。重叠相加法的图示如下:2、设计过程 1.循环卷积子函数流程图 2.主函数流程图 3.循环卷积子函数源程序:function y=Convmy4(A,B,L) %创建循环卷积函数if Llength(A)|Llength(A) %如果A序列长度小于L则补零到L A=A,zeros(1,L-length(A);endif Llength(B) %给B序列补零到L B=B,zeros(1,L-length(B); B=B; %B转置endE=A(1,1); C=A(1,2:L); %写循环矩阵的第一行D=fliplr(C);A=E,D; y(1)=A(1,1).*B(1

6、,1); for h=2:1:L y(1)=y(1)+A(1,h).*B(h,1); % %计算循环卷积序列的第一个值endfor k=2:1:L t=A(1,L); for i=L:-1:2 A(1,i)=A(1,i-1); %得到矩阵的第二到L行并计算循环卷积的 end %另外几个值 A(1,1)=t; y(k)=0; for m=1:1:L y(k)=y(k)+A(1,m).*B(m,1); endend 4.主函数源程序:A=input(请输入给定序列:);c=load(huang.txt); %导入数据B=c;n1=length(A); %记序列A的长度n2=length(B); %

7、记序列B的长度i=fix(n2/n1); %算B的长度是A的几倍,向下取整L=2*n1-1; %取循环卷积的长度,使其每小段 %循环卷积满足和线性卷积等价y(1:L)=Convmy4(A,B(1:n1),L); %调用编好的循环卷积函数 r(1:L)=y(1:L); %计算最终结果的前n1个点的值for p=2:1:i %循环 s=B(p-2)*n1+1:(p-2)*n1+n1); %取B序列的第一小段存到s y(p-2)*n1+1:(p-2)*n1+L)=Convmy4(A,s,L); %计算第一小段和A序列循环卷 %积的L点结果 C(1:L-n1)=y(p-2)*n1+n1+1:(p-2)

8、*n1+L); %将第一组做循环卷积得到的结果 %重叠部分先转存到临时变量C中 z=B(p-1)*n1+1:(p-1)*n1+n1); %取B序列的第二小段存到z y(p-1)*n1+1:(p-1)*n1+L)=Convmy4(A,z,L); %将其和A的循环卷积的结果给yfor n=1:1:n1-1 %- y(p-1)*n1+n)=C(n)+y(p-1)*n1+n); %计算重叠部分的结果 r(p-1)*n1+n)=y(p-1)*n1+n);end %- for n=n1:1:n1 %- y(p-1)*n1+n)=y(p-1)*n1+n); %计算没重叠部分的结果 r(p-1)*n1+n)=

9、 y(p-1)*n1+n); end %- end %循环结束D(1:L-n1)=y(p-1)*n1+n1+1:(p-1)*n1+L); %* for n=n1+1:1:L %显示末尾的一段 r(p-1)*n1+n)=D(n-n1);end %* If mod(n2,n1)=0 %- h=mod(n2,n1); E=B(i*n1+1:i*n1+h),zeros(1,n1-h); F(1:L) =Convmy4(A,E,L); P(1:n1-1)=r(p-1)*n1+n1+1:(p-1)*n1+L); %如果n2不是n1的整数倍,则应 for n=1:1:n1-1 %将B序列多余的那几个点补零再

10、 r(i*n1+n)=P(n)+F(n); %和A做循环卷积并显示出来 end for n=n1:1:L r(i*n1+n)=F(n); endend %-q=conv(A,B); %调用系统函数做线性卷积,验证结果r;x1=1:1:n1; %-subplot(2,2,1);stem(x1,A);title(给定序列A);grid on; %画原来输入的两个序列和最终序列的图形x2=1:1:n2; subplot(2,2,3);stem(x2,B);title(导入序列B);grid on;x3=1:1:length(r);subplot(2,2,2);stem(x3,r);title(线性卷

11、积结果图形);grid on ; %- x4=1:1:n1+n2-1; %* subplot(2,2,4); %画调用系统函数得到的结果图形stem(x4,q);title(直接调用系统函数得到的图形);grid on; %* 3、结果与验证当输入序列为rand(1,80)时,输入前后以及结果图形: 4、界面设计在MATLAB的命令窗口中运行guide命令,即可打开GUIDE界面,选择Blank GUI,点击OK,就可以进行界面设计。根据题目要求,逐步设计各各模块的功能,再修改所要用到的属性,全部完成后,运行,界面如下: 五、分析和总结 学习了MATLAB后,我深刻地体会到了它功能的强大,不管

12、是数据处理,矩阵计算,频谱分析,还是图形处理,只要函数格式使用正确,一切都能快速准确的实现。 在实验的过程中培养了我的独立分析问题和解决问题的能力。在遇到实在过不去的地方,总能在同学和老师的指点下豁然开朗,对培养我的思维方法有了很大的帮助,使我受益匪浅。 我了解到MATLAB在我们的生活中的重要地位,随着社会的不断发展,科技的不断进步,计算机的普及,它也被应用在越来越多的方面。通过本次实验,使我掌握了MATLAB的使用,对我今后的学习之路将产生很大的帮助,使我更能发挥所长报效社会。 参考文献【1】罗建军,杨琦.精讲多练MATLAB(第二版).西安:西安交通大学大学出版社,2010.1【2】高西

13、全,丁玉美.数字信号处理(第三版).西安:西安电子科技大学出版社,2008.8【3】刘卫国.MATLAB程序设计与应用(第二版).高等教育出版社,2006.7【4】邓薇.MATLAB函数速查手册(第一版).人民邮电出版社,2008.10附录:主要程序1.循环卷积子函数源程序:function y=Convmy4(A,B,L) %创建循环卷积函数if Llength(A)|Llength(A) %如果A序列长度小于L则补零到L A=A,zeros(1,L-length(A);endif Llength(B) %给B序列补零到L B=B,zeros(1,L-length(B); B=B; %B转置

14、endE=A(1,1); C=A(1,2:L); %写循环矩阵的第一行D=fliplr(C);A=E,D; y(1)=A(1,1).*B(1,1); for h=2:1:L y(1)=y(1)+A(1,h).*B(h,1); % %计算循环卷积序列的第一个值endfor k=2:1:L t=A(1,L); for i=L:-1:2 A(1,i)=A(1,i-1); %得到矩阵的第二到L行并计算循环卷积的 end %另外几个值 A(1,1)=t; y(k)=0; for m=1:1:L y(k)=y(k)+A(1,m).*B(m,1); endend2.主函数源程序:A=input(请输入给定序

15、列:);c=load(huang.txt); %导入数据B=c;n1=length(A); %记序列A的长度n2=length(B); %记序列B的长度i=fix(n2/n1); %算B的长度是A的几倍,向下取整L=2*n1-1; %取循环卷积的长度,使其每小段 %循环卷积满足和线性卷积等价y(1:L)=Convmy4(A,B(1:n1),L); %调用编好的循环卷积函数 r(1:L)=y(1:L); %计算最终结果的前n1个点的值for p=2:1:i %循环 s=B(p-2)*n1+1:(p-2)*n1+n1); %取B序列的第一小段存到s y(p-2)*n1+1:(p-2)*n1+L)=

16、Convmy4(A,s,L); %计算第一小段和A序列循环卷 %积的L点结果 C(1:L-n1)=y(p-2)*n1+n1+1:(p-2)*n1+L); %将第一组做循环卷积得到的结果 %重叠部分先转存到临时变量C中 z=B(p-1)*n1+1:(p-1)*n1+n1); %取B序列的第二小段存到z y(p-1)*n1+1:(p-1)*n1+L)=Convmy4(A,z,L); %将其和A的循环卷积的结果给yfor n=1:1:n1-1 %- y(p-1)*n1+n)=C(n)+y(p-1)*n1+n); %计算重叠部分的结果 r(p-1)*n1+n)=y(p-1)*n1+n);end %-

17、for n=n1:1:n1 %- y(p-1)*n1+n)=y(p-1)*n1+n); %计算没重叠部分的结果 r(p-1)*n1+n)= y(p-1)*n1+n); end %- end %循环结束D(1:L-n1)=y(p-1)*n1+n1+1:(p-1)*n1+L); %* for n=n1+1:1:L %显示末尾的一段 r(p-1)*n1+n)=D(n-n1);end %* If mod(n2,n1)=0 %- h=mod(n2,n1); E=B(i*n1+1:i*n1+h),zeros(1,n1-h); F(1:L) =Convmy4(A,E,L); P(1:n1-1)=r(p-1)

18、*n1+n1+1:(p-1)*n1+L); %如果n2不是n1的整数倍,则应 for n=1:1:n1-1 %将B序列多余的那几个点补零再 r(i*n1+n)=P(n)+F(n); %和A做循环卷积并显示出来 end for n=n1:1:L r(i*n1+n)=F(n); endend %-q=conv(A,B); %调用系统函数做线性卷积,验证结果r;x1=1:1:n1; %-subplot(2,2,1);stem(x1,A);title(给定序列A);grid on; %画原来输入的两个序列和最终序列的图形x2=1:1:n2; subplot(2,2,3);stem(x2,B);title(导入序列B);grid on;x3=1:1:length(r);subplot(2,2,2);stem(x3,r);title(线性卷积结果图形);grid on ; %- x4=1:1:n1+n2-1; %* subplot(2,2,4); %画调用系统函数得到的结果图形stem(x4,q);title(直接调用系统函数得到的图形);grid on; %*

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1