重叠相加法实现卷积
基于重叠保留法的圆周卷积
1.理论知识1.1圆周卷积的定义设)(1n x 和)(2n x 为长度为N 的有限长序列,且[])()(11k X n x DFT =,[])()(22k X n x DFT =,如果()()()k X k X k Y 21=,则()()[]k Y IDFT n y =()()()()n R m n x m x N N N m -=∑-=1102 (1)证明:相当于将)(~),(~21n x n x 作周期卷积和后,再取主值序列。
将)(k y 周期延拓:)(~)(~~21k X k X k Y =)(则有: []()()⎥⎦⎤⎢⎣⎡-=-==∑∑-=-=10211021))(()(~)(~)(~)(~N m N N N m m n x m x m n x m x k Y IDFS n y在主值区间)())((,1011m x m x N m N =-≤≤ ,所以:()()()n R m n x m x n R n y n y N N m N N ⎥⎦⎤⎢⎣⎡-==∑-=1021)()()(~)( 同样可以证明:()())()()(1012n R m n x m x n y N N m N ⎥⎦⎤⎢⎣⎡-=∑-=定义式(1)为序列)(1n x 与)(2n x 的圆周卷积,习惯表示为 ()()()n n x y 21x ⊙n =从以上的证明过程也可以得出圆周卷积与周期卷积之间的关系,即有限长序列圆周卷积结果的周期延拓等于它们周期延拓后的周期卷积。
也就是说,周期卷积的主值序列是各周期序列主值序列的圆周卷积。
1.2圆周卷积的计算圆周卷积的具体步骤为:第一步:在哑元坐标上做)(1m x 与)(2m x ;第二步:把)(2m x 沿着纵坐标翻转,得到)(2m x -; 第三步:对)(2m x -做圆周移位,得()()()n R m n x N N -2;第四步:)(1m x 与()()()n R m n x N N -2对应的相同m 的值进行相乘,并把结果进行相加,得到的对应于自变量n 的一个()n y ;第五步:换另一个n ,重复第三、四步,直到n 取遍[0,N-1]中的所有值,得到完整的()n y 。
北邮《数字信号处理》Matlab实验——实现重叠相加和重叠保留算法完成线性卷积的分段计算
实验目的:
实现重叠相加和重叠保留算法,完成线性卷积的分段计算(可任意指定 x(n)及 h(n)) 。
试验内容:
1、对算法的概括性说明
重叠相加法是将待过滤的信号分割成长为 N 的若干段,每一段都可以和有限时宽单位 取样响应作卷积,再将过滤后的各段重叠相加。建立缓存序列,每次输入 N 点序列,通过 计算 x(n)和 h(n) 的循环卷积实现线性卷积运算,将缓存的 M‐1 点序列和卷积结果相加,并 输出前 N 点作为计算结果,同时缓存后 M‐1 点,如此循环,直至所有分段计算完毕,则输 出序列 y(n)为最终计算结果。
5、总结实验过程中出现的问题以及解决问题的具体措施
1.利用自定义函数解决代码重复使用的问题,避免多次输入同样代码。 2.构造分段补零不会实现,通过上网查资料后获得实现相关功能的代码。
可见, 用重叠相加法和重叠保留发分别计算的卷积结果与直接利用线性卷积计算的结果 一致。算法正确性得以验证。
4、结合教材 3.5.1 节作运算量分析
若有限长因果序列 x(n)和 h(n)的长度分别为 N 和 M,计算其线性卷积 y(n),需 MN 次乘 法运算,(M‐1)(N‐1)次加法运算。如果利用循环卷积方法,按基 2 时域抽选法实现 L 点 FFT 和 IFFT,需
3、实验结果
输入(参考教材例 3.4、3.5) :
n = 0:9; xn = n+1; hn = [1,0,-1]; N = 6;
y1 = conv(hn, xn) y2 = overlap_add(xn, hn, N) y3 = overlap_save(xn, hn, N)
输出:
y1 = 1 y2 = Columns 1 through 10 1.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2 2 2 2 2 2 2 2 2 -9 -10
通过重叠相加法实现卷积
数字信号处理课程设计题目:通过重叠相加法实现卷积院系:自动化与信息工程学院专业:通信工程班级:通信092学号:3090432051姓名:侯鹏指导教师:吴鹏飞2012年6月23日-2012年6月30日设计任务通过重叠相加法实现卷积(C语言或MATLAB实现)。
计算一个给定序列与输入序列的卷积。
功能对给定的数据进行卷积计算,要求分算卷积由循环卷积实现要求设计有数据导入界面,各种参数可以由软件界面输入,其中给定序列可以由界面输入,对运算前后的数据绘制曲线。
设计步骤:1)初步完成总体设计,搭好框架,确定人机对话界面,确定函数功能,控制参数的输入方法;2)设计线性卷积的实现方案;3)编写两序列做循环卷积的程序;4)通过直接作线性卷积来检验最后结果;设计要求:1)用结构化设计方法。
一个程序划分成若干模块,每一个模块的函数功能要划分好,总体设计要画出流程图;2)输入输出界面要友好;3)源程序书写要规范,加必要的注释;4)要提供直接通过卷积进行检验的结果;5)程序一定要能运行起来。
课程设计的最后结果是提交一份实验报告,内容包括:1)程序的设计思想,包括功能描述,函数接口的确定;2)流程图;3)程序源代码(需打印);4)测试方法和结果;5)小结。
一、原理<一>设计思想:运用分段处理方法中的重叠相加法计算两个序列的卷积运算。
设一个给定序列是长度为n1的A,另一个导入序列是长度为n2的B,其中B 序列 是相对A 序列比较长的,所以可以把B 分为和A 一样长的若干段段,即B 分后每一小段长度为n1。
根据书上的公式:)()(*)()(*)()(*)()(0n y n x n A n B n A n B n A n y k k k k k k ∑∑∑∞-∞=∞=====可知将B 序列的每一小段与A 序列做现行卷积,然后将所有的n2/n1段的线性卷积结果相加起来就是整个B 序列和A 序列的线性卷积结果,而又在本设计中,B 序列的一小段和A 序列的线性卷积又可由循环卷积来实现,只要让循环卷积的点数121-+≥n n L ,循环卷积的结果就和线性卷积的结果等价,在本实验中取112-⨯=n L ,故A 序列和B 序列的线性卷积可认为是由A 序列和B 的每一小段做112-⨯=n L 点的循环卷积的最终累加和,另外还有两个个问题需要考虑,首先是做循环卷积时要对A 序列和B 序列的那一小段补零做卷积后,最终做累加的时候要考虑重叠的片段,必须将重叠的两段加起来。
重叠相加法和重叠保留法的原理与实现
重叠相加法与重叠保存法的原理实现侯凯(吉林大学 通信工程学院 吉林 长春 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)卷积,然后再将这些卷积结果相加起来就可得到输出序列,这样,每一段的卷积都可用上面讨论的快速卷积来计算。
【含源代码】北邮dsp-MATLAB试验一重叠相加和重叠保留
Dsp-matlab实验实验一:重叠相加法和重叠保留法的实现设计报告课题名称:学生姓名:级:班班内序号:学号:2015/06/15 日期:目录一、实验原理·········································二、Matlab源代码·································运行结果Matlab三、····························结果分析Matlab四、····································五、遇到的难题与解决方法····························参考文献·························································一、实验原理1、算法来源DFT 是连续傅里叶变换在时域和频域上都离散的形式,将时域信号的采样变换为在离散时间傅里叶变换频域的采样。
利用FFT计算卷积
利用FFT 计算卷积一.线卷积的作用及定义线卷积包括卷积积分和卷积和。
1.线卷积的作用求解线性系统对任意激励信号的零态响应。
2.卷积积分)(*)(d )()()(t h t x t h x t y =-=⎰∞∞-τττ3.卷积和离散系统的时域分析是,已知离散系统的初始状态和输入信号(激励),求离散系统的输出(响应),两种方法:递推解法和离散卷积法。
卷积和:)()()()()(n h n x m n h m x n y m *=-=∑∞-∞= 二.圆周卷积的定义圆周移位:一周期为N 的周期序列, 可视为一主值序列在圆周上的循环移位。
周期序列在时间轴上左移右移m 反时针转称为圆周移位。
时域圆周卷积(循环卷积))()()(n h n x n y ⊗=()()()∑-=-=10)(N m N N n R m n h m x条件:两序列实现圆卷积的条件是:长度相等,如果不相等, 可通过增补零值来使之相等。
特点:卷积求和范围只在10-≤≤N m 有限区间进行;卷积时不作反褶平移, 而是反褶圆移步骤:量置换→反褶→圆移→相乘→求和。
三.两者的关系有限长序列的圆卷积和线卷积的关系在一般情况下,两序列的圆卷积和线卷积是不相等的,这是因为:线卷积是平移, 结果长度为121-+=N N L ;而圆卷积是圆移,结果长度为21N N L ==。
只有在两卷积的结果长度相时,二者才有相同的结果。
解决方法是:在作圆卷积时,通过加零的方法,使两序列的长度都增加到121-+=N N L ,此时,圆卷积的结果和线卷积同。
四.利用FFT 计算卷积工程实际需要解决的卷积:)()()(n h n x n y *=,但其计算量很大。
而圆卷积为:)()()(n h n x n y ⊗=,便于采用FFT 算法, 故计算速度快。
若将线卷积的两个序列用增补零的方法将长度取为一致,此时两序列的离散线卷积和圆周卷积结果是相等的,这样就则可以通过圆卷积来快速计算线卷积。
DFT计算卷积
0
M -1
L -1
k
y1 [k] k
0
M -1
L -1
例: 已知序列x[k]=k+2,0k12, h[k]={1,2,1}试利用重
叠保留法计算线性卷积, 取L=5 。 解: 重叠保留法
x1[k]={0, 0, 2, 3, 4} x2[k]={3, 4, 5, 6 ,7}
x4[k]={9, 10 , 11, 12,13} y1[k]= x1[k] ⑤h[k]= {11, 4, 2, 7, 12} y2[k]= x2[k] ⑤ h[k]= {23, 17, 16, 20, 24} y3[k]= x3[k] ⑤ h[k]= {35, 29, 28, 32, 36} y4[k]= x4[k] ⑤ h[k]= {47, 41, 40, 44, 48} y5[k]= x5[k] ⑤ h[k]= {12, 37, 52, 41, 14} y[k]={2, 7, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 41, 14}
x2 [0] x [1] 2 x [ M 1] 2 x [ L 1] 2 0 x1[0] x2 [ L M - 2]
x1[0] x1[1] x1[ M - 2] x1[ M - 1] x1[0] x1[ M - 3] x1[ M - 2] x1[0] x1[1]
2. 重叠保留法(overlap save) 方法:
(1) 将x[k]长序列分段,每段长度为L。
(2) 各段序列xn[k]与 M点短序列h[k]循环卷积。
(3) 从各段循环卷积中提取线性卷积结果。
因yn[k]=xn [k] L h[k] 前M-1个点不是线性卷积的点, 故分段时,每段与其前一段有M-1个点重叠。
数字信号处理期末试卷(共七套)
第一套试卷学号 姓名 成绩一、 选择题(每题3分,共5题) 1、)63()(π-=n j en x ,该序列是 。
A.非周期序列B.周期6π=N C.周期π6=N D. 周期π2=N2、序列)1()(---=n u a n x n ,则)(Z X 的收敛域为 。
A.a Z <B.a Z ≤C.a Z >D.a Z ≥3、若一线性移不变系统当输入为x(n)=δ(n)时输出为y(n)=R 3(n),则当输入为u(n)-u(n -2)时输出为 。
A.R 3(n)B.R 2(n)C.R 3(n)+R 3(n -1)D.R 2(n)+R 2(n -1) 4、)()(101n R n x =,)()(72n R n x =,用DFT 计算二者的线性卷积,为使计算量尽可能的少,应使DFT 的长度N 满足 。
A.16>NB.16=NC.16<ND.16≠N5.已知序列Z 变换的收敛域为|z |<1,则该序列为 。
A.有限长序列 B.右边序列 C.左边序列 D.双边序列 二、填空题(每题3分,共5题)1、离散时间信号,其时间为 的信号,幅度是 。
2、线性移不变系统的性质有__ ____、___ ___和分配律。
3、要想抽样后能够不失真的还原出原信号,则抽样频率必须 ,这就是奈奎斯特抽样定理。
4、序列R 4(n)的Z 变换为_____ _,其收敛域为____ __。
5、对两序列x(n)和y(n),其线性相关定义为 。
三、10)(-≤≥⎩⎨⎧-=n n ba n x nn求该序列的Z 变换、收敛域、零点和极点。
(10分)四、求()()112111)(----=z z Z X ,21<<z 的反变换。
(8分)五、已知两个有限长序列如下图所示,要求用作图法求。
(10分)六、已知有限序列的长度为8,试画出按频率抽选的基-2 FFT算法的蝶形运算流图,输入为顺序。
(10分)七、问答题:数字滤波器的功能是什么?它需要那几种基本的运算单元?写出数字滤波器的设计步骤。
数字信号处理期末试题库(精心整理)
一、单项选择题(10小题,每小题2分,共20分)在每小题列出的三个选项中只有一个选项是符合题目要求的,请将正确选项前的字母填在题后的括号内。
1. 下面说法中正确的是。
A.连续非周期信号的频谱为周期连续函数B.连续周期信号的频谱为周期连续函数C.离散非周期信号的频谱为周期连续函数D.离散周期信号的频谱为周期连续函数2. 要处理一个连续时间信号,对其进行采样的频率为3kHz,要不失真的恢复该连续信号,则该连续信号的最高频率可能是为。
A.6kHz B.1.5kHz C.3kHz D.2kHz3.已知某序列Z变换的收敛域为5>|z|>3,则该序列为。
A.有限长序列B.右边序列C.左边序列D.双边序列4. 下列对离散傅里叶变换(DFT)的性质论述中错误的是。
A.DFT是一种线性变换B. DFT可以看作是序列z变换在单位圆上的抽样C. DFT具有隐含周期性D.利用DFT可以对连续信号频谱进行精确分析5. 下列关于因果稳定系统说法错误的是。
A.极点可以在单位圆外B.系统函数的z变换收敛区间包括单位圆C.因果稳定系统的单位抽样响应为因果序列D.系统函数的z变换收敛区间包括z=∞6. 设系统的单位抽样响应为h(n),则系统因果的充要条件为。
A.当n>0时,h(n)=0 B.当n>0时,h(n)≠0C.当n<0时,h(n)=0 D.当n<0时,h(n)≠07. 要从抽样信号不失真恢复原连续信号,应满足下列条件的哪几条?答。
(I)原信号为带限 II)抽样频率大于两倍信号谱的最高频率(III)抽样信号通过理想低通滤波器A.I、IIB.II、IIIC.I、III D.I、II、III8. 在窗函数设计法,当选择矩形窗时,最大相对肩峰值为8.95%,N增加时, 2π/N减小,起伏振荡变密,最大相对肩峰值则总是8.95%,这种现象称为。
A.吉布斯效应B.栅栏效应C.泄漏效应 D.奈奎斯特效应9. 下面关于IIR滤波器设计说法正确的是。
重叠保留法修正
若定义M 若定义M = L –N+1,则 N+1,
2.重叠保留法 步骤: 2.重叠保留法—步骤: 重叠保留法—
1.对输入数据重叠分段为L 1.对输入数据重叠分段为L点,将N点h(n)补零为L点; 对输入数据重叠分段为 h(n)补零为 补零为L ′ 2.对每一段 2.对每一段 xk (n),计算L点循环卷积 yk (n) = xk (n) ⊗ h(n); 计算L 3.每段循环卷积输出去掉前面N 点只保留后面M 3.每段循环卷积输出去掉前面N-1点只保留后面M点; 每段循环卷积输出去掉前面 4.将每段 点输出拼接构成最终的线性卷积 4.将每段M点输出拼接构成最终的线性卷积。 将每段M 构成最终的线性卷积。
Digital Signal Processing
7 2011-11-25
1 2011-11-25
2.重叠保留法 2.重叠保留法
不满足利用循环卷积计算线性卷积的条件下, 利用循环卷积计算线性卷积的条件下 在不满足利用循环卷积计算线性卷积的条件下,循环卷积 的部分结果是有用的,可以将序列合理的分段处理 利用循环 合理的分段处理, 的部分结果是有用的,可以将序列合理的分段处理,利用循环 的部分结果来拼接线性卷积。 卷积的部分结果来拼接线性卷积 卷积的部分结果来拼接线性卷积。 设序列 h(n) 的分段方法为: 的长度为 N,则对长序列 x(n)的分段方法为: 1.先在序列 1.先在序列 x(n)前补 N −1 0; 个 2.对补 后的序列进行重叠分段 2.对补0后的序列进行重叠分段,每段的长度为 L ,与上一 对补0 重叠分段, 分段重叠N 分段重叠N-1点。
yk (n) = y 'k (n + N −1), n = 0,L, M −1
y(n+kM ) = ∑ yk (n),
快速卷积中嵌套算法的设计与实现说明书
快速卷积中嵌套算法的设计与实现摘要离散富里叶变换(DFT)和卷积计算在图象、数字信号处理中起着重要的作用,因此对快速算法的研究早就引起人们足够的重视。
针对卷积算法的计算进行深入研究,发现在离散卷积计算过程中的计算量会随着输入信号序列的长度而急速增加,传统的卷积计算算法已不能满足要求,本文研究了如何将一维卷积变换成二维卷积或多维卷积,而多维卷积中由包含简单的一维卷积,从而进行嵌套计算。
研究了利用短卷积嵌套计算长卷积的算法,最终实现16点循环卷积嵌套算法,大幅度减少了卷积的计算量。
关键词:卷积,快速,嵌套Design and implementation of the nested algorithm of fast convolutionAbstractDiscrete Fourier Transform (DFT) and convolution calculation plays an important role in the image, a digital signal processing, and therefore the study of fast algorithms have attracted enough attention. Through the In-depth study of the convolution algorithm, we find the calculation of the convolution calculation will increases with the length of the rapid of the input signal sequence.Conventional convolution calculati on algorithm can’t meet the requirements. This paper studies how the one-dimensional convolution transform into a multi-dimensional convolution or two-dimensional, and multi-dimensional convolution include simple one-dimensional convolution. Using short convolution calculate long convolution, and finally achieving 16 points nested circular convolution algorithm, significantly reducing the computation of convolution.Key Words: convolution;fast,;nested目录摘要 (i)Abstract (ii)第一章绪论 (1)1.1课题研究背景 (1)1.2快速卷积算法的发展历史 (3)1.3课题研究内容 (4)第二章快速卷积算法运算中的问题 (5)2.1数字信号处理中的计算问题 (5)2.1.1滤波和相关 (5)2.1.2离散傅里叶变换 (8)2.2算法序列 (11)第三章利用短卷积嵌套计算长卷积算法原理简介 (13)3.1二维卷积与多维卷积 (13)3.2 Agarwal-Cooley卷积算法 (19)3.3 分裂算法 (28)第四章快速卷积嵌套算法实现 (34)4.1 16点循环卷积算法实现 (34)4.2 算法性能分析 (35)第五章总结 (37)参考文献 (38)本文由闰土服务机械外文文献翻译成品淘宝店整理第一章 绪论1.1课题研究背景随着大规模集成电路、计算机和数字信号处理器(DSP )的快速发展,数字信号处理技术已得到广泛应用。
数字信号处理复习题及参考答案
数字信号处理期末复习题一、单项选择题(在每个小题的四个备选答案中选出一个正确答案,并将正确答案的号码写在题干后面的括号内,每小题1分,共20分)1.要从抽样信号不失真恢复原连续信号,应满足下列条件的哪几条( ① )。
(Ⅰ)原信号为带限(Ⅱ)抽样频率大于两倍信号谱的最高频率(Ⅲ)抽样信号通过理想低通滤波器①.Ⅰ、Ⅱ②.Ⅱ、Ⅲ③.Ⅰ、Ⅲ④.Ⅰ、Ⅱ、Ⅲ2.在对连续信号均匀采样时,若采样角频率为Ωs,信号最高截止频率为Ωc,则折叠频率为( ④ )。
①Ωs ②.Ωc③.Ωc/2 ④.Ωs/23.若一线性移不变系统当输入为x(n)=δ(n)时输出为y(n)=R3(n),则当输入为u(n)-u(n-2)时输出为( ② )。
①.R3(n) ②.R2(n)③.R3(n)+R3(n-1) ④.R2(n)-R2(n-1)4.已知序列Z变换的收敛域为|z|>1,则该序列为( ② )。
①.有限长序列②.右边序列③.左边序列④.双边序列5.离散系统的差分方程为y(n)=x(n)+ay(n-1),则系统的频率响应( ③ )。
①当|a|<1时,系统呈低通特性②.当|a|>1时,系统呈低通特性③.当0<a<1时,系统呈低通特性④.当-1<a<0时,系统呈低通特性6.序列x(n)=R5(n),其8点DFT记为X(k),k=0,1,…,7,则X(0)为( ④ )。
①.2 ②.3③.4 ④.57.下列关于FFT的说法中错误的是( ① )。
①.FFT是一种新的变换②.FFT是DFT的快速算法③.FFT基本上可以分成时间抽取法和频率抽取法两类④.基2 FFT要求序列的点数为2L(其中L为整数)8.下列结构中不属于FIR滤波器基本结构的是( ③ )。
①.横截型②.级联型③.并联型④.频率抽样型9.已知某FIR滤波器单位抽样响应h(n)的长度为(M+1),则在下列不同特性的单位抽样响应中可以用来设计线性相位滤波器的是( ① )。
重叠相加法和重叠保留法的原理与实现
重叠相加法与重叠保存法的原理实现侯凯(吉林大学 通信工程学院 吉林 长春 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)卷积,然后再将这些卷积结果相加起来就可得到输出序列,这样,每一段的卷积都可用上面讨论的快速卷积来计算。
通过重叠相加法实现卷积
数字信号处理课程设计题目:通过重叠相加法实现卷积院系:自动化与信息工程学院专业:通信工程班级:通信092学号:3090432051姓名:侯鹏指导教师:吴鹏飞2012年6月23日-2012年6月30日设计任务通过重叠相加法实现卷积(C语言或MATLAB实现)。
计算一个给定序列与输入序列的卷积。
功能对给定的数据进行卷积计算,要求分算卷积由循环卷积实现要求设计有数据导入界面,各种参数可以由软件界面输入,其中给定序列可以由界面输入,对运算前后的数据绘制曲线。
设计步骤:1)初步完成总体设计,搭好框架,确定人机对话界面,确定函数功能,控制参数的输入方法;2)设计线性卷积的实现方案;3)编写两序列做循环卷积的程序;4)通过直接作线性卷积来检验最后结果;设计要求:1)用结构化设计方法。
一个程序划分成若干模块,每一个模块的函数功能要划分好,总体设计要画出流程图;2)输入输出界面要友好;3)源程序书写要规范,加必要的注释;4)要提供直接通过卷积进行检验的结果;5)程序一定要能运行起来。
课程设计的最后结果是提交一份实验报告,内容包括:1) 程序的设计思想,包括功能描述,函数接口的确定; 2) 流程图;3) 程序源代码(需打印); 4) 测试方法和结果; 5) 小结。
一、原理<一>设计思想:运用分段处理方法中的重叠相加法计算两个序列的卷积运算。
设一个给定序列是长度为n1的A,另一个导入序列是长度为n2的B,其中B 序列 是相对A 序列比较长的,所以可以把B 分为和A 一样长的若干段段,即B 分后每一小段长度为n1。
根据书上的公式:)()(*)()(*)()(*)()(0n y n x n A n B n A n B n A n y k k k k k k ∑∑∑∞-∞=∞=====可知将B 序列的每一小段与A 序列做现行卷积,然后将所有的n2/n1段的线性卷积结果相加起来就是整个B 序列和A 序列的线性卷积结果,而又在本设计中,B 序列的一小段和A 序列的线性卷积又可由循环卷积来实现,只要让循环卷积的点数121-+≥n n L ,循环卷积的结果就和线性卷积的结果等价,在本实验中取112-⨯=n L ,故A 序列和B 序列的线性卷积可认为是由A 序列和B 的每一小段做112-⨯=n L 点的循环卷积的最终累加和,另外还有两个个问题需要考虑,首先是做循环卷积时要对A 序列和B 序列的那一小段补零做卷积后,最终做累加的时候要考虑重叠的片段,必须将重叠的两段加起来。
guide设计——线性卷积的运算PPT课件
-_耿如月
2
重叠相加法——代码
❖ for k=0:a ❖ A=x(k*N+1:k*N+N); ❖ y1=fft(A,Lx+M-1); %利用fft进行运算 ❖ y2=fft(h,Lx+M-1); ❖ y3=y1.*y2; ❖ q=ifft(y3,Lx+M-1); ❖ Y(k*N+1:k*N+M-1)=q(1:M-1)+t(1:M-1); ❖ Y(k*N+M:k*N+N)=q(M:N); ❖ t(1:M-1)=q(N+1:N+M-1); ❖ end ❖ Y(1:Lx+M-1);
-_耿如月
8重叠保留法——调试-耿如月9GUIDE主要代码
❖ function do(hObject, eventdata, handles) ❖ Xn=[0 1 2 3 4 5 6 7 8 9 10]; ❖ Hn=[1 2 1 1 ]; ❖ axes(handles.axes1); ❖ hh_1=stem(Xn);grid; ❖ title('原序列') ❖ set(hh_1,'LineWidth',2); ❖ hold on ❖ hh_2=stem(Hn,'g');grid; ❖ set(hh_2,'LineWidth',2);
-_耿如月
13
GUIDE主要代码
❖ axes(handles.axes4); ❖ y_3=stem(y-y2_1);grid; ❖ title('重叠相加法误差') ❖ set(y_3,'LineWidth',2);
-_耿如月
14
GUIDE部分代码说明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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) x 1(n)进行N 点快速傅里叶变换得X1k (2) x 2(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.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 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 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 v2.5 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})gui_State.gui_Callback = 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 zchandles.output = hObject;% Update handles structureguidata(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 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} = handles.output;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 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')) ;% --- 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=str2num(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),长度足够长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;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);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 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(handles.ll,'string'));a=str2num(get(handles.aa,'string'));b=str2num(get(handles.bb,'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);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)。