重叠相加法实现卷积

合集下载

DFT计算卷积

DFT计算卷积
x0 [k ]
将长序列x[k] 分为若干段长度为L的序列
x1[k ]
x 2 [k ]
x3 [ k ]
k
L
2L
3L
定义
x[ k nL ] xn [ k ] 0
0 k L -1 其他
xn[k - nL] x[k ] DFT 计算卷积
n0

长序列和短序列的线性卷积
1. 重叠相加法(overlap add) 计算: yn [k ] xn [k ] h[k ]
序列 y0[k], y1[k]的重叠部分
依次将相邻两段的M-1个重叠点相加,即得到最 终的线性卷积结果。
DFT计算卷积
重叠相加法分段卷积举例
h[k ] 1
M=4
0 1 2 M-1
x[k ] 1
k
L=7
0 1 2
L-1
k
重叠相加法分段卷积举例(L=7,M=4)
y 0 [k ]
4 2 3 6 9
1
0 1 2 3
DFT计算卷积
两个有限长序列的线性卷积
问题提出: DFT{x1[k] 实际需要:
N
x2[k]}=X1[m]X2[m]
LTI系统响应
y[k]=x [k]h[k]
可否利用DFT计算线性卷积?
DFT计算卷积
两个有限长序列的线性卷积
设 x [k] 的非零范围是 g[k] 的非零范围是 y[k]=x [k]h[k]非零范围 序列y[k]的长度为 0 k N-1 0 k M-1 0 k N+M- 2 L=N+M-1
4点滑动平均系统去噪结果
8 7 6 5 4 3 2 1 0 -1
0
10

重叠相加法和重叠保留法的原理与实现

重叠相加法和重叠保留法的原理与实现

重叠相加法与重叠保存法的原理实现侯凯(吉林大学 通信工程学院 吉林 长春 130012)0概述线性卷积是求离散系统响应的主要方法之一,许多重要应用都建立在这一理论基础上,如卷积滤波等。

用圆周卷积计算线性卷积的方法归纳如下:将长为N 2的序列x(n)延长到L,补L -N 2个零,将长为N 1的序列h(n)延长到L,补L -N 1个零。

如果L ≥N1+N2-1,则圆周卷积与线性卷积相等,此时,可有FFT 计算线性卷积,方法如下:a.计算X(k)=FFT[x(n)]b.求H(k)=FFT[h(n)]c.求Y(k)=H(k)Y(k) k=0~L -1d.求y(n)=IFFT[Y(k)] n=0~L -1可见,只要进行二次FFT,一次IFFT 就可完成线性卷积计算。

上述结论适用于x(n)、h(n)两序列长度比较接近或相等的情况,如果x(n)、h(n)长度相差较多。

例如,h(n)为某滤波器的单位脉冲响应,长度有限,用来处理一个很长的输入信号x(n),或者处理一个连续不断的信号,按上述方法,h(n)要补许多零再进行计算,计算量有很大的浪费,或者根本不能实现。

为了保持快速卷积法的优越性,可将x(n)分为许多段后处理,每小段的长与h(n)接近,其处理方法有两种:重叠相加法和重叠保留法。

1重叠相加法——由分段卷积的各段相加构成总的卷积输出假定x i (n)表示图中第i 段x(n)序列如下图:22()(1)1()0i x n iN n i N x n ≤≤+-⎧=⎨⎩则输入序列可表为:()()i i x n x n ∞=-∞=∑图1 长序列分段滤波于是输出可分解为: ()()*()()*()()i i i i i y n x n h n x n h n y n ∞∞=-∞=-∞===∑∑其中 ()()*()i i y n x n h n =由此表明,只要将x(n)的每一段分别与h(n)卷积,然后再将这些卷积结果相加起来就可得到输出序列,这样,每一段的卷积都可用上面讨论的快速卷积来计算。

一种分段卷积快速算法的设计与实现

一种分段卷积快速算法的设计与实现

一种分段卷积快速算法的设计与实现作者:陈悦来源:《现代电子技术》2008年第17期摘要:常用的线性卷积方法要求两个输入序列的持续时间相同,但在实际工程中经常会遇到某个输入序列具有较长持续时间的情况,从而无法达到信号“实时”处理的要求。

在这种情况下,分段卷积是一种有效的解决方案。

设计了一种分段卷积快速算法模块,在FPGA中采用流水线结构进行实时处理。

经检验该方法正确且能很好地满足对信号进行实时处理的要求。

关键词:分段卷积;实时处理;重叠相加法;FPGA中图分类号:TN911.72 文献标识码:B 文章编号:1004373X(2008)1714602Design and Implementation of a Fast Algorithm of Partition ConvolutionCHEN Yue(College of Jincheng,Nanjing University of Aeronautics and Astronautics,Nanjing,211156,China)Abstract:The linear convolution usually needs two finite-time input sequences,but in the actual application,one of the input sequences is very long,so linear convolution can′t process the data in a real-time.On this situation,the partition convolution is an effective solution.This paper proposes a fast algorithm of partition convolution module,using pipeline structure in FPGA to real-time operate the data.The practical results indicate that this method is correct and effective.Keywords:partition convolution;real-time processing;overlap-add method;FPGA1 引言在理论上,信号长度为M)通过数字系统h(n)(长度为N)后得到输出y(n)(长度为M+N-1),其中y(n)=x(n)*h(n)。

数字信号处理实验报告_完整版

数字信号处理实验报告_完整版

实验1 利用DFT 分析信号频谱一、实验目的1.加深对DFT 原理的理解。

2.应用DFT 分析信号的频谱。

3.深刻理解利用DFT 分析信号频谱的原理,分析实现过程中出现的现象及解决方法。

二、实验设备与环境 计算机、MATLAB 软件环境 三、实验基础理论1.DFT 与DTFT 的关系有限长序列 的离散时间傅里叶变换 在频率区间 的N 个等间隔分布的点 上的N 个取样值可以由下式表示:212/0()|()()01N jkn j Nk N k X e x n eX k k N πωωπ--====≤≤-∑由上式可知,序列 的N 点DFT ,实际上就是 序列的DTFT 在N 个等间隔频率点 上样本 。

2.利用DFT 求DTFT方法1:由恢复出的方法如下:由图2.1所示流程可知:101()()()N j j nkn j nN n n k X e x n eX k W e N ωωω∞∞----=-∞=-∞=⎡⎤==⎢⎥⎣⎦∑∑∑ 由上式可以得到:IDFTDTFT( )12()()()Nj k kX e X k Nωπφω==-∑ 其中为内插函数12sin(/2)()sin(/2)N j N x eN ωωφω--= 方法2:实际在MATLAB 计算中,上述插值运算不见得是最好的办法。

由于DFT 是DTFT 的取样值,其相邻两个频率样本点的间距为2π/N ,所以如果我们增加数据的长度N ,使得到的DFT 谱线就更加精细,其包络就越接近DTFT 的结果,这样就可以利用DFT 计算DTFT 。

如果没有更多的数据,可以通过补零来增加数据长度。

3.利用DFT 分析连续信号的频谱采用计算机分析连续时间信号的频谱,第一步就是把连续信号离散化,这里需要进行两个操作:一是采样,二是截断。

对于连续时间非周期信号,按采样间隔T 进行采样,阶段长度M ,那么:1()()()M j tj nT a a a n X j x t edt T x nT e ∞--Ω-Ω=-∞Ω==∑⎰对进行N 点频域采样,得到2120()|()()M jkn Na a M kn NTX j T x nT eTX k ππ--Ω==Ω==∑因此,可以将利用DFT 分析连续非周期信号频谱的步骤归纳如下: (1)确定时域采样间隔T ,得到离散序列(2)确定截取长度M ,得到M 点离散序列,这里为窗函数。

信号与系统的卷积运算

信号与系统的卷积运算

信号与系统的卷积运算信号与系统是电子工程和通信工程等领域中的重要学科,它研究信号在系统中的传输和处理过程。

其中,卷积运算是信号与系统中的一种重要数学运算,它在信号处理和系统分析中得到广泛应用。

一、卷积运算的定义卷积运算是一种基于积分的数学运算,用于描述两个函数之间的相互作用。

在信号与系统中,卷积运算可以理解为将两个信号进行线性加权叠加的过程。

在时域中,给定两个函数f(t)和g(t),它们的卷积运算表示为h(t) = f(t)*g(t),其中"*"代表卷积运算符号。

卷积运算的公式为:h(t) = ∫f(τ)g(t-τ)dτ其中,τ代表一个积分变量,它与t无关。

卷积运算的结果h(t)是一个新的函数,描述了信号f(t)和g(t)之间的相互作用。

二、卷积运算的性质卷积运算具有多种性质,使其成为信号处理和系统分析中的重要工具。

下面介绍几个常用的卷积运算性质:1. 交换律:f(t)*g(t) = g(t)*f(t)2. 结合律:f(t)*(g(t)*h(t)) = (f(t)*g(t))*h(t)3. 分配律:f(t)*(g(t)+h(t)) = f(t)*g(t) + f(t)*h(t)这些性质使得卷积运算可以方便地应用于信号处理和系统建模中。

三、卷积运算的应用卷积运算在信号与系统领域有着广泛的应用,下面介绍几个典型的应用场景:1. 系统响应计算:在系统分析中,可以使用卷积运算来计算系统对输入信号的响应。

假设系统的冲激响应为h(t),输入信号为x(t),那么系统的输出可以表示为y(t) = h(t)*x(t)。

通过卷积运算,可以方便地计算系统的输出。

2. 信号滤波:在信号处理中,卷积运算可以实现信号的滤波功能。

通过选择合适的滤波器函数,可以对信号进行频率域的加权叠加,实现滤波的效果。

例如,可以使用低通滤波器对信号进行平滑处理,去除高频噪声。

3. 信号复原与恢复:在通信领域中,卷积运算可以用于信号的复原与恢复。

数字信号处理知识点

数字信号处理知识点

《数字信号处理》辅导一、离散时间信号和系统的时域分析 (一) 离散时间信号(1)基本概念信号:信号传递信息的函数也是独立变量的函数,这个变量可以是时间、空间位置等。

连续信号:在某个时间区间,除有限间断点外所有瞬时均有确定值。

模拟信号:是连续信号的特例。

时间和幅度均连续。

离散信号:时间上不连续,幅度连续。

常见离散信号——序列。

数字信号:幅度量化,时间和幅度均不连续。

(2)基本序列(课本第7——10页)1)单位脉冲序列 1,0()0,0n n n δ=⎧=⎨≠⎩ 2)单位阶跃序列 1,0()0,0n u n n ≥⎧=⎨≤⎩3)矩形序列 1,01()0,0,N n N R n n n N ≤≤-⎧=⎨<≥⎩ 4)实指数序列 ()n a u n5)正弦序列 0()sin()x n A n ωθ=+ 6)复指数序列 ()j n n x n e e ωσ= (3)周期序列1)定义:对于序列()x n ,若存在正整数N 使()(),x n x n N n =+-∞<<∞ 则称()x n 为周期序列,记为()x n ,N 为其周期。

注意正弦周期序列周期性的判定(课本第10页)2)周期序列的表示方法: a.主值区间表示法 b.模N 表示法 3)周期延拓设()x n 为N 点非周期序列,以周期序列L 对作()x n 无限次移位相加,即可得到周期序列()x n ,即()()i x n x n iL ∞=-∞=-∑当L N ≥时,()()()N x n x n R n = 当L N <时,()()()N x n x n R n ≠(4)序列的分解序列共轭对称分解定理:对于任意给定的整数M ,任何序列()x n 都可以分解成关于/2c M =共轭对称的序列()e x n 和共轭反对称的序列()o x n 之和,即()()(),e o x n x n x n n =+-∞<<∞并且1()[()()]2e x n x n x M n *=+- 1()[()()]2o x n x n x M n *=--(4)序列的运算 1)基本运算2)线性卷积:将序列()x n 以y 轴为中心做翻转,然后做m 点移位,最后与()x n 对应点相乘求和——翻转、移位、相乘、求和定义式: 1212()()()()()m y n x m x n m x n x n ∞=-∞=-=*∑线性卷积的计算:A 、图解 B 、解析法C 、不进位乘法(必须掌握)3)单位复指数序列求和(必须掌握)/2/2/2/2/2/21/2/2/2/2/2/2(1)/21()()/(2)1()()/(2)sin(/2)sin(/2)j N j N j N j N j N j N j N N j nj j j j j j j n j N e e e e e e e j ee e e e e e e j N e ωωωωωωωωωωωωωωωωωω------------=-----===---=∑如果2/k N ωπ=,那么根据洛比达法则有sin(/2)(0)(0)(()())sin(/2)N N k N N k N ωδδω===或可以结合作业题3.22进行练习(5)序列的功率和能量能量:2|()|n E x n ∞=-∞=∑功率:21lim |()|21NN n NP x n N →∞=-=+∑ (6)相关函数——与随机信号的定义运算相同(二) 离散时间系统1.系统性质 (1)线性性质定义:设系统的输入分别为1()x n 和2()x n ,输出分别为1()y n 和2()y n ,即1122()[()],()[()]y n T x n y n T x n ==统的输对于任意给定的常数a 、b ,下式成立1212()[()()]()()y n T ax n bx n a y n by n =+=+则该系统服从线性叠加原理,为线性系统,否则为非线性系统。

用MATLAB实现线性卷积运算北邮

用MATLAB实现线性卷积运算北邮

信息及通信工程学院数字信号处理实验报告实验题目:用MATLAB实现线性卷积运算班级:2019211113姓名:学号:日期:2019年5月索引一、实验原理 (1)1、算法产生背景 (1)2、算法基本思想 (1)1)重叠相加法 (1)2)重叠保留法 (2)二、流程图设计 (3)1、重叠相加法 (3)2、重叠保留法 (3)三、MATLAB源代码 (3)1、重叠相加源码 (3)2、重叠保留源码 (4)四、实验结果与分析 (5)①调用CONV()计算 (5)②测试重叠相加算法 (5)③测试重叠保留算法 (5)五、讨论与总结 (6)1、算法效率分析: (6)A.重叠相加法 (6)B.重叠保留法 (7)C.调用conv() (8)D.综合对比分析 (8)2、故障和问题分析 (9)①分段问题 (9)②运算完整性问题 (9)③算法硬件实现 (10)一、实验原理1、算法产生背景DFT是连续傅里叶变换在时域和频域上都离散的形式,将时域信号的采样变换为在离散时间傅里叶变换频域的采样。

在形式上,变换两端(时域和频域上)的序列是有限长的。

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

对于线性非移变离散系统,可由线性卷积表示时域输入输出关系,即通常采用循环卷积降低运算量,但实际中往往无法满足对信号处理的实时性要求。

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

2、算法基本思想1)重叠相加法重叠相加法是将待过滤的信号分割成长为N的若干段,如图1所示,每一段都可以和有限时宽单位取样响应作卷积,再将过滤后的各段重叠相加。

具体算法实现原理如图2所示,建立缓存序列,每次输入N点序列,通过计算x(n)和h(n) 的循环卷积实现线性卷积运算,将缓存的M-1点序列和卷积结果相加,并输出前N点作为计算结果,同时缓存后M-1点,如此循环,直至所有分段计算完毕,则输出序列y(n)为最终计算结果。

重叠相加法与重叠保留法原理

重叠相加法与重叠保留法原理

重叠相加法通过将多个重叠的图像或数据序列叠加在一起,可以获得更完整或更丰富的信息。这种方法常用于拼接图像和合并数据集。
重叠保留法则是一种保留重叠部分并处理其他部分的方法。它常用于图像拼接和数据处理中,可以保留重要细节和避免重复计算。
结论与展望
CATALOGUE
06
重叠相加法
01
该方法通过将重叠部分相加来计算重叠面积,适用于不同重叠程度和形状的图形重叠问题。在重叠面积较小的情况下,该方法能够得到较为精确的结果。
随着信号处理技术的发展,对重叠相加法和重叠保留法的研究有助于提高信号处理的效果和精度,进一步推动相关领域的技术进步。
深入理解这两种算法的原理和特点,有助于在实际应用中选择合适的算法,提高信号处理的效果和效率。
重叠相加法原理
CATALOGUE
02
重叠相加法是一种将多个重叠部分进行相加的方法,用于解决重叠或交叉的问题。
详细描述
重叠相加法适用于需要计算重叠部分总和的场景,而重叠保留法适用于需要保留最大值的场景。
总结词
重叠相加法适用于那些需要将重叠部分累加的场景,例如计算重叠部分的面积、体积等。而重叠保留法适用于那些需要保留最大值的场景,例如在图像处理中,重叠保留法可以用于保留最大的像素值,以突出显示图像中的重要区域。
跨学科合作
加强与其他学科领域的合作与交流,借鉴相关学科的理论和方法,推动重叠相加法和重叠保留法的进一步发展。
标准化与规范化
制定重叠相加法和重叠保留法的标准操作流程和规范,促进其在不同领域中的普及和应用。同时,加强与其他国家和地区的交流与合作,推动相关方法的国际标准化进程。
应用拓展
将重叠相加法和重叠保留法应用于更多领域,如地理信息系统、图像处理、生物信息学等。探索其在不同领域中的实际应用价值,为相关领域的研究提供新的思路和方法。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

设计任务计算1个给定序列与输入序列的卷积。

功能:对给定的数据进行卷积运算,要求分段卷积由循环卷积实现。

要求设计有数据导入界面,各种参数从软件界面可以输入,其中给定序列可以由界面输入,对运算前后的数据绘制曲线。

要求:1)初步完成总体设计,搭好框架,确定人机对话的界面,确定函数功能,控制参数的输入方法;2)设计线性卷积的实现方案;3)编写两序列作循环卷积的程序;4)通过直接做线性卷积来检验最后结果。

设计步骤:1)用结构化设计方法。

一个程序划分成若干模块,每一个模块的函数功能要划分好,总体设计应画出流程图;2)输入输出界面要友好;3)源程序书写要规范,加必要的注释;4)要提供通过直接卷积进行检验的结果;5)程序一定要要能运行起来。

一、原理1、算法产生背景DFT 是连续傅里叶变换在时域和频域上都离散的形式,将时域信号的采样变换为在离散时间傅里叶变换频域的采样。

在形式上,变换两端(时域和频域上)的序列是有限长的。

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

对于线性非移变离散系统,可由线性卷积表示时域输入输出关系,即y(n)=x(n)*h(n)通常采用循环卷积降低运算量,但实际中往往无法满足对信号处理的实时性要求。

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

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

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

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

如以下情况:h(n)长度为N,x(n)长度为无限长x(n)取M点,且与N尽量接近可采用如下方法来解决重叠相加法的卷积示意图∑∞-∞==k kn x n x )()()()()(kM n R n x n x M k -= x(n)与h(n)的卷积为)(*)()(*)()(n x n h n h n x n y k k ∑∞-∞===)()](*)([n y n h n x k k kk ∑∑∞-∞=∞-∞===重叠相加法的步骤如下(1)将h(n)补零延长到L =M+ N -1,并计算长为L 的FFT ,得到 H(k)。

(2)分别将xk(n)补零延长到L =M+ N -1,并计算长为L 的FFT ,得到 Xk(k) (3)计算)()()(k H k X k Y k k =,并求长为L 的反变换,即)]([)(k Y IFFT n y k k =(4)将yk(n)的重叠部分相加,最后得到结果为∑∞-∞==k kn y n y )()(二、程序设计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、程序流程图重叠相卷积三、分析与测试1、循环卷积设计①程序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),长度足够长for i=0:1:Txi=i*N+1;x_seg = x(xi:xi+N-1); %选择低点数计算时的分段x(n)X1k = fft(x_seg,L); %x_seg做L点FFTX2k = fft(h,L); %h做L点FFTYk = 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个点endy=y(1:Lx+M-1); %取出最终的输出序列②测试设N=4h=[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) 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);endt=B(length(B)); %保存B序列最后一个数for j=length(B):-1:2 %B序列依次向后移位B(j)=B(j-1);endB(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.附录:源程序function varargout = zc(varargin)%ZC M-file for% 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 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 with the given input% arguments.%% *See GUI Options on GUIDE's 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 30-Jun-2010 22:11:29% Begin initialization code - DO NOT EDITgui_Singleton = 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(varargin{1})= str2func(varargin{1});endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});elsegui_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% eventdata 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 zc= hObject;% Update handles structureguidata(hObject, handles);% UIWAIT makes zc wait for user response (see UIRESUME)% uiwait;% --- 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 VARARGOUT);% 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 structurevarargout{1} = ;function aa_Callback(hObject, eventdata, handles)% hObject handle 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 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 white background on Windows.% See ISPC and COMPUTER.if ispcset(hObject,'BackgroundColor','white');elseset(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 version 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, eventdata, 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 ispcset(hObject,'BackgroundColor','white');elseset(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 GUIDATA)% 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 - to be defined in a future version of MATLAB % handles empty - handles not created until after all CreateFcnscalled% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispcset(hObject,'BackgroundColor','white');elseset(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')) ;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,'string'));a=str2num(get,'string'));b=str2num(get,'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),长度足够长for i=0:1:Txi=i*N+1;x_seg = x(xi:xi+N-1); %选择低点数计算时的分段x(n)X1k = fft(x_seg,L); %x_seg做L点FFTX2k = fft(h,L); %h做L点FFTYk = 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个点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);endt=B(length(B)); %保存B序列最后一个数for j=length(B):-1:2 %B序列依次向后移位B(j)=B(j-1);endB(1)=t;endxx=conv(a,b);yy=fftfilt(a,b,N);axesplot(a)axesplot(b)axesplot(y)axesplot(z)axesplot(yy)axesplot(xx)% --- Executes on button press in tt2.function tt2_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,'string'));a=str2num(get,'string'));b=str2num(get,'string'));h=a;x=b;M = length(h);if N <MN = 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:Txi=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-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:Lxz(i)=A(1)*B(1);for k=2:length(B)z(i)=z(i)+A(k)*B(k);endt=B(length(B));for j=length(B):-1:2 B(j)=B(j-1);endB(1)=t;endxx=conv(a,b);yy=fftfilt(a,b,N);axesstem(a)axesstem(b)axesstem(y)axesstem(z)axesstem(yy)axesstem(xx)。

相关文档
最新文档