教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 求职职场 >

DSP课设_基于重叠相加法圆周卷积的实现(2)

来源:网络收集 时间:2026-04-13
导读: (5)对序列进行分段调用juanji()函数计算圆周卷积 (6)各段重叠相加 (7)取出实际的输出序列 方案2: (1)首先取圆周卷积的周期L(即进行L点的快速傅里叶变换) (2)计算每一分段的大小N (3)填充序列使得循

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

(6)各段重叠相加

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

方案2:

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

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

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

(4)计算分段数K

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

(6)各段重叠相加

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

数字信号处理课程设计_基于重叠相加法圆周卷积的实现

3.2程序设计流程图

整体程序包含主程序与卷积函数、重叠相加函数两大部分。

函数juanji()流程图如下

此函数用于对X1和X2两序列进行快速傅里叶变换后进行乘积,之后再进行反变换后恢复到时域结果。

数字信号处理课程设计_基于重叠相加法圆周卷积的实现

chongdie(x,h,N)函数流程图如下:

方案1: 方案2:

3.3方案比较

方案1和方案2的区别在于:在方案1中由已知的长序列x(n)分段大小N、短序列长度M依据公式计算L N+M-1圆周卷积周期L。而在方案2中由已知的圆周卷积周期L、短序列长度M依据公式计算长序列x(n)的分段大小。

比较这两种方案可以知道,方案1中如果L直接取L=N+M-1,则L的值不一定是2的n次方,而接下来的要进行的L点快速傅里叶变换中,L的值需要为2的n次方才能正确计算。所以方案1的必须要求取恰当的N值以使L点满足要求。方案2中可以直接取L为恰当的值从而满足快速傅里叶变换的要求,所以方案2比方案1的适用范围更大。

数字信号处理课程设计_基于重叠相加法圆周卷积的实现

4 程序代码

主程序:

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)

r=1:3;subplot(2,2,2);

stem(r,x2)

u=1:13;subplot(2,2,3);

stem(u,y)

函数juanji():

function y=juanji(x1,x2,L)

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

error('L must not be less than length of x1');

end

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

error('L must not be less than length of x2');

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

数字信号处理课程设计_基于重叠相加法圆周卷积的实现

函数chongdie():

方案1:

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

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

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

L=N+M-1; %计算圆周卷积的周期L使其不发生混叠

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

y=zeros(1,Lenx+L-1); %确定分段数K

for i=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-1); %取出实际的输出序列

方案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);

for i=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); %取出实际的输出序列

数字信号处理课程设计_基于重叠相加法圆周卷积的实现

5 程序运行结果与分析

输入序列和周期L

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

x2=[1,0,1];

L=8;

运算结果:1

2 4 6 8 9 9 8 6 4 2 1

由程序运行结果与线性卷积结果比较可以知道程序计算结果正确的。

数字信号处理课程设计_基于重叠相加法圆周卷积的实现

心得体会

作为电子信息工程系的学生,数字信号处理这门课程是其他很多课程的基础,所以学好数字信号处理这门课是非常重要的。而MATLAB这款软件对数字信号处理的建模、编程、分析、实现有极大的帮助作用,所以我们应该掌握使用MATLAB编程来实现对数字信号的分析处理。

此次我得到的课设题目是:基于重叠相加法圆周卷积的实现。拿到课设题目后,我仔细研究了与题目相关的原理,包括线性卷积、周期卷积、圆周卷积、重叠相加法、离散傅里叶变换DFT、快速傅里叶变换FFT等原理知识,弄清楚了它们之间的关系。通过这次课程设计,我不仅顺利完成课程设计的要求,而且在课程设计过程中通过对相关原理的回顾,对各相关原理之间的关系有了脱胎换骨般的认识,也意识到此前学到的理论知识是多么的浅薄。

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

通过本次课程设计,我对书本知识有了更深刻的理解,并应用课本的理论知识,结合相关软件,设计解决问题的算法。从而提高了由知识转换为技能的能力,提高了自己的实践能力。通过与同学的互相沟通,不仅使各自的知识得到了扩充,而且从中得到了很多的启示,这次课程设计让人受益匪浅。

数字信号处理课程设计_基于重叠相加法圆周卷积的实现

参考文献

【1】《数字信号处理》,刘泉、阙大顺、郭志强编著,电子工业出版社,2009

【2】《信号与系统》,刘泉,江雪梅编著,高等教育出版社,2006

【3】《MATLAB从入门到精通》,周建兴、岂兴明等编,人民邮电出版社,2008

【4】《MATLAB实用教程》,徐金明、张孟喜、丁涛编, …… 此处隐藏:1572字,全部文档内容请下载后查看。喜欢就下载吧 ……

DSP课设_基于重叠相加法圆周卷积的实现(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/119575.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)