重叠相加法实现卷积

上传人:沙** 文档编号:140746144 上传时间:2022-08-23 格式:DOC 页数:20 大小:308.43KB
收藏 版权申诉 举报 下载
重叠相加法实现卷积_第1页
第1页 / 共20页
重叠相加法实现卷积_第2页
第2页 / 共20页
重叠相加法实现卷积_第3页
第3页 / 共20页
资源描述:

《重叠相加法实现卷积》由会员分享,可在线阅读,更多相关《重叠相加法实现卷积(20页珍藏版)》请在装配图网上搜索。

1、设计任务计算1个给定序列与输入序列的卷积。功能:对给定的数据进行卷积运算,要求分段卷积由循环卷积实现。要求设计有数据导入界面,各种参数从软件界面可以输入,其中给定序列可以由界面输入,对运算前后的数据绘制曲线。 要求:1) 初步完成总体设计,搭好框架,确定人机对话的界面,确定函数功能,控 制参数的输入方法;2) 设计线性卷积的实现方案;3) 编写两序列作循环卷积的程序;4) 通过直接做线性卷积来检验最后结果。设计步骤:1) 用结构化设计方法。一个程序划分成若干模块,每一个模块的函数功能要划分好,总体设计应画出流程图;2) 输入输出界面要友好;3) 源程序书写要规范,加必要的注释;4) 要提供通过

2、直接卷积进行检验的结果;5) 程序一定要要能运行起来。一、原理 1、算法产生背景 DFT 是连续傅里叶变换在时域和频域上都离散的形式,将时域信号的采样变换为在离散时间傅里叶变换频域的采样。在形式上,变换两端(时域和频域上)的序列是有限长的。DFT 具备明确且合理的物理含义,适合应用于数字系统,同时可以方便地由计算机进行运算。 对于线性非移变离散系统,可由线性卷积表示时域输入输出关系,即 y(n)=x(n)*h(n) = 通常采用循环卷积降低运算量,但实际中往往无法满足对信号处理的实时性要求。因此,产生了重叠相加法和重叠保留法两种典型的算法,用以快速计算线性卷积,成为了DFT 的一个重要应用。

3、2、算法基本思想 重叠相加法是将待过滤的信号分割成长为 N 的若干段,每一段都可以和有限时宽单位取样回应作卷积,再将过滤后的各段重叠相加。 在实际应用中利用FFT来计算两个序列的圆周卷积从而实现计算其线性卷积,但是常遇到的问题是参加卷积的两个序列的长度相差较大,这样长度小的序列就需要补很多的零点,这样就需要大的存储量,运算时间也会变长。所以常用重叠相加法来解决。如以下情况: h(n)长度为N,x(n)长度为无限长 x(n)取M点,且与N尽量接近可采用如下方法来解决 x(n)与h(n)的卷积为重叠相加法的卷积示意图重叠相加法的步骤如下(1)将h(n)补零延长到L =M+ N -1,并计算长为L的

4、FFT,得到 H(k)。(2)分别将xk(n)补零延长到L =M+ N -1,并计算长为L的FFT,得到 Xk(k)(3)计算,并求长为L的反变换,即(4)将yk(n)的重叠部分相加,最后得到结果为二、程序设计1、程序设计思路函数juanji(x1,x2,L)设计(1) x1(n)进行N点快速傅里叶变换得X1k(2) x2(n)进行N点快速傅里叶变换得X2k(3) 进行频域相乘Yk=X1k*X2k(4) 对Yk进行反变换得到时域卷积结果y(n)函数chongdie(x,h,N)设计(1)首先取圆周卷积的周期L(即进行L点的快速傅里叶变换)(2)计算每一分段的大小N(3)填充序列使得循环中对序列

5、的索引不会超出范围(4)计算分段数K(5)对序列进行分段调用juanji()函数计算圆周卷积(6)各段重叠相加(7)取出实际的输出序列2、 程序流程图开始对x1(n)进行FFT运算对x(2)进行FFT运算频域相乘Yk=X1k*X2k对Yk进行反变换得到时域结果y(n)结束开始取圆周卷积的周期L计算每一分段的大小N将序列按要求填充计算分段数K调用卷积函数将各段处理的结果重叠相加输出最终结果结束重叠相加法卷积 三、分析与测试1、循环卷积设计 程序 M = length(h);if N M %为N选择合适的值保证运算正确 N = M+1; endL = M+N-1; %循环卷积与线性卷积结果相同时需

6、要进行运算的最少点数Lx = length(x); T = ceil(Lx/N); %确定分段数Tt = zeros(1,M-1); %初始化序列t(n)x = x,zeros(1,(T+1)*N-Lx); %不足的分段补零 y = zeros(1,(T+1)*N); %生成输出序列y(n),长度足够长 for i=0:1:T xi=i*N+1; x_seg = x(xi:xi+N-1); %选择低点数计算时的分段x(n) X1k = fft(x_seg,L); %x_seg做L点FFT X2k = fft(h,L); %h做L点FFT Yk = X1k.*X2k; %频域相乘 y_seg =

7、 ifft(Yk); %FFT反变换得循环卷积结果 y_seg(1:M-1)=y_seg(1:M-1)+t(1:M-1);%完成重叠相加 t(1:M-1) = y_seg(N+1:L); %重新对t(n)赋值为保留的后M-1点 y(xi:xi+N-1)=y_seg(1:N); %直接输出前N个点 endy=y(1:Lx+M-1); %取出最终的输出序列 测试设N=4 h=1,2,3,4 X=1,2,3,4,5,6,7,8,9调用系统函数fftfilt(h,x,N)对比生成图像设计函数图形系统函数fftfilt(h,x,N) 分析 设计函数与系统函数前7个点一样,系统函数没有后4-1=3个点,4

8、为h(n)长度。设计函数符合要求。2、 线性卷积设计 程序Lx=length(A)+length(B)-1; %线性卷积长度l1=length(A)-1;l2=length(B)-1;A=zeros(1,l2) A zeros(1,l2); %A序列前后补零B=fliplr(B); %反转BB=B,zeros(1,l1+l2); %B序列后面补零 与A长度相等for i=1:Lx %计算z(i) z(i)=A(1)*B(1); for k=2:length(B) z(i)=z(i)+A(k)*B(k); end t=B(length(B); %保存B序列最后一个数 for j=length(B

9、):-1:2 %B序列依次向后移位 B(j)=B(j-1); end B(1)=t;end 测试设h=1,3,5,7 X=9,8,7,6,5,4,3,2,1调用系统函数conv(h,x)对比生成图像设计函数图形系统函数conv(h,x) 分析 设计函数与调用系统函数结果完全相同,设计函数符合要求。四、 实验结果1、 实验源程序 见附录2、 实验结果五、 总结作为电子信息工程系的学生,数字信号处理这门课程是其他很多课程的基础,所以学好学通数字信号处理这门课程对我们来说是非常重要的。而MATLAB这款软件对数字信号处理的建模、编程、分析、实现有极大的帮助作用,所以我们应该掌握使用MATLAB编程来

10、实现对数字信号的处理。此次我得到的课设题目是:通过重叠相加法计算卷积。拿到课设题目后,我仔细研究了与题目相关的原理,包括线性卷积、周期卷积、圆周卷积、重叠相加法、离散福利叶变换DFT、快速傅里叶变换FFT等原理知识,弄清楚了它们之间的关系。通过这次课程设计,我不仅顺利完成课程设计的要求,而且在课程设计过程中通过对相关原理的回顾,对各相关原理之间的关系有了脱胎换骨般的认识,让我意识到此前学到的知识是多么的浅薄。在和同组同学一起讨论研究通基于重叠相加法的圆周卷积原理后,我开始了利用MATLAB来实现这个功能。在编写程序的过程中,我查阅了很多有关MATLAB的编程知识,通过整合所查阅到的编程知识,结

11、合先前研究的基于重叠相加法的圆周卷积原理,我设计了具有此功能的MATLAB函数。在设计时我遇到了不少的问题,刚开始时我先设定分段长度N,然后由N来求卷积周期L。但是在程序运行过程中我发现算法具有很大的局限性。通过仔细揣摩这其中的问题,原来是我忽略了FFT运算的条件。所以我制定了第二个方案,先设定卷积的周期L,然后由L来求分段长度N,这样程序的适用范围就扩大了。为了提高程序的适用性,我不断的对程序进行修改和测试,以求能够达到更好的效果,这个过程让我体会到了编程解决问题的乐趣。通过这次课程设计,让我加深了对书本知识的理解,并应用课本的理论知识,结合相关软件,设计解决问题的算法。从而提高了由知识转换

12、为技能的能力,提高了自己的实践能力。通过与同学的互相沟通,不仅使各自的知识得到了扩充,而且从中得到了很多的启示,这次课程设计让人受益匪浅。六、参考文献【1】高西全、丁玉美.数字信号处理 第三版.西安电子科技大学出版社.2008.【2】罗建军、杨琦.精讲多练MATLAB.西安:西安交通大学出版社.2002.【3】刘泉、阙大顺、郭志强.数字信号处理.电子工业出版社.2009.【4】程卫国.MATLAB53精要编程及高级应用.北京:机械工业出版社.2000.【5】李正周.MATLAB数字信号处理与应用.北京: 清华大学出版社.2008. 【6】周建兴、岂兴明等编. MATLAB从入门到精通.人民邮电

13、出版社.2008【7】徐金明、张孟喜、丁涛编. Matlab实用教程.清华大学出版社,北京交通大学出版社.2007.附录:源程序function varargout = zc(varargin)%ZC M-file for zc.fig% ZC, by itself, creates a new ZC or raises the existing% singleton*.% H = ZC returns the handle to a new ZC or the handle to% the existing singleton*.% ZC(Property,Value,.) creates

14、a new ZC using the% given property value pairs. Unrecognized properties are passed via% varargin to zc_OpeningFcn. This calling syntax produces a% warning when there is an existing singleton*.% ZC(CALLBACK) and ZC(CALLBACK,hObject,.) call the% local function named CALLBACK in ZC.M with the given inp

15、ut% arguments.% *See GUI Options on GUIDEs Tools menu. Choose GUI allows only one% instance to run (singleton).% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help zc% Last Modified by GUIDE v2.5 30-Jun-2010 22:11:29% Begin initialization code - DO NOT EDITgui_S

16、ingleton = 1;gui_State = struct(gui_Name, mfilename, . gui_Singleton, gui_Singleton, . gui_OpeningFcn, zc_OpeningFcn, . gui_OutputFcn, zc_OutputFcn, . gui_LayoutFcn, , . gui_Callback, );if nargin & ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);endif nargout varargout1:nargout = gui_

17、mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:);end% End initialization code - DO NOT EDIT% - Executes just before zc is made visible.function zc_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventd

18、ata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% varargin unrecognized PropertyName/PropertyValue pairs from the% command line (see VARARGIN)% Choose default command line output for zchandles.output = hObject;% Update handles str

19、uctureguidata(hObject, handles);% UIWAIT makes zc wait for user response (see UIRESUME)% uiwait(handles.figure1);% - Outputs from this function are returned to the command line.function varargout = zc_OutputFcn(hObject, eventdata, handles)% varargout cell array for returning output args (see VARARGO

20、UT);% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Get default command line output from handles structurevarargout1 = handles.output;function aa_Callback(hObject, eventdata, handles)% hObject h

21、andle to aa (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,String) returns contents of aa as text% str2double(get(hObject,String) returns contents of aa as a double% - Executes during object

22、 creation, after setting all properties.function aa_CreateFcn(hObject, eventdata, handles)% hObject handle to aa (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a whi

23、te background on Windows.% See ISPC and COMPUTER.if ispc set(hObject,BackgroundColor,white);else set(hObject,BackgroundColor,get(0,defaultUicontrolBackgroundColor);endfunction bb_Callback(hObject, eventdata, handles)% hObject handle to bb (see GCBO)% eventdata reserved - to be defined in a future ve

24、rsion of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,String) returns contents of bb as text% str2double(get(hObject,String) returns contents of bb as a double% - Executes during object creation, after setting all properties.function bb_CreateFcn(hObject, ev

25、entdata, handles)% hObject handle to bb (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc set(hObject,Back

26、groundColor,white);else set(hObject,BackgroundColor,get(0,defaultUicontrolBackgroundColor);endfunction ll_Callback(hObject, eventdata, handles)% hObject handle to ll (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDAT

27、A)% Hints: get(hObject,String) returns contents of ll as text% str2double(get(hObject,String) returns contents of ll as a double% - Executes during object creation, after setting all properties.function ll_CreateFcn(hObject, eventdata, handles)% hObject handle to ll (see GCBO)% eventdata reserved -

28、to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc set(hObject,BackgroundColor,white);else set(hObject,BackgroundColor,get(0,defaultUicontro

29、lBackgroundColor);end% - Executes on button press in tt.function tt_Callback(hObject, eventdata, handles)% hObject handle to tt (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)N=str2num(get(handles.ll,string);a=s

30、tr2num(get(handles.aa,string);b=str2num(get(handles.bb,string);h=a;x=b;M = length(h);if N M %为N选择合适的值保证运算正确 N = M+1; endL = M+N-1; %循环卷积与线性卷积结果相同时需要进行运算的最少点数Lx = length(x); T = ceil(Lx/N); %确定分段数Tt = zeros(1,M-1); %初始化序列t(n)x = x,zeros(1, (T+1)*N-Lx); %不足的分段补零 y = zeros(1, (T+1)*N); %生成输出序列y(n),长度足够

31、长 for i=0:1:T xi=i*N+1; x_seg = x(xi:xi+N-1); %选择低点数计算时的分段x(n) X1k = fft(x_seg,L); %x_seg做L点FFT X2k = fft(h,L); %h做L点FFT Yk = X1k.*X2k; %频域相乘 y_seg = ifft(Yk); %FFT反变换得循环卷积结果 y_seg(1:M-1) = y_seg(1:M-1)+t(1:M-1);%完成重叠相加 t(1:M-1) = y_seg(N+1:L); %重新对t(n)赋值为保留的后M-1点 y(xi:xi+N-1) = y_seg(1:N); %直接输出前N个

32、点 endy=y(1:Lx+M-1); %取出最终的输出序列 %-线性卷积程序-A=a;B=b;Lx=length(A)+length(B)-1; %线性卷积长度l1=length(A)-1;l2=length(B)-1;A=zeros(1,l2) A zeros(1,l2); %A序列前后补零B=fliplr(B); %反转BB=B,zeros(1,l1+l2); %B序列后面补零 与A长度相等for i=1:Lx %计算z(i) z(i)=A(1)*B(1); for k=2:length(B) z(i)=z(i)+A(k)*B(k); end t=B(length(B); %保存B序列最

33、后一个数 for j=length(B):-1:2 %B序列依次向后移位 B(j)=B(j-1); end B(1)=t;end xx=conv(a,b);yy=fftfilt(a,b,N);axes(handles.axes1)plot(a)axes(handles.axes2)plot(b)axes(handles.axes3)plot(y)axes(handles.axes4)plot(z)axes(handles.axes5)plot(yy)axes(handles.axes6)plot(xx)% - Executes on button press in tt2.function t

34、t2_Callback(hObject, eventdata, handles)% hObject handle to tt2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)N=str2num(get(handles.ll,string);a=str2num(get(handles.aa,string);b=str2num(get(handles.bb,string);h

35、=a;x=b;M = length(h); if N M N = M+1; endL = M+N-1; Lx = length(x); T = ceil(Lx/N); t = zeros(1,M-1); x = x,zeros(1, (T+1)*N-Lx); y = zeros(1, (T+1)*N); for i=0:1:T xi=i*N+1; x_seg = x(xi:xi+N-1); X1k = fft(x_seg,L); X2k = fft(h,L); Yk = X1k.*X2k; y_seg = ifft(Yk); y_seg(1:M-1) = y_seg(1:M-1)+t(1:M-

36、1); t(1:M-1) = y_seg(N+1:L); y(xi:xi+N-1) = y_seg(1:N); endy=y(1:Lx+M-1); A=a;B=b;Lx=length(A)+length(B)-1;l1=length(A)-1;l2=length(B)-1;A=zeros(1,l2) A zeros(1,l2);B=fliplr(B);B=B,zeros(1,l1+l2);for i=1:Lx z(i)=A(1)*B(1); for k=2:length(B) z(i)=z(i)+A(k)*B(k); end t=B(length(B); for j=length(B):-1:2 B(j)=B(j-1); end B(1)=t;end xx=conv(a,b);yy=fftfilt(a,b,N);axes(handles.axes1)stem(a)axes(handles.axes2)stem(b)axes(handles.axes3)stem(y)axes(handles.axes4)stem(z)axes(handles.axes5)stem(yy)axes(handles.axes6)stem(xx)- 19 -

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!