通过快速Fourier变换实现相关运算(C语言实现或MATLAB实现)计算1个给定序列与输入序列的相关.doc_第1页
通过快速Fourier变换实现相关运算(C语言实现或MATLAB实现)计算1个给定序列与输入序列的相关.doc_第2页
通过快速Fourier变换实现相关运算(C语言实现或MATLAB实现)计算1个给定序列与输入序列的相关.doc_第3页
通过快速Fourier变换实现相关运算(C语言实现或MATLAB实现)计算1个给定序列与输入序列的相关.doc_第4页
通过快速Fourier变换实现相关运算(C语言实现或MATLAB实现)计算1个给定序列与输入序列的相关.doc_第5页
免费预览已结束,剩余8页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数字信号处理课程设计题目:通过快速Fourier变换实现相关运算 院系:自动化与信息工程学院 专业:通信工程 班级: xxxx 学号: xxxx姓名: xxxx 指导教师:李建勋 职称: 副教授 2012年6月25日2012年7月1日设计任务功能: 对给定的数据进行卷积运算,要求设计有数据导入界面,各种参数有软件界面可以输入,其中给定序列可以由界面输入,对运算前后的数据绘制曲线。 设计步骤:1) 初步完成总体设计,搭好框架,确定人机对话的界面,确定函数功能,控制参数的输入方法;2) 设计由卷积完成相关的实现方案;3) 编写实现快速Fourier变换和逆变换程序;4) 编写两序列作相关的程序;5) 通过调用相关函数来检验最后结果。要求:1) 用结构化设计方法。一个程序划分成若干模块,每一个模块的函数功能要划分好,总体设计应画出流程图;2) 输入输出界面要友好;3) 源程序书写要规范,加必要的注释;4) 要提供通过Matlab函数进行检验的结果;5) 程序一定要要能运行起来。一、原理设两个函数分别是x(t)和g(t),用卷积求他们的相关则定义他们的互相关函数为x(t)*g(-t),它反映的是两个函数在不同的相对位置上互相匹配的程度。利用快速傅里叶变换实现相关,本设计是采用求互功率谱,再根据互功率谱与互相关是傅里叶变换对,对互功率谱进行傅里叶反变换得到互相关函数。二、设计过程用卷积求相关,首先是对g(t)进行反转,在程序中定义了一个turn函数将g(t)进行反转,反转后直接与x(t)进行卷积即可得出互相关系数,比较简单。用快速傅里叶变换实现相关,由于利用互功率谱求相关,所以不需要对原函数反转。首先,分别求出两个序列的长度,对序列进行补零处理,使两序列的周期T=N+M-1,本设计补零后的长度为T=N+M。补零后对两序列分别进行快速傅里叶变换得xk和gk,再取xk的共轭与gk相乘,再将它们的乘积进行傅里叶反变换取实部即可得到互相关。即rm=real(ifft(conj(xk).*gk)。三、流程图1、 卷积求相关 2、快速傅里叶求相关 四、结果与验证1、卷积实现相关实验结果2、快速傅里叶实现相关结果五、界面设计 1、卷积方法% - Executes on button press in pushbutton1.function pushbutton1_Callback(hObject, eventdata, handles)h=load(sj1.txt);k=str2num(get(handles.xulie,string); N=length(h); %求h序列长度l=0;u=N-1;nh=l:u; %h序列的坐标M=length(k);ll=0;uu=M-1;nk=-uu:-ll;x=turn(k); %对k序列进行反转y,ny=convu(h,nh,x,nk);%求h和x的卷积得相关c=xcorr(h,k); %用公式的相关axes(handles.axes1)plot(h)axes(handles.axes2)plot(k)axes(handles.axes3)plot(y)q1=length(y);q2=length(c);if q1q2 y1=y(1:q2) c1=celse y1=y c1=c(1:q1)end %将两序列的长度对齐方便作差axes(handles.axes4)plot(y1-c1);axes(handles.axes5)plot(c)2、 快速傅里叶方法 % - Executes on button press in pushbutton1.function pushbutton1_Callback(hObject, eventdata, handles)h=load(sj1.txt); %导入数据k=str2num(get(handles.xulie,string); %输入序列N=length(h);M=length(k);h1=h zeros(1,M); %补零处理y1=fft(h1);k1=k zeros(1,N); %补零 y2=fft(k1);y3=conj(y1).*y2; %y1的复共轭与y2相乘Y2=real(ifft(y3);Y=ifftshift(Y2);%由于补0的安排,要把序列以k+1为中心点,左右换置 相当于执行ifftshift函数Y=turn(Y)Y1=xcorr(h,k)axes(handles.axes1)plot(h)axes(handles.axes2)plot(k)axes(handles.axes3)plot(Y)q1=length(Y);q2=length(Y1);if q1q2 A=Y(1:q2) B=Y1else A=Y B=Y1(1:q1)endaxes(handles.axes4)plot(A-B)axes(handles.axes5)plot(Y1)六、分析和总结本次课程设计总体来说还是相当成功的,设计出来的相关函数和调用的相关函数基本一致,误差只有。设计并不是完全按照书上按部就班的做出来的,设计的过程是通过开始设计的原型,根据要求不段的调试而得出来的。本次设计让我对函数的互相关有了更深刻的理解,对傅里叶变换的补零方法有了实际的应用,受益匪浅。同时本次课设让我对matlab的应用更加熟悉,也掌握了matlab界面的制作方法。本次课设不但让我学到了知识,还增加了我的综合能力。它锻炼了我的动手能力和处理问题的能力,希望以后在这方面能更好的加强。同时,这次课设也发现了我的缺点就是口语表达能力,答辩的时候表达不清楚自己的意思,希望以后能在这方面加强锻炼,有所提高。参考文献【1】王永德,王军. 随机信号处理(第3版).电子工业出版社【2】高西全,丁玉美. 数字信号处理(第3版).西安电子科技大学出版社附录:h=input(请输入序列1 h= );N=length(h);l=0;u=N-1;nh=l:u;k=input(输入序列2 k= );M=length(k);ll=0;uu=M-1;nk=-uu:-ll;x=turn(k);y,ny=convu(h,nh,x,nk)figure(1);subplot(2,2,1);stem(h)subplot(2,2,2);stem(k)subplot(2,2,3);stem(ny,y)h1=h,0;y1=fft(h1);k1=h,0;y2=fft(k1);y3=conj(y1).*y2;Y=real(ifft11(y3);Y=ifftshift(Y)figure(2);plot(Y)Y1=xcorr(h,k)figure(3);plot(Y1) function a=turn(q) %实现序列的反转c=length(q); %q的长度 e=c+1;for i=1:c a(e-i)=q(i); %将对应位置交换实现反转endfuncti

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论