线性卷积运算课程设计

合集下载

实验五 卷积算法

实验五 卷积算法

实验五卷积算法一.实验目的1.掌握卷积算法的原理和计算方法2.,熟悉卷积算法特性3.学习卷积算法的程序实现二.实验设备PC 兼容机一台,操作系统为Windows2000(或Windows98,WindowsXP,以下默认为Windows2000),安装Code Composer Studio 3.1 软件。

三.实验原理1.卷积的基本原理和公式:卷积和:对离散系统“卷积和”也是求线性时不变系统输出响应(零状态响应)的主要方法。

卷积和的运算在图形表示上可分为四步:①翻褶先在亚变量坐标M 上作出x(m)和h(m),将m=0 的垂直轴转为轴翻褶成h(-m)。

②移位将h(-m)移位n,即得h(n-m)。

当n为正整数时,右移n位。

当n 为负整数时,左移n位。

③相乘再将h(n-m)和x(m)的相同m 值的对应点值相乘。

④相加把以上所有对应点的乘积叠加起来,即得y(n)值。

依上法,取n=…,-2,-1,0,1,2,3,…各值,即可得全部y(n)值。

2.源程序及注释:* 程序的自编函数及其功能:①processing1(int *input2, int *output2):调用形式:processing1(int *input2, int *output2)参数解释:intput2、output2 为两个整型指针数组。

返回值解释:返回了一个“TRUE ”,让主函数的while 循环保持连续。

功能说明:对输入的input2 buffer 波形进行截取m 点,再以零点的Y 轴为对称轴进行翻褶,把生成的波形上的各点的值存入以OUTPUT2 指针开始的一段地址空间中。

②processing2(int *output2, int *output3):调用形式:processing2(int *output2, int *output3)参数解释:output2、output3 为两个整型指针数组。

返回值解释:返回了一个“TRUE”,让主函数的while 循环保持连续。

实验四 线性卷积实验

实验四  线性卷积实验

实验四线性卷积实验[实验目的]1.熟悉并验证卷积的性质2.利用卷积生成新的波形,建立波形间的联系3.验证卷积定理[实验原理]信号的卷积是针对时域信号处理的一种分析方法。

信号的卷积一般用于求取信号通过某系统后的响应。

在信号与系统中,我们通常求取某系统的单位冲激响应,所求得的h(k)可作为系统的时域表征。

任意系统的系统响应可用卷积的方法求得:hky*=kx(k))()(两个序列的线性卷积可经过下列步骤:①将x(n)和h(n)用x(m)和h(m)表示,并将h(m)进行翻转,形成h(-m);②②将h(-m)移位n,得到h(n-m)。

当n>0时,序列右移;n<0时,序列左移;③③将x(m)和h(n-m)相同m的序列值对应相乘后④求和,将以上所有对应点的乘积累加起来,可得到卷积结果y(n)。

[实验内容]1.MATLAB提供了一个内部函数conv来计算两个有限长序列的卷积。

conv函数假定两个序列都从n=0开始。

给出序列x=[3,11,7,0,-1,4,2];h=[2,3,0,-5,2,1];求两者的卷积y 。

解:>> x=[3,11,7,0,-1,4,2]x = 3 11 7 0 -1 4 2>> h=[2,3,0,-5,2,1]h = 2 3 0 -5 2 1>> y=conv(x,h)y = 6 31 47 6 -51 -5 41 18 -22 -3 8 22.将函数conv稍加扩展为函数conv_m,它可以对任意基底的序列求卷积。

格式如下:function [y,ny]=conv_m(x1,x2)% 信号处理的改进卷积程序% [y,ny]=conv_m(x1,x2)% [y,ny]=卷积结果% [x,nx1]=第一个信号% [h,nx2]=第二个信号解:function [y,ny]=conv_m(x1,x2)x1=input('x1=');x2=input('x2=');N1=length(x1);M=length(x2);L=N1+M-1;ny=0:L-1for(n=1:L)y(n)=0;for(m=1:M)k=n-m+1;if(k>=1&k<=N1)y(n)=y(n)+x2(m)*x1(k);endendendyy1=conv(x1,x2);nx1=0:N1-1;nx2=0:M-1;subplot(221);stem(nx1,x1,'.k');ylabel('x1(n)');xlabel('n');grid on;title('x1');subplot(222);stem(nx2,x2,'.k');ylabel('x2(n)');xlabel('n');grid on;title('x2');subplot(223);stem(ny,y,'.k');ylabel('y(n)');xlabel('n');grid on;title('y');subplot(224);stem(y1);ylabel('y1');xlabel('n');grid on;title('y1');246x 1(n )n x1x 2(n )n x251015y (n )ny051015-100-50050y 1ny1根据线性卷积分析,参考程序流程为3.对下面三个序列,用conv_m 函数,验证卷积特性(交换律、结合律、分配 律、同一律))()()()(1221n x n x n x n x *=* 交换律 )]()([)()()]()([321321n x n x n x n x n x n x **=** 结合律 )()()()()]()([)(3121321n x n x n x n x n x n x n x *+*=+* 分配律 )()()(0101n n x n n n x -=-*δ 同一律 其中:x 1(n)=n[u(n+10)-u(n-20)] x 2(n)=)1.0cos(n π [u(n)-u(n-30)] x 3(n)=(1.2)n [u(n+5)-u(n-10)]x 1(n )n x1x 2(n )n x2204060y (n )ny204060y 1ny1。

《数字信号处理》课程设计报告-卷积运算及算法实现

《数字信号处理》课程设计报告-卷积运算及算法实现

《数字信号处理》课程设计报告卷积运算及算法实现专业:通信工程班级:通信08-2BF组次:第10组姓名:学号:卷积运算及算法实现一、 设计目的卷积运算是一种有别于其他运算的新型运算,是信号处理中一种常用的工具。

随着信号与系统理论的研究的深入及计算机技术发展,卷积运算被广泛地运用到现代地震勘测,超声诊断,光学诊断,光学成像,系统辨识及其他诸多新处理领域中。

了解并灵活运卷积运算用去解决问题,提高理论知识水平和动手能力,才是学习卷积运算的真正目的。

通过这次课程设计,一方面加强对《数字信号处理》这门课程的理解和应用,另一方面体会到学校开这些大学课程的意义。

二、设计任务探寻一种运算量更少,算法步骤更简单的算法来实现卷积运算,文中主要通过阶梯函数卷积计算方法和斜体函数卷积计算方法对比来得出最终结论。

三、设计原理1,什么是卷积?卷积是数字信号处理中经常用到的运算。

其基本的表达式为:()()()∑=-=nm m n x m h n y 0换而言之,假设两个信号f 1(t)和f 2(t),两者做卷积运算定义为 f(t)d做一变量代换不难得出: f(t)d =f 1(t)*f 2(t)=f 2(t)*f 1(t)在教材上,我们知道用图解法很容易理解卷积运算的过程,在此不在赘述。

2,什么是阶梯函数所谓阶梯函数,即是可以用阶梯函数u(t) 和u(t-1)的线性组合来表示的函数,可以看做是一些矩形脉冲的集合,图1-1给除了两个阶梯函数的例子。

1—1其中f(t)=2u(t)+u(t-1)-2u(t-2)-u(t-3),h(t)= 2u(t)-u(t-1)+2u(t-2)-3u(t-3).以图1—1中两个阶梯函数为例介绍本文提出的阶梯函数卷积算法。

根据卷积的性质(又称为杜阿美尔积分),上述f(t)与h(t)的卷积等于f(t)的导数与h(t)的积分的卷积,即:f(t)*h(t)=*由于f(t)为阶梯函数,因此其导数也为冲击函数及其延时的线性组合,如图1—2(a)所示。

利用傅立叶变换计算线性卷积

利用傅立叶变换计算线性卷积

实验一 利用傅立叶变换计算线性卷积一、实验目的1. 掌握MATLAB 的使用。

2. 掌握用直接法计算线性卷积的原理和方法3. 掌握利用FFT 及IFFT 计算线性卷积的原理和方法二、实验原理及方法1、线性卷积的定义序列)1N n 0(),n (x -≤≤和序列)1M n 0(),n (h -≤≤的线性卷积y(n)=x(n)*h(n)定义为:10),()()(10-+≤≤-⨯=∑-=M N n m n h m x n y N m 利用直接法计算线性卷积即用线性卷积的定义计算。

2、利用FFT 及IFFT 计算线性卷积的原理和方法如果将序列x(n)和h(n) 补零,使其成为长度为L 的序列(L>=N+M-1), 则x(n)与h(n)的线性卷积y(n)=x(n)*h(n)与L 点圆周卷积相等,而圆周卷积可采用FFT 及IFFT 完成,即求y(n)=x(n)*h(n)可转化为:对上式两端取FFT 得: Y(k)=X(k)H(k)其中:X(k)=FFT[x(n)], H(k)=FFT[h(n)]则:y(n)=IFFT[Y(k)]三、实验仪器及材料⒈ 计算机,并装有MATLAB 程序⒉ 打印机四、实验步骤1、已知两序列: ⎩⎨⎧>≤≤=3n ;03n 0;)5/3()n (h n 用Matlab 随机生成输入信号X (n ),范围为0~2;2、得出用直接法(定义)计算线性卷积y(n)=x(n)*h(n)的结果;3、用Matlab 编制利用FFT 和IFFT (圆周卷积)计算线性卷积y(n)=x(n)*h(n)的程序; 分别令圆周卷积的点数为L=5,7,8,10,打印结果。

4、对比直接法和圆周卷积法所得的结果。

五、实验说明:1、实验前复习线性卷积,圆周卷积及FFT 内容。

2、利用FFT 计算线性卷积是将x(n)、h(n)用补零的方法延长到N+M-1,再用圆周卷积完成,因此要求x(n)、h(n)延长后的长度满足L>=N+M-1,才能保证用圆周卷积计算结果与直接法计算结果相同。

有限长序列线性卷积矢量乘法算法程序设计

有限长序列线性卷积矢量乘法算法程序设计

毕业设计(论文)题目有限长序列线性卷积矢量乘法算法程序设计学生姓名杨长兴学号1110064080所在院(系) 物理与电信工程学院专业班级电子信息科学与技术1103班指导教师龙姝明完成地点博远楼A1109,C1207有限长序列线性卷积矢量乘法算法程序设计杨长兴(陕西理工学院物电学院电子信息科学与技术1103班,陕西汉中723000)指导老师:龙姝明[摘要] 有限长序列线性卷积现有矩阵乘法、FFT方法、ListConvolve函数方法、卷积定义法等计算方法。

ListConvolve函数方法高效快捷,但我们无从知道它是如何完成计算的。

FFT方法对于两个长序列的卷积计算效率很高,但对短序列来说,反倒繁琐。

矩阵乘法算法对两个短序列的卷积计算简单明了,但长序列的卷积计算,在一般计算机上因内存的限制根本无法计算。

为此我们提出了卷积的矢量乘法算法,算法简洁,程序实现方便,计算速度很快,与其它方法相比,仅次于ListConvolve函数法和FFT方法。

[关键字] 有限长序列;线性卷积;矢量乘法Vector multiplication algorithm programming of finite length sequence linear convolutionYang Changxing(Grade11,Class3,Major Electronic Information Science and TechnologyDepartment of Physics,Shannxi University of Technology,Hanzhong,723001,shannxi)Tutor: Long ShumingAbstract Finite length sequence linear convolution matrix multiplication, FFT method, existing ListConvolve function method,the convolution calculation methods,such as definition method.ListConvolve function method is high, but we don't know if it is how to perform the calculation. FFT method for two long sequence of convolution computation efficiency is very high,but for short sequences,but cumbersome.Matrix multiplication algorithm on the two short sequence of convolution calculation simple and clear,but a long sequence of convolution computation, because of the memory limit on general computer cannot calculate. For this,we put forward the convolution vector multiplication algorithm,algorithm is concise,program implementation is convenient,fast calculation,compared with other methods,second only to ListConvolve function method and the FFT method.Keywords finite length sequence ,linear convolution,vector multiplication目录1序列卷积的意义 (1)1.1 离散序列卷积的意义 (1)1.2 卷积的用途 (1)1.3 卷积的程序实现 (1)1.4 课题研究工具 (1)2序列卷积常用算法及程序实现 (1)2.1 定义法 (2)2.2 矩阵乘法 (2)2.3 ListConvolve算法 (3)2.4 FFT算法 (4)3 卷积矢量乘法算法的程序设计 (4)4 各种时域卷积算法的优缺点以及适用对象 (5)5 卷积算法程序应用实例 (6)5.1 设计滤波器 (6)5.2 滤波实例 (6)结语 (8)附录 (9)在很多人眼中,卷积这个概念是比较神秘且不容易理解的。

有限长序列线性卷积课程设计

有限长序列线性卷积课程设计

有限长序列线性卷积计算方法物电学院电信082班顾志龙1.有限长序列线性卷积原理1.1序列卷积的定义设给定两个有限长序列x[k]、y[k];则x[k]*y[k]=∑-mmkymx][][为两个序列的线性卷积。

例:给定两个序列x[k_]=(1/2)k y[k_]=(-1/5)k求它们的卷积。

解:z[k_]=x[k_]* y[k_]=10/7((1/2)k+1-(-1/5)k+1)ε[k];用mathematica软解求解,程序如下:Clear[x,y,k];(*clear[变量名x,y,z]*)ε[k_]=UnitStep[k];(*单位阶跃函数*)x[k_]=(1/2)kε[k];y[k_]=(-1/5)kε[k];p1=Table[{k,x[k]},{k,0,50,1}];(*在直角坐标系中画出p1的散点图,要求图形为蓝色;显示所有值的平面曲线图形;显示图形高度与宽度之比为1/4*)p2=Table[{k,y[k]},{k,0,50,1}];ListPlot[p1,Filling {1 {Axis,Blue}},PlotRange All,AspectRatio 1/4]ListPlot[p2,Filling {1 {Axis,Blue}},PlotRange All,AspectRatio 1/4]运算结果如下:1.2圆周卷积圆周卷积的定义要求:两个序列一样长;假设两个序列可以作周期延拓而形成周期序列。

例:线性卷积解答:例:已知两个序列x={7,2,3,2,1}、y={1,-2,3,-4,5,2,1};求它们的卷积用mathematica软解求解:程序如下Clear[x,y,z];(*clear[变量名x,y,z]*)x={7,2,3,2,1};L1=5;y={1,-2,3,-4,5,2,1};L2=7;L=L1+L2-1;z={7,2,3,2,1}.{{1,-2,3,-4,5,2,1,0,0,0,0},{0,1,-2,3,-4,5,2,1,0,0,0},{0,0,1,-2,3,-4,5,2,1,0,0},{0,0,0,1,-2, 3,-4,5,2,1,0},{0,0,0,0,1,-2,3,-4,5,2,1}}第一种计算方法:ListConvolve[x,y,{1,-1},0](*直接计算出x,y的卷积*)运行结果如下:Out[87]= {7,-12,20,-26,33,16,21,14,12,4,1}第二种计算方法:ListPlot[PadRight[x,L1+L2-1],Filling Axis,AspectRatio 1/5](*在直角左边系中画出长度为L1+L2-1的x的散点图,要求覆盖坐标系并且图形高度与宽度比为1/5*)ListPlot[PadRight[y,L1+L2-1],Filling Axis,AspectRatio 1/5]ListPlot[z,Filling Axis,AspectRatio 1/5]运行结果如下:Out[5]= {7,-12,20,-26,33,16,21,14,12,4,1}结论:由圆周卷积的定义可知:序列的L是一样长的,且这个长度是由人为规定的;圆周卷积的第二个序列每一行的长度由L决定,它的行数与第一个序列的元素相等。

实验二 利用DFT计算线性卷积

实验二  利用DFT计算线性卷积

实验二 利用DFT 计算线性卷积一、实验目的1.掌握利用FFT 计算线性卷积的原理及具体实现方法。

2.加深理解重叠相加法和重叠保留法。

3.考察利用FFT 计算线性卷积各种方法的适用范围。

二、实验设备与环境计算机、MATLAB 软件环境三、实验基础理论1、线性卷积与圆周卷积设)(n x 为L 点序列,)(n h 为M 点序列,)(n x 和)(n h 的线性卷积为:∑∞-∞=-==m m n h m x n h n x n y )()()(*)()()(n y 的长度为:L+M-1,)(n x 和)(n h 的N 点圆周卷积为:)())(()()(10n R m n h m x n y N N m N -=∑-= 其中:1-+≥L M N此时圆周卷积等于线性卷积,而圆周卷积可利用FFT 计算。

2、快速卷积利用FFT 计算线性卷积步骤如下:(1)为了使线性卷积可以利用圆周卷积来计算,必须选择;同时为了能使用基2-FFT 完成卷积运算,要求γ2=N 。

采用补零的办法是)(n x 和)(n h 的长度均为N 。

(2)计算)(n x 和)(n h 的N 点FFT)()()()(k H n h k X n x FFTFFT →→(3)组成卷积 )()()(k H k X k Y =(4)利用IFFT 计算IDFT ,得到线性卷积y(n)(k)()IFFT Y y n −−−→3、分段卷积我们考察单位取样响应为)(n h 的线性系统,输入为)(n x ,输出为)(n y ,则)(*)()(n h n x n y =当输入序列时再开始进行卷积,会使输出相对输入有较大的延时,再者如果序列太长,需要大量的存储单元。

为此,我们把,分别求出每段的卷积,合在一起其到最后的总输出。

这种方法称为分段卷积。

分段卷积可细分为重叠相加法和重叠保留法。

重叠保留法:设)(n x 的长度为X N ,)(n h 的长度为M 。

我们把序列)(n x 分成多段N 点序列)(n x i ,每段与前一段重叠M-1个样本。

“数字信号处理”课程中“线性卷积”的微课设计

“数字信号处理”课程中“线性卷积”的微课设计
楚 到 底 是 如 何 实
现乘法累加计 算的。因此 ,笔者制作了

视频是微课 的关键 内容 ,目前微课
的视频 呈现形式 有摄 制型微课 、录屏型
关键词 :微课 ;线性卷积 ;教 学 微课是指按照新课程标准及教学实 践要 求 ,以视频 为主要呈现方式 ,反映
难 点 ,还能进行前置 } 生预 习,改变 了单

的由任课老师讲授的模式 ,提高 了学
看似 简单 , 实 则包 含序列的翻转 、 移位 、 相乘 和相 加 ,其运算过程比较复杂 。在 教学时采用图形解析 、f l a s h动画演 示以
生对 该课 程的学习兴趣 ,同时也 为各位
教师同仁提供了互相切磋学 习、相得 益

要 :微课作 为新的 网络学 习资源形
1 . 选 取知 识点
晰明确 ,沿着教学主题逐 步深 入 ,抓住 关键 ;对 公式 计 算 以动 画 方 式加 以 演
示 ,促 进学生对公式理解记忆 ;微课 的
式,在 国 内外迅速发 展起 来 ,微课 的理
论 、设 计也成为 网络学 习、移动学 习研 究的热 点。笔者在参加微课 培训 后 , 原 创 了微 课 “ 线性卷积”。该微课主题突 出,循序 渐进 ,设计合理 ,浅 显易懂 ,
陈文波 ( 1 9 8 3 一 ),男 ,湖 南衡 阳人 , 硕士 ,南华大学 电气工程学 院通信工程
要点 , 以图形和动画 的形式演示 出来 , 完 [ 2 ] 孟祥 增 ,刘瑞 梅 ,王广 新 。 微 课设 计 与制作 的理论 与实践 [ J ] . 远程教 育杂志 ,2 0 1 4( 0 6 ):2 4 —3 1 .
全 国 高校 教 师 网络培 训 计划 “ 微 课 的 设 计 、开发 与 应用 骨 干教 师 高级 研修 班” 后, 以“ 数字信号处理”课程 中 “ 线

实验四----线性卷积与圆周卷积的计算

实验四----线性卷积与圆周卷积的计算

实验三线性卷积与圆周卷积的计算一、 实验目的1、掌握计算机的使用方法和常用系统软件与应用软件的使用。

2、通过编程,上机调试程序,进一步增强使用计算机解决问题的能力。

3、掌握线性卷积与循环卷积软件实现的方法,并验证二者之间的关系。

二、实验原理1、线性卷积:线性时不变系统(Linear Time-Invariant System, or L. T. I 系统)输入、输出间的关系为:当系统输入序列为)(n x ,系统的单位脉冲响应为)(n h ,输出序列为)(n y ,则系统输出为:∑∞-∞==-=m n h n x m n h m x n y )(*)()()()(或∑+∞-∞==-=m n x n h m n x m h n y )(*)()()()(上式称为离散卷积或线性卷积。

图1.1示出线性时不变系统的输入、输出关系。

)(n δ→ L. T. I —→)(n h —→—→图1.1 线性时不变系统的输入、输出关系2、圆周卷积设两个有限长序列)(1n x 和)(2n x ,均为N 点长)(1n x )(1k X )(2n x )(2k X如果)()()(213k X k X k X ⋅=)(n x 0L. T. I∑+∞-∞=-=m m n h m x n y )()()(D F T D F T则)()(~)(~)(10213n R m n x m x n x N N m ⎥⎦⎤⎢⎣⎡-=∑-=[]∑---=1021)()(N m N m n x m x)(1n x =N 10)(2-≤≤N n n x上式称为圆周卷积。

注:)(~1n x 为)(1n x 序列的周期化序列;)()(~1n R n x N 为)(~1n x 的主值序列。

上机编程计算时,)(3n x 可表示如下:∑∑-+==-++-=11210213)()()()()(N n m nm m n N xm x m n x m x n x3、两个有限长序列的线性卷积序列)(1n x 为L 点长,序列)(2n x 为P 点长,)(3n x 为这两个序列的线性卷积,则)(3n x 为∑+∞-∞=-=m m n xm x n x )()()(213且线性卷积)(3n x 的最大长1-+P L ,也就是说当1-≤n 和1-+≥P L n 时0)(3=n x 。

线性卷积与圆周卷积的计算(杭电)

线性卷积与圆周卷积的计算(杭电)

信号、系统与信号处理实验Ⅱ实验报告实验名称:线性卷积与圆周卷积的计算一、实验目的1、通过编程,上机调试程序,进一步增强使用计算机解决问题的能力。

2、掌握线性卷积与圆周卷积软件实现的方法,并验证两者之间的关系。

二、实验内容与要求已知两个有限长序列:x(n)= δ(n)+2δ(n-1)+3δ(n-2)+4δ(n-3)+5δ(n-4);h(n)= δ(n)+2δ(n-1)+δ(n-2)+2δ(n-3)1.编制一个计算两个线性卷积的通用程序,计算x(n)*h(n)。

2.编制一个计算圆周卷积的通用程序,计算上述4种情况下两个序列x(n)与h(n)的圆周卷积。

3.上机调试并打印或记录实验结果。

4.将实验结果与预先笔算的结果比较,验证真确性。

三、实验程序与结果1、计算两个线性卷积的通用程序,计算x(n)*h(n)。

xn=[1 2 3 4 5]hn=[1 2 1 2]N=length(xn);M=length(hn);L=N+M-1;for(n=1:L)y(n)=0;for(m=1:M)k=n-m+1;if(k>=1&k<=N)y(n)=y(n)+hn(m)*xn(k);endendendy=conv(xn,hn);ny=0:L-1;stem(ny,y) ;xlabel('n ');ylabel('y(n) ');figurestem(ny,yn) ;xlabel('n ');ylabel('y ');根据定义编写循环实现线性卷积结果:01234567n y (n )Conv 函数实现线性卷积结果:01234567n y2. 计算圆周卷积的通用程序,计算上述4种情况下两个序列x(n)与h(n)的圆周卷积。

主程序:clear allN=[5 6 9 10];xn=[1 2 3 4 5];hn=[1 2 1 2];yc1=circonv(xn,hn,N(1))yc2=circonv(xn,hn,N(2))yc3=circonv(xn,hn,N(3))yc4=circonv(xn,hn,N(4))figurestem(0:N(1)-1,yc1);xlabel('时间序号n');ylabel('信号幅度');title('5点圆周卷积');figurestem(0:N(2)-1,yc2);xlabel('时间序号n');ylabel('信号幅度');title('6点圆周卷积');figurestem(0:N(3)-1,yc3);xlabel('时间序号n');ylabel('信号幅度');title('9点圆周卷积');figurestem(0:N(4)-1,yc4);xlabel('时间序号n');ylabel('信号幅度');title('10点圆周卷积');定义函数:function yc=circonv(x1,x2,N)if length(x1)>Nerror('N必须大于等于x1的长度'); endif length(x2)>Nerror('N必须大于等于x2的长度'); endx1=[x1,zeros(1,N-length(x1))];x2=[x2,zeros(1,N-length(x2))];n=[0:N-1];x2=x2(mod(-n,N)+1);H=zeros(N,N);for n=1:1:NH(n,:)=cirshiftd(x2,n-1,N);yc=x1*H';function y=cirshiftd(x,m,N)if length(x)>Nerror('x 的长度必须小于N');endx=[x,zeros(1,N-length(x))];n=[0:1:N-1];y=x(mod(n-m,N)+1);时间序号n 信号幅度5点圆周卷积00.51 1.52 2.533.54 4.55时间序号n 信号幅度时间序号n 信号幅度时间序号n 信号幅度四、仿真结果分析编写的线性卷积程序和conv 函数的结果相同,也与笔算结果相同。

信号处理课程设计报告.

信号处理课程设计报告.

信号处理课程设计设计说明书设计项目:线性卷积与圆周卷积演示程序的设计项目完成人:姓名:王威龙学号:20132185 专业班级: 13级电子信息工程一班指导教师:刘淑玉,赵亚凤,王建卫,李超提交日期: 2016.1.8机电工程学院电子信息工程1.设计基本原理1.1课题研究的背景卷积运算广泛的应用于通讯、电子、自动化等领域的线性系统的仿真、分析及数字信号处理等方面。

在MATLAB中可以使用线性卷积和圆周卷积实现离散卷积。

线性卷积是工程应用的基础,但圆周卷积实现线性离散卷积具有速度快等优势。

圆周卷积采用循环移位,在MATLAB中没有专用函数,需要根据圆周卷积的运算过程编制程序代码。

本实验主要围绕线性卷积和圆周卷积的演示程序设计来展开,给出了线性卷积和圆周卷积演示的程序及动态实现。

在线性时不变连续系统中,利用系统的冲激响应和叠加原理来求系统对任意激励信号作用时的零状态响应,这就是卷积方法的原理。

因此,在时域内,卷积运算是求解线性非时变系统零状态响应的重要方法,特别是激励信号为时限信号时尤其如此。

卷积运算的计算比较复杂,是信号与系统分析中的重点和难点,特别适合用于计算机来计算。

以往的卷积积分多用fortran、c、VB等语言编程,不仅编程繁琐,而且可视性差。

用MATLAB来计算卷积积分问题要比用C、FORTRAN 等语言完成相同的事情简洁的多。

在MATLAB 中,有很多现成的函数可以直接调用,而且在计算机方面,可以直接用相应的计算机符号即可。

在编写程序语言方面,它与其他语言相比更为简单。

正因为上述原因,使他深受工程技术人员及科学专家的欢迎,并很快成为应用学科计算机辅助分析、设计、仿真、教学等领域不仅可缺少的基础软件。

1.2课题研究意义本课程为电子信息工程专业的独立实践课,是建立在信号与系统、数字信号处理等课程的基础上,加强实践环节而开设的。

其目的在于通过本课程设计使学生进一步巩固数字信号处理的基本概念、理论、分析方法和实现方法;使学生能有效地将理论和实际紧密结合;增强学生软件编程实现能力和解决实际问题的能力。

用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)为最终计算结果。

线性卷积与圆周卷积演示程序的设计

线性卷积与圆周卷积演示程序的设计

1.设计基本原理1.1课题研究的背景卷积运算广泛的应用于通讯、电子、自动化等领域的线性系统的仿真、分析及数字信号处理等方面。

在MATLAB中可以使用线性卷积和圆周卷积实现离散卷积。

线性卷积是工程应用的基础,但圆周卷积实现线性离散卷积具有速度快等优势。

圆周卷积采用循环移位,在MATLAB中没有专用函数,需要根据圆周卷积的运算过程编制程序代码。

本实验主要围绕线性卷积和圆周卷积的演示程序设计来展开,给出了线性卷积和圆周卷积演示的程序及动态实现。

在线性时不变连续系统中,利用系统的冲激响应和叠加原理来求系统对任意激励信号作用时的零状态响应,这就是卷积方法的原理。

因此,在时域内,卷积运算是求解线性非时变系统零状态响应的重要方法,特别是激励信号为时限信号时尤其如此。

卷积运算的计算比较复杂,是信号与系统分析中的重点和难点,特别适合用于计算机来计算。

以往的卷积积分多用fortran、c、VB等语言编程,不仅编程繁琐,而且可视性差。

用MATLAB来计算卷积积分问题要比用C、FORTRAN 等语言完成相同的事情简洁的多。

在MATLAB中,有很多现成的函数可以直接调用,而且在计算机方面,可以直接用相应的计算机符号即可。

在编写程序语言方面,它与其他语言相比更为简单。

正因为上述原因,使他深受工程技术人员及科学专家的欢迎,并很快成为应用学科计算机辅助分析、设计、仿真、教学等领域不仅可缺少的基础软件。

1.2课题研究意义本课程为电子信息工程专业的独立实践课,是建立在信号与系统、数字信号处理等课程的基础上,加强实践环节而开设的。

其目的在于通过本课程设计使学生进一步巩固数字信号处理的基本概念、理论、分析方法和实现方法;使学生能有效地将理论和实际紧密结合;增强学生软件编程实现能力和解决实际问题的能力。

通过课程设计,主要达到以下的目的:(1)使学生增进对MATLAB的认识,加深对信号处理理论的理解。

(2)使学生掌握数字信号处理中频谱分析的概念和方法。

guide设计——线性卷积的运算PPT课件

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、掌握线性卷积与循环卷积软件实现的方法,并验证二者之间的关系。

二、实验原理1、线性卷积线性时不变系统(Linear Time-Invariant System, or L. T. I 系统)输入、输出间的关系为:当系统输入序列为)(n x ,系统的单位脉冲响应为)(n h ,输出序列为)(n y ,则系统输出为:∑∞-∞==-=m n h n x m n h m x n y )(*)()()()(或∑+∞-∞==-=m n x n h m n x m h n y )(*)()()()(上式称为离散卷积或线性卷积。

图6.1示出线性时不变系统的输入、输出关系。

)(n δ→ L. T. I —→)(n h —→ —→图6.1 线性时不变系统的输入、输出关系2、循环卷积设两个有限长序列)(1n x 和)(2n x ,均为N 点长)(1n x )(1k X )(2n x )(2k X 如果)()()(213k X k X k X ⋅=则 )()(~)(~)(10213n R m n x m x n x N N m ⎥⎦⎤⎢⎣⎡-=∑-=[]∑---=1021)()(N m N m n x m x)(1n x =N 10)(2-≤≤N n n x上式称为循环卷积或圆周卷积)(n x L. T. I h(n)∑+∞-∞=-=m m n h m x n y )()()(D F T D F T注:)(~1n x 为)(1n x 序列的周期化序列;)()(~1n R n x N 为)(~1n x 的主值序列。

上机编程计算时,)(3n x 可表示如下:∑∑-+==-++-=11210213)()()()()(N n m nm m n N xm x m n x m x n x3、两个有限长序列的线性卷积序列)(1n x 为L 点长,序列)(2n x 为P 点长,)(3n x 为这两个序列的线性卷积,则)(3n x 为∑+∞-∞=-=m m n xm x n x )()()(213且线性卷积)(3n x 的最大长1-+P L ,也就是说当1-≤n 和1-+≥P L n 时0)(3=n x 。

实验3 利用FFT算线性卷积

实验3 利用FFT算线性卷积

实验 3 利用 FFT 算线性卷积
假设要计算序列 x(n)=u(n)-u(n-L),0nL 和 h(n)=cos(0.2n),0nM 的线 性卷积,完成以下实验内容。 1. 设 L=M,根据线性卷积的表达式和快速卷积的原理,分别编程实现 计 算 两 个 序 列 线 性 卷 积 的 方 法 , 比 较 当 序 列 长 度 分 别 为 8,16,32 , 64,256,512,1024 时,两种方法计算线性卷积所需时间。
北京理工大学5系数字信号处理实验报告实验3利用fft算线性卷积假设要算序列xnununl0nl和hncos02n0nm设lm根据线性卷积的表达式和快速卷积的原理分别编程实现计算两个序列线性卷积的方法比较当序列长度分别为81632642565121024时两种方法计算线性卷积所需时间
北京理工大学 5 系数字信号处理实验报告
北京理工大学 5 系数字信号处理实验报告
for ii=2:N/L %重叠相加 yn1(ii,1:(M-1))=yn1(ii-1,(L+1):e nd)+yn1(ii,1:(M-1)); end %截取前1~L个有效值 yn(:,:)=yn1(:,1:L); %重新组成输出序列 yn=reshape(yn',1,N); toc
代码:
clear;clc; vector=[8 16 32 64 256 512 1024]; for ii=1:size(vector,2) L=vector(ii); M=L; n=1:L; N=L+M-1; xn=heaviside(n)-heaviside(n-L); hn=cos(0.2*pi*n); %计算直接线性卷积的时间 tic yn1=conv(xn,hn); disp('%%%%%%%%%%%%%%%%%%% %%%%') end toc %计算快速卷积的时间 tic xw=fft(xn,N); hw=fft(hn,N); yw=xw.*hw; yn2=ifft(yw,N); toc

实验一 有限长序列的线性卷积的计算

实验一  有限长序列的线性卷积的计算

实验一 有限长序列的线性卷积的计算一、实验目的1、掌握Matlab 中离散时间信号的生成及表示方法;1、掌握有限长序列线性卷积的编程计算原理,并能利用C 语言或Matlab 编写算法程序进行实现;2、学会线性卷积函数的使用方法,并能利用其计算有限长序列的线性卷积。

二、实验内容及步骤1、复习有限长序列线性卷积的算法原理,并掌握其编程实现方法。

2、用Matlab 生成两个有限长序列()()x n y n 、,其中:15()(sin 0.4)(1)x n n R n =⋅+, 20()(0.9)(1)n y n R n =+分别显示序列()()x n y n 、的图形。

3、编写有限长序列线性卷积算法程序计算()x n 与()y n 的卷积,结果令为1()c n ,即1()()*()c n x n y n =,绘制1()c n 的图形。

(注:有限长序列线性卷积算法原理参看教材12—13面)。

4、利用matlab 的conv 函数计算()x n 与()y n 的卷积,结果令为2()c n 即2()()*()c n x n y n =,绘制2()c n 的图形。

5、将1()2()c n c n 、绘制在一幅图上,将步骤2、3、4所得到的结果进行对比分析,并检验算法程序的正确性。

6、写出程序核心部分的注释。

三、实验基本原理与方法若序列)(n x 和序列)(n h 均是有限长序列,其中)(n x 的有限区间为[1N ,1M ],)(n h 的有限区间为[2N ,2M ],两者之间的卷积)(n y 可按如下的方法进行计算: 第一步:确定)(n y 的有限区间为[21N N +,21M M +],这一步的工作是为了决定)(n y 中的哪些序列值要计算,因为区间外的序列值都是0,无须计算。

第二步:把)(n x 和)(n h 的有限区间都变为0开始。

第三步:利用∑-=-=110)()()(N M k k n h k x n y 计算序列值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

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

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

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

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

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

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

0 N-1 N 2N-1 2N
图1. 重叠相加法的分段示意图
2)重叠保留法
重叠保留法相当于将x l (n)和h(n)作循环卷积,然后找出循环卷积中相当于线性卷积的部分。

在这种情况下,将序列y(n)分为长为N 的若干段(如图3所示),每个输入段和前一段有M-1个重叠点 。

此时只需要将发生重叠的前M-1个点舍去,保留重叠的部分并输出,则可获得序列y(n),算法如图4所示。

L 点循环卷积
M -1点缓存
L=N+M-1
h(n)
前N 点 后M-1点
y(n)
图2. 重叠相加法算法示意图
0 N-1 N 2N-1 2N
图3. 重叠保留法的分段示意图
序列衔接
M -1点缓存
每N 点输入
h(n)
y(n)
图4. 重叠保留法算法示意图
后M-1点
M+N-1点
循环卷积
后N 点
二、流程图设计
1、重叠相加法
2、重叠保留法
三、MATLAB源代码
1、重叠相加源码
2、重叠保留源码
四、实验结果与分析
对两种算法采用同一序列进行测试分析。

设x(n)=(n+1),0≤n≤9;ℎ(n)={−2,0,+2}。

计算y(n)=x(n)∗h(n)。

①调用conv()计算
首先利用Matlab对两序列直接运算,得出正确结果。

代码为:x=[1:1:10],h=[-2,0,+2],conv(x,h)
结果为:[ -2 -4 -4 -4 -4 -4 -4 -4 -4 -4 18 20 ]
②测试重叠相加算法
代码为:overlap_add(x,h,6)
结果为:[ -2.0000 -4.0000 -4.0000 -4.0000 -4.0000 -4.0000 -4.0000 -4.0000 -4.0000 -4.0000 18.0000 20.0000 ]
③测试重叠保留算法
代码为:overlap_save(x,h,4)
结果为:[ -2.0000 -4.0000 -4.0000 -4.0000 -4.0000 -4.0000 -4.0000 -4.0000 -4.0000 -4.0000 18.0000 20.0000 ]
由此可见,两种算法运行正常,计算正确。

更多的测试也正确。

算法正确。

五、讨论与总结
1、算法效率分析:
A.重叠相加法
由上表和图1可以看出,随着数据规模增大,运算耗时呈线性增长,因而算法的时间复杂度为O(n),其中n为数据规模。

因而重叠相加算法具有可行性和实用性。

再从算法的空间复杂度来看,由于分配的缓存空间只由分段长度确定,不随数据规模的变化而变化,因而空间复杂度为O(1)。

综合考察,重叠相加法具有较好的时间和空间复杂度。

当数据量达到千万量级时,运算延时最少大约为2.328s,可运用于对信号的实时处理。

B.重叠保留法
由上表和图2可以看出,同重叠相加法类似,随着数据规模的增大,运算耗时呈线性增长,算法的时间复杂度为O(n),其中n为数据规模。

同样由于分配的缓存空间只由分段长度确定,空间复杂度为O(1)。

综合考察,重叠保留法也具有较好的时间和空间复杂度。

当数据量达到千万量级时,运算延时最少大约为2.335s,可运用于对信号的实时处理。

C.调用conv()
由上表和图3可以看出,调用系统自带的线性卷积运算函数conv()计算线性卷积,运算时间和序列长度也有线性关系。

时间复杂度为O(n)。

但此时的信号处理延时很小,当数据达到千万量级时,延时仅为0.325s,实时性非常好!
D.综合对比分析
重叠保留法和重叠相加法运行效率与分段长度相关性较强。

分段数和卷积运算的序列长度为非线性关系,且当分段长度维持在大约1000点左右时,获得最高的平均运行效率。

内置函数conv()运行效率与分段数无关。

重叠相加和重叠保留两者效率几乎一致。

在实际应用中,重叠保留和重叠相加主要用于实施信号处理,因而输入序列是连续输入,在保证实时性的要求下,输入序列的分段不能太长。

设想实际情况如下:设语音信号采样率为8KHz,相当于每秒输入8000点序列,由重叠相加法处理(重叠保留法类似)。

如若分段为1000点,考虑实际系统中为实时输出(Matlab算法模拟里面是将所有序列保存之后再输出),因而每分段处理延时0.00406/8s,又接收1000点延时为1/8s,故处理总延时为0.1255075s。

此时接收延时起主要作用,影响实时性。

减小接收延时则需要减小分段点数,同时使得处理延时增加。

接收延时和处理延时两者是不可调和的矛盾。

实际处理时,可根据实时性要求,折中选择分段点数,既满足实时性要求,又降低系统开销。

2、故障和问题分析
①分段问题
初始时没有考虑到分段长度的限制,导致用户输入分段小于系统冲击响应h(n)的长度时运算出错。

后增加一个判断语句,当出现前述情况时,自动提升分段点数,问题解决。

②运算完整性问题
在写好代码之后的测试中,出现了一个十分奇怪的现象,即:当输入点数为1000、10000或者更大时卷积运算最后M-1个结果为0。

反复测试发现,不仅1000和10000,只要是分段数N的倍数的输入点数都存在同样问题,而其他非倍数的输入,运算与conv() 函数运算结果完全一致。

通过设置断点,逐句调试,最终发现问题的症结,当输入序列为N的倍数时,最后的一段卷积实际上没有做。

因而将循环次数增加1,将最后一次保留的M-1个点补全N个0,做最后一次分段卷积。

修改后,测试结果正确。

③算法硬件实现
第一,重叠保留和重叠相加算法在硬件实现时将算法中的临时变量都化为缓存,所以考虑缓存的大小限制,不能将输入序列分段过长,否则所需的缓存将加大,成本加大。

第二,接收延时和处理延时两者存在矛盾,减少分段长度,可减少接收延时但会增加处理延时,同理,增大分段长度,可减少处理延时,但将增加接收延时。

具体实现时需要综合考虑两者的作用,去最优化值。

第三,算法实际实现时,可实时输出处理过的分段序列,与直接线性卷积相比,实时性大大增强,需要的计算单元特别是系统缓存明显减少。

因而实用性很强。

第四,分段卷积能灵活计算长输入序列对IIR滤波器的响应,且延时较小,因而很常用。

从硬件实现角度讲,重叠保留和重叠相加法效率几乎一致。

第五,测试算法性能时采用较短的h(n)序列,主要考虑到分段卷积应用在单位冲击响应较短的IIR滤波器。

相关文档
最新文档