重叠相加法实现卷积Word下载.docx

上传人:b****2 文档编号:14535512 上传时间:2022-10-23 格式:DOCX 页数:18 大小:212.05KB
下载 相关 举报
重叠相加法实现卷积Word下载.docx_第1页
第1页 / 共18页
重叠相加法实现卷积Word下载.docx_第2页
第2页 / 共18页
重叠相加法实现卷积Word下载.docx_第3页
第3页 / 共18页
重叠相加法实现卷积Word下载.docx_第4页
第4页 / 共18页
重叠相加法实现卷积Word下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

重叠相加法实现卷积Word下载.docx

《重叠相加法实现卷积Word下载.docx》由会员分享,可在线阅读,更多相关《重叠相加法实现卷积Word下载.docx(18页珍藏版)》请在冰豆网上搜索。

重叠相加法实现卷积Word下载.docx

DFT具备明确且合理的物理含义,适合应用于数字系统,同时可以方便地由计算机进行运算。

对于线性非移变离散系统,可由线性卷积表示时域输入输出关系,即

y(n)=x(n)*h(n)

通常采用循环卷积降低运算量,但实际中往往无法满足对信号处理的实时性要求。

因此,产生了重叠相加法和重叠保留法两种典型的算法,用以快速计算线性卷积,成为了DFT的一个重要应用。

2、算法基本思想

重叠相加法是将待过滤的信号分割成长为N的若干段,,每一段都可以和有限时宽单位取样回应作卷积,再将过滤后的各段重叠相加。

在实际应用中利用FFT来计算两个序列的圆周卷积从而实现计算其线性卷积,但是常遇到的问题是参加卷积的两个序列的长度相差较大,这样长度小的序列就需要补很多的零点,这样就需要大的存储量,运算时间也会变长。

所以常用重叠相加法来解决。

如以下情况:

h(n)长度为N,x(n)长度为无限长

x(n)取M点,且与N尽量接近

可采用如下方法来解决

x(n)与h(n)的卷积为

重叠相加法的卷积示意图

重叠相加法的步骤如下

(1)将h(n)补零延长到L=M+N-1,并计算长为L的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)填充序列使得循环中对序列的索引不会超出围

(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);

ifN<

M%为N选择合适的值保证运算正确

N=M+1;

end

L=M+N-1;

%循环卷积与线性卷积结果一样时需要进行运算的最少点数

Lx=length(x);

T=ceil(Lx/N);

%确定分段数T

t=zeros(1,M-1);

%初始化序列t(n)

x=[x,zeros(1,(T+1)*N-Lx)];

%不足的分段补零

y=zeros(1,(T+1)*N);

%生成输出序列y(n),长度足够长

fori=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个点

y=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为h(n)长度。

设计函数符合要求。

2、线性卷积设计

Lx=length(A)+length(B)-1;

%线性卷积长度

l1=length(A)-1;

l2=length(B)-1;

A=[zeros(1,l2)Azeros(1,l2)];

%A序列前后补零

B=fliplr(B);

%反转B

B=[B,zeros(1,l1+l2)];

%B序列后面补零与A长度相等

fori=1:

Lx%计算z(i)

z(i)=A

(1)*B

(1);

fork=2:

length(B)

z(i)=z(i)+A(k)*B(k);

end

t=B(length(B));

%保存B序列最后一个数

forj=length(B):

-1:

2%B序列依次向后移位

B(j)=B(j-1);

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编程来实现对数字信号的处理。

此次我得到的课设题目是:

通过重叠相加法计算卷积。

拿到课设题目后,我仔细研究了与题目相关的原理,包括线性卷积、周期卷积、圆周卷积、重叠相加法、离散福利叶变换DFT、快速傅里叶变换FFT等原理知识,弄清楚了它们之间的关系。

通过这次课程设计,我不仅顺利完成课程设计的要求,而且在课程设计过程过对相关原理的回顾,对各相关原理之间的关系有了脱胎换骨般的认识,让我意识到此前学到的知识是多么的浅薄。

在和同组同学一起讨论研究通基于重叠相加法的圆周卷积原理后,我开始了利用MATLAB来实现这个功能。

在编写程序的过程中,我查阅了很多有关MATLAB的编程知识,通过整合所查阅到的编程知识,结合先前研究的基于重叠相加法的圆周卷积原理,我设计了具有此功能的MATLAB函数。

在设计时我遇到了不少的问题,刚开始时我先设定分段长度N,然后由N来求卷积周期L。

但是在程序运行过程中我发现算法具有很大的局限性。

通过仔细揣摩这其中的问题,原来是我忽略了FFT运算的条件。

所以我制定了第二个方案,先设定卷积的周期L,然后由L来求分段长度N,这样程序的适用围就扩大了。

为了提高程序的适用性,我不断的对程序进行修改和测试,以求能够达到更好的效果,这个过程让我体会到了编程解决问题的乐趣。

通过这次课程设计,让我加深了对书本知识的理解,并应用课本的理论知识,结合相关软件,设计解决问题的算法。

从而提高了由知识转换为技能的能力,提高了自己的实践能力。

通过与同学的互相沟通,不仅使各自的知识得到了扩充,而且从中得到了很多的启示,这次课程设计让人受益匪浅。

六、参考文献

[1]高西全、丁玉美.数字信号处理第三版.电子科技大学.2008.

[2]罗建军、琦.精讲多练MATLAB.:

交通大学.2002.

[3]泉、阙大顺、郭志强.数字信号处理.电子工业.2009.

[4]程卫国.MATLAB53精要编程与高级应用.:

机械工业.2000.

[5]正周.MATLAB数字信号处理与应用.:

清华大学.2008.

[6]周建兴、岂兴明等编.MATLAB从入门到精通.人民邮电.2008

[7]徐金明、孟喜、丁涛编.Matlab实用教程.清华大学,交通大学.2007.

附录:

源程序

functionvarargout=zc(varargin)

%ZCM-fileforzc.fig

%ZC,byitself,createsanewZCorraisestheexisting

%singleton*.

%

%H=ZCreturnsthehandletoanewZCorthehandleto

%theexistingsingleton*.

%ZC('

Property'

'

Value'

...)createsanewZCusingthe

%givenpropertyvaluepairs.Unrecognizedpropertiesarepassedvia

%varargintozc_OpeningFcn.Thiscallingsyntaxproducesa

%warningwhenthereisanexistingsingleton*.

CALLBACK'

)andZC('

hObject,...)callthe

%localfunctionnamedCALLBACKinZC.Mwiththegiveninput

%arguments.

%*SeeGUIOptionsonGUIDE'

sToolsmenu.Choose"

GUIallowsonlyone

%instancetorun(singleton)"

.

%Seealso:

GUIDE,GUIDATA,GUIHANDLES

%Edittheabovetexttomodifytheresponsetohelpzc

%LastModifiedbyGUIDEv2.530-Jun-201022:

11:

29

%Begininitializationcode-DONOTEDIT

gui_Singleton=1;

gui_State=struct('

gui_Name'

mfilename,...

'

gui_Singleton'

gui_Singleton,...

gui_OpeningFcn'

zc_OpeningFcn

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机硬件及网络

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

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