重叠相加法计算圆周卷积.docx

上传人:b****1 文档编号:15004105 上传时间:2023-06-29 格式:DOCX 页数:11 大小:114.88KB
下载 相关 举报
重叠相加法计算圆周卷积.docx_第1页
第1页 / 共11页
重叠相加法计算圆周卷积.docx_第2页
第2页 / 共11页
重叠相加法计算圆周卷积.docx_第3页
第3页 / 共11页
重叠相加法计算圆周卷积.docx_第4页
第4页 / 共11页
重叠相加法计算圆周卷积.docx_第5页
第5页 / 共11页
重叠相加法计算圆周卷积.docx_第6页
第6页 / 共11页
重叠相加法计算圆周卷积.docx_第7页
第7页 / 共11页
重叠相加法计算圆周卷积.docx_第8页
第8页 / 共11页
重叠相加法计算圆周卷积.docx_第9页
第9页 / 共11页
重叠相加法计算圆周卷积.docx_第10页
第10页 / 共11页
重叠相加法计算圆周卷积.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

重叠相加法计算圆周卷积.docx

《重叠相加法计算圆周卷积.docx》由会员分享,可在线阅读,更多相关《重叠相加法计算圆周卷积.docx(11页珍藏版)》请在冰点文库上搜索。

重叠相加法计算圆周卷积.docx

重叠相加法计算圆周卷积

1理论分析

1.1圆周卷积的定义

对两个N点序列

,除了可以做线性卷积外,还有一种很重要的卷积运算,还有一种很重要的卷积运算,就是圆周卷积。

的离散付里叶变换分别为

,且有

=

=IDFT[

]

=

上式即为序列

的圆周卷积,习惯表示为

=

圆周卷积与周期卷积之间的关系,就是有限长序列圆周卷积结果的周期延拓,等于它们周期延拓后的周期卷积。

换句话说,周期卷积的主值序列,是各周期序列主值序列的圆周卷积。

周期卷积得到是周期序列,圆周卷积得到的是有限长序列,而且长度等于参加卷积的序列的长度。

1.2圆周卷积的计算

分别是长度为N、M的序列则

线性卷积至多M+N-1个非零值,如果LM+N-1时,周期延拓才不会发生混叠。

之所以讨论用圆周卷积来计算线性卷积的条件,是因为圆周卷积可在频域下利用DFT求得,从而可采用DFT的快速算法FFT来计算,这样就可以利用FFT来计算线性卷积,大大提高运算效率。

 

圆周卷积与周期卷积的卷积过程一样,只是结果只取主值序列,其具体步骤结构框图大致如下所示:

图1-1圆周卷积计算结构框图

1.3重叠相加法

在实际应用中利用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)的重叠部分相加,最后得到结果为

 

2圆周卷积程序设计

2.1程序设计基本构思

由时域与频域的关系可知,两序列

在时域下进行线性卷积的结果等于这两个序列在频域下相乘后进行反变换回时域的结果。

圆周卷积在一定条件下(L>M+N-1)与线性卷积得到的结果相同,而圆周卷积可在频域下利用DFT求得,从而可采用DFT的快速算法FFT来计算,这样就可以利用FFT来计算线性卷积,大大提高运算效率。

而在利用FFT来计算圆周卷积的过程中当两序列的长度相差较大时采用重叠相加法来进行计算可有效提高计算的效率,减小存储空间的消耗。

2.2程序设计步骤

卷积函数程序设计:

(1)x1(n)进行N点快速傅里叶变换得X1(k)

(2)x2(n)进行N点快速傅里叶变换得X2(k)

(3)进行频域相乘Y(k)=X1(k)*X2(k)

(4)对Y(k)进行反变换得到时域卷积y(n)

图2-1卷积函数程序设计框图

重叠函数程序设计:

(1)首先取圆周卷积的周期L(即进行L点的快速傅里叶变换)

(2)计算每一分段的大小N

(3)填充序列使得循环中对序列的索引不会超出范围

(4)计算分段数K

(5)对序列进行分段调用juanji()函数计算圆周卷积

(6)各段重叠相加

(7)取出实际的输出序列

图2-2重叠函数程序设计框图

 

3程序代码

3.1主程序代码

x1=[1,2,3,4,5,5,4,3,2,1];

x2=[1,0,1];

L=8;

y=chongdie(x1,x2,L);

s=1:

10;subplot(2,2,1);

stem(s,x1)%作出序列x1图形

r=1:

3;subplot(2,2,2);

stem(r,x2)%作出序列x2图形

u=1:

13;subplot(2,2,3);

stem(u,y)%作出输出序列y图形

3.2重叠函数程序代码

function[y]=chongdie(x,h,L)

Lenx=length(x);%取x(n)的长度

M=length(h);%取h(n)的长度

N=L-M+1;%计算分段大小N

x=[x,zeros(1,N-1)];%填充序列使得循环中对序列的索引不会超出围

K=floor(Lenx/N);%确定分段数K

y=zeros(1,Lenx+L-1);

fori=0:

1:

K

ix=i*N;

x_seg=x(ix+1:

ix+N);%将x(n)分段

y_seg=juanji(x_seg,h,L);%调用函数juanji()计算圆周卷积

y(ix+1:

ix+L)=y(ix+1:

ix+L)+y_seg(1:

L);%各段重叠相加

end

y=y(1:

Lenx+M);%取出实际的输出序列

3.3卷积函数程序代码

functiony=juanji(x1,x2,L)

iflength(x1)>L%如果x1长度大于L则产生错误

error('Lmustnotbelessthanlengthofx1');

end

iflength(x2)>L%如果x2长度大于L则产生错误

error('Lmustnotbelessthanlengthofx2');

end

X1k=fft(x1,L);%对x1进行L点FFT计算

X2k=fft(x2,L);%对x2进行L点FFT计算

Yk=X1k.*X2k;%频域相乘

y=ifft(Yk);%反变换得卷积结果

if(all(imag(x1)==0))&(all(imag(x2)==0))

y=real(y);

end

 

4程序运行结果与分析

输入序列和周期L

x1=[1,2,3,4,5,5,4,3,2,1];

x2=[1,0,1];

L=8;

运算结果:

1246899864210

图4-1程序运行结果

通过计算,得到线性卷积结果,与程序运行结果相一致,可知程序计算结果是正确的,用重叠相加法实现圆周卷积的程序设计完成。

 

5心得体会

通过这次课程设计,加强了我们动手、思考和解决问题的能力。

数字信号处理这门课程是其他很多课程的基础,所以学好学通数字信号处理这门课程对我们来说是非常重要的。

而Matlab这款软件对数字信号处理的建模、编程、分析、实现有极大的帮助作用,所以我们应该掌握使用Matlab编程来实现对数字信号的处理。

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

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

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

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

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

 

参考文献

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

[2]刘泉、阙大顺、郭志强.数字信号处理.电子工业出版社.2009

[3]程卫国.MATLAB53精要编程及高级应用.北京:

机械工业出版社.2000

[4]李正周.MATLAB数字信号处理与应用.北京:

清华大学出版社.2008年

[5]罗建军、杨琦.精讲多练MATLAB.西安:

西安交通大学出版社.2002

 

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2