基于MATLAB离散卷积的实现和源代码
- 格式:docx
- 大小:212.89 KB
- 文档页数:6
数字信号处理实验报告实验一 离散时间序列卷积和MATLAB 实现(一)实验目的:学会用MATLAB 对信号与系统分析的方法,理解离散序列卷积和的计算对进行离散信号与系统分析的重要性。
(二)实验原理:1、离散时间序列f1(k)和f2(k)的卷积和定义:f(k)=f1(k)*f2(k)=∑∞-∞=-•i i k f i f )(2)(12、在离散信号与系统分析中有两个与卷积和相关的重要结论:a 、f(k)=∑∞-∞=-•i i k i f )()(δ=f(k)* δ(k)即离散序列可分解为一系列幅度由f(k)决定的单位序列δ(k)及其平移序列之积。
b 、对线性时不变系统,设其输入序列为f(k),单位响应为h(k),其零状态响应为y(k),则有:y(k)=∑∞-∞=-•i i k h i f )()(3、上机:conv.m 用来实现两个离散序列的线性卷积。
其调用格式是:y=conv(x,h)若x 的长度为N ,h 的长度为M ,则y 的长度L=N+M-1。
(三)实验内容1、题一:令x(n)= {}5,4,3,2,1,h(n)={}246326,,,,,,y(n)=x(n)*h(n),求y(n)。
要求用subplot 和stem 画出x(n),h(n),y(n)与n 的离散序列图形。
源程序: N=5; M=6;L=N+M-1; x=[1,2,3,4,5]; h=[6,2,3,6,4,2]; y=conv(x,h); nx=0:N-1; nh=0:M-1; ny=0:L-1;subplot(131); stem(nx,x,'*k'); xlabel('n'); ylabel('x(n)'); grid on ;subplot(132); stem(nh,h,'*k'); xlabel('n'); ylabel('h(n)'); grid on ;subplot(133); stem(ny,y,'*k'); xlabel('n'); ylabel('y(n)'); grid on ;实验结果:24nx (n)5nh (n )510ny (n )分析实验结果:根据实验结果分析可知,实验所得的数值跟x (n )与y (n )所卷积的结果相同。
(数字信号处理)实验报告实验名称 实验二 离散信号的卷积和 实验时间 年 月 日专业班级 学 号 姓 名 成 绩 教师评语: 一、实验目的1、掌握两个离散信号卷积和的计算方法和编程技术。
2、进一步熟悉用MATLAB 描绘二维图像的方法。
二、实验原理与计算方法两个离散序列x(n)与y(n)的卷积和f(n)定义为∑∞-∞=-=*=m m n y m x n y n x n f )()()()()(由于通常信号处理中所碰到的都是有始信号或有限时间信号,因此在实际计算卷积和时,求和是在有限范围内进行的。
计算过程中上下限的选取和所得结果的分布区间取决于参与卷积的两个序列,下面将分别进行讨论:1、两个从n = 0开始的序列和的卷积和)()()(n u n x n x =)()()(n u n y n y = (1)∑∑=∞-∞=-=--=nm m n u m n y m x m n u m n y m u m x n f 0)()]()([)()()()()(上式右边因子u(n)表示卷积和的结果也是一个从n = 0开始的序列。
2、从n =n1开始的序列和从n = n2开始的序列)()()(1n n u n x n x -=的卷积和,其中n1和n2为任意整数。
)()()(2n n u n y n y -= (2)∑∑-=∞-∞=---=----=21)()]()([)()()()()(2121n n n m m n nn u m n y m x n m n u m n y n m u m x n f 上式右边因子u(n-n1-n2)表示卷积和是一个从n = n1+n2开始的序列。
3、从n = n1开始的长度为N1的加窗序列和从n = n2开始的长)()()(1n w n x n x N =度为N2的加窗序列的卷积和,其中)()()(2n w n y n y N = ⎩⎨⎧-+≤≤=otherwise 0 11 )(1111N n n n n w N ⎩⎨⎧-+≤≤=otherwise 0 1 1 )(2222N n n n n w N则 ∑∞-∞=--=m N N m n w m n y m wm x n f )()()()()(21(3)所得卷积和也是一个加窗序列,从n = n1+ n2开始,长度为N1+ N2-1。
(一)实验目的:学会用MATLAB 对信号与系统分析的方法,理解离散序列卷积和的计算对进行离散信号与系统分析的重要性。
(二)实验原理:1、离散时间序列f1(k)和f2(k)的卷积和定义:f(k)=f1(k)*f2(k)=∑∞-∞=-•i i k f i f )(2)(12、在离散信号与系统分析中有两个与卷积和相关的重要结论:a 、f(k)=∑∞-∞=-•i i k i f )()(δ=f(k)* δ(k)即离散序列可分解为一系列幅度由f(k)决定的单位序列δ(k)及其平移序列之积。
b 、对线性时不变系统,设其输入序列为f(k),单位响应为h(k),其零状态响应为y(k),则有:y(k)=∑∞-∞=-•i i k h i f )()(3、上机:conv.m 用来实现两个离散序列的线性卷积。
其调用格式是:y=conv(x,h)若x 的长度为N ,h 的长度为M ,则y 的长度L=N+M-1。
(三)实验内容1、题一:令x(n)= {}5,4,3,2,1,h(n)={}246326,,,,,,y(n)=x(n)*h(n),求y(n)。
要求用subplot 和stem 画出x(n),h(n),y(n)与n 的离散序列图形。
源程序: N=5; M=6; L=N+M-1; x=[1,2,3,4,5];h=[6,2,3,6,4,2]; y=conv(x,h); nx=0:N-1; nh=0:M-1; ny=0:L-1;subplot(131); stem(nx,x,'*k'); xlabel('n'); ylabel('x(n)'); grid on ;subplot(132); stem(nh,h,'*k'); xlabel('n'); ylabel('h(n)'); grid on ;subplot(133); stem(ny,y,'*k'); xlabel('n'); ylabel('y(n)'); grid on ; 实验结果:nx (n)nh (n)ny (n )分析实验结果:根据实验结果分析可知,实验所得的数值跟x (n )与y (n )所卷积的结果相同。
matlab的conv的c源代码MATLAB的conv函数是非常常用的信号处理函数,它用于进行离散卷积运算。
在MATLAB中,conv函数的底层实现是使用C语言编写的,我们可以通过查看源代码来了解其具体实现细节。
以下是MATLAB的conv函数的部分C源代码:```c#include "mex.h"/* Gateway Function */void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){/* Check input and output arguments */if (nrhs != 2){mexErrMsgIdAndTxt("MATLAB:conv:invalidNumInputs","Two input arguments required.");}if (nlhs > 1){mexErrMsgIdAndTxt("MATLAB:conv:maxlhs","Too many output arguments.");}/* Get input data */double *input1 = mxGetPr(prhs[0]);double *input2 = mxGetPr(prhs[1]);mwSize len1 = mxGetNumberOfElements(prhs[0]);mwSize len2 = mxGetNumberOfElements(prhs[1]);/* Calculate output size */mwSize outlen = len1 + len2 - 1;/* Create output array */plhs[0] = mxCreateDoubleMatrix(1, outlen, mxREAL); double *output = mxGetPr(plhs[0]);/* Perform convolution */for (mwSize i = 0; i < outlen; i++){output[i] = 0;for (mwSize j = 0; j < len2; j++){if (i - j >= 0 && i - j < len1){output[i] += input1[i - j] * input2[j];}}}}```以上是MATLAB的conv函数的简化版本C源代码。
基于Matlab 的离散卷积刘国良(洛阳理工学院 河南洛阳 471000)摘 要:卷积运算广泛用于通讯、电子、自动化等领域的线性系统的仿真、分析及数字信号处理等方面。
在Matlab 中可以使用线性卷积、圆周卷积和快速傅里叶运算实现离散卷积。
线性卷积是工程应用的基础,但圆周卷积和快速傅里叶运算实现线性离散卷积具有速度快等优势,圆周卷积采用循环移位,在Matlab 中没有专用函数,需要根据圆周卷积的运算过程编制程序代码;快速傅里叶运算(FFT )是DSP 的核心算法,在序列比较长时FFT 是一种最合适的方法,运算速度快、程序简单,序列越长其优势越明显。
以同一个例子介绍了进行离散卷积仿真运算的两种方法与特点。
关键词:Matlab ;数字信号处理;离散卷积运算;快速傅里叶运算中图分类号:TP311 文献标识码:B 文章编号:10042373X (2009)052125202Discreted Convolution B ased on MatlabL IU Guoliang(L uoyang Institute of Science and Technology ,L uoyang ,471000,China )Abstract :The convolution operation is widely applied in the field of linear system simulations ,analysis and DSP design of communication ,electronics ,automatic system and so on ,linear convolution ,circular convolution and FFT for discreted convolu 2tion emulation operation can be adopted in Matlab.Linear convolution is the foundation of project application ,but circular con 2volution and FF T in linear convolution have advantages of fast speed.Circular convolution adopts circulating shift ,there is not privately function in Matlab ,it needs to draw up program code according to the operational course of circular convolution.FFT is the major operation of DSP ,when sequence grows fairly ,FF T is a kind of most suitable method ,it is more rapidly in opera 2tional speed and program simple ,the longer of the sequence the more of its advantage.With a same example ,to carry out characteristic and two kinds of method of emulation operation for discreted convolution are introduced.K eywords :Matlab ;DSP ;discreted convolution operation ;FF T收稿日期:20082072020 引 言在数字信号处理(DSP )系统中,无论在时域或频域都离不开卷积运算和快速傅里叶(FF T )运算。
主题:matlab中的离散化数字信号卷积计算一、matlab中的数字信号离散化在matlab中,数字信号的离散化是常见的数据处理操作。
离散化是指将连续信号以一定的时间间隔进行采样,转化为一系列离散的数据点。
在数字信号处理中,离散化是必不可少的一步,因为大部分实际信号都是连续的,需要经过离散化才能够被数字计算机进行处理。
离散化信号通常可以表示为一个数组或矩阵,每个元素代表特定时间点上的信号幅值。
在matlab中,可以使用数组、矩阵或table等数据结构来存储离散化信号数据。
二、matlab中的卷积计算卷积是数字信号处理中常用的一种操作,用于描述两个信号之间的交叉影响。
在matlab中,可以使用conv函数来进行数字信号的卷积计算。
该函数接受两个输入参数,分别表示两个待计算的信号,返回它们的卷积结果。
在进行数字信号的卷积计算时,需要注意信号的长度和边界处理。
matlab中的conv函数默认采用线性卷积,会在计算结果中自动填充零以匹配两个信号的长度。
若需要进行循环卷积或自定义边界处理,可以使用circconv或conv2等其他函数。
三、matlab中的卷积计算示例以下是一个使用matlab进行卷积计算的示例:```matlab生成输入信号x = [1, 2, 3];h = [0.1, 0.2, 0.1];计算卷积y = conv(x, h);```在这个示例中,我们定义了两个长度为3的输入信号x和h,然后使用conv函数计算它们的卷积结果y。
通过运行上述代码,可以得到卷积结果y=[0.1, 0.4, 0.8, 0.7, 0.3]。
四、matlab中的离散化数字信号卷积计算实践在实际应用中,离散化数字信号的卷积计算可以用于许多领域,如信号处理、图像处理、通信系统等。
以下是一个基于matlab的离散化数字信号卷积计算实践示例:```matlab生成两个离散化数字信号x = [1, 2, 3, 4];h = [0.1, 0.2, 0.1];计算卷积y = conv(x, h);```通过以上实践示例,我们可以看到,matlab提供了便捷的函数和工具,能够在离散化数字信号处理中进行有效的卷积计算。
离散序列卷积(matlab实现)————————————————————————————————作者:————————————————————————————————日期:数字信号处理实验报告实验一 离散时间序列卷积和MATLAB 实现(一)实验目的:学会用MATLAB 对信号与系统分析的方法,理解离散序列卷积和的计算对进行离散信号与系统分析的重要性。
(二)实验原理:1、离散时间序列f1(k)和f2(k)的卷积和定义:f(k)=f1(k)*f2(k)=∑∞-∞=-•i i k f i f )(2)(12、在离散信号与系统分析中有两个与卷积和相关的重要结论:a 、f(k)=∑∞-∞=-•i i k i f )()(δ=f(k)* δ(k)即离散序列可分解为一系列幅度由f(k)决定的单位序列δ(k)及其平移序列之积。
b 、对线性时不变系统,设其输入序列为f(k),单位响应为h(k),其零状态响应为y(k),则有:y(k)=∑∞-∞=-•i i k h i f )()(3、上机:conv.m 用来实现两个离散序列的线性卷积。
其调用格式是:y=conv(x,h)若x 的长度为N ,h 的长度为M ,则y 的长度L=N+M-1。
(三)实验内容1、题一:令x(n)= {}5,4,3,2,1,h(n)={}246326,,,,,,y(n)=x(n)*h(n),求y(n)。
要求用subplot 和stem 画出x(n),h(n),y(n)与n 的离散序列图形。
源程序: N=5; M=6;L=N+M-1; x=[1,2,3,4,5]; h=[6,2,3,6,4,2]; y=conv(x,h); nx=0:N-1; nh=0:M-1; ny=0:L-1;subplot(131); stem(nx,x,'*k'); xlabel('n'); ylabel('x(n)'); grid on ;subplot(132); stem(nh,h,'*k'); xlabel('n'); ylabel('h(n)'); grid on ;subplot(133); stem(ny,y,'*k'); xlabel('n'); ylabel('y(n)'); grid on ;实验结果:2400.511.522.533.544.55nx (n )5123456nh (n )510010203040506070ny (n )分析实验结果:根据实验结果分析可知,实验所得的数值跟x (n )与y (n )所卷积的结果相同。
matlab离散循环卷积离散循环卷积是信号处理和数字信号处理中的一个重要概念。
在MATLAB中,可以使用内置函数`cconv`来实现离散循环卷积。
这个函数的语法为:matlab.c = cconv(a, b, N)。
其中,`a`和`b`是长度为`N`的向量,表示输入的两个信号;`N`是信号的长度;`c`是长度为`N`的向量,表示输出的卷积结果。
在MATLAB中,离散循环卷积的计算可以使用`cconv`函数,也可以手动编写代码来实现。
一种常见的实现方式是使用循环来计算离散循环卷积的结果。
下面是一个简单的示例代码:matlab.function c = my_cconv(a, b, N)。
c = zeros(1, N);for n = 1:N.for k = 1:N.j = mod(n k, N) + 1;c(n) = c(n) + a(k) b(j);end.end.end.这段代码实现了离散循环卷积的计算过程,首先创建一个长度为`N`的全零向量`c`,然后使用双重循环遍历输入信号`a`和`b`,根据离散循环卷积的定义进行计算,并将结果保存在向量`c`中。
除了使用`cconv`函数和手动编写代码,还可以使用快速傅立叶变换(FFT)来计算离散循环卷积,这种方法通常比直接计算更高效。
MATLAB中提供了`fft`和`ifft`函数来进行快速傅立叶变换和逆变换,可以利用这些函数来实现离散循环卷积的计算。
总之,离散循环卷积在信号处理和数字信号处理中具有重要的应用,MATLAB提供了多种方式来实现离散循环卷积的计算,包括使用`cconv`函数、手动编写计算代码以及利用快速傅立叶变换。
根据具体的应用场景和需求,可以选择合适的方法来实现离散循环卷积。
离散卷积的算法分析及MATLAB实现(实例程序)摘自:张登奇,陈佳.离散卷积的算法分析及MATLAB实现[J].湖南理工学院学报(自然科学版). 2013(02)摘要:离散卷积是信号处理的基本运算,快速卷积和分段卷积是计算离散卷积的重要算法.文章以离散线性卷积的概念为基础,介绍了计算卷积的常用方法和运算流程,列举了MATLAB实现的程序.这些程序能动态演示卷积运算的全部过程,既可帮助理解卷积运算的原理流程,也可作为教学讲解的演示工具. 1、离散卷积常规算法的动态演示程序clear;clc;close all;format compact;xn=[5,4,3,2,1],M=length(xn),%输入任意序列并计算长度Mhn=[1,1,1],N=length(hn),%输入任意脉冲响应并计算长度Nm=[-(M-1):M+N-2],%设置代换变量的范围以便x(m)翻转和移位xm=[zeros(1,M-1),xn,zeros(1,N-1)],%补零以便与m对应绘图subplot(4,1,1);stem(m,xm,'r.'),%%绘输入序列x(m)ylabel('x(m)'), grid,title('(a) 输入序列x(m)'),%%加标签网格和标题hm=[zeros(1,M-1),hn,zeros(1,M-1)],%补零以便与m对应绘图subplot(4,1,2);stem(m,hm,'r.'),%%绘脉冲响应ylabel('h(m)'),grid,title('(b) 脉冲响应h(m)'),%%加标签网格和标题yn=zeros(1,2*M+N-2);%卷积输出初始化for n=0:M+N-2,%逐个计算卷积输出if n==0;xmfy=[fliplr(xn),zeros(1,M+N-2)],%实现翻转else for k=M:-1:1; xmfy(k+n)=xmfy(k+n-1);end ; xmfy(n)=0; xmfy,%实现翻转后移位并显示endsubplot(4,1,3);stem(m,xmfy,'b.'),%%绘制翻转移位序列ylabel('x(n-m)'), grid,title('(c) 翻转移位x(n-m)'),%%加标签网格和标题yn(M+n)=sum(xmfy.*hm);%计算第n位输出并与m位置对应subplot(4,1,4);stem(m,yn,'r.'),%%绘制卷积输出序列axis([min(m),max(m),min([0,conv(xn,hn)]),max([0,conv(xn,hn)])]),%%控制绘图坐标ylabel('y(n)'), grid,title('(d) 卷积输出y(n)'),%%加标签网格和标题pause,%每算完一位卷积输出后暂停,按任意键继续endyn, %显示线性卷积结果2、循环卷积运算过程的动态演示程序clc;close all;clear;format compact;xn=[5,4,3,2,1],M=length(xn),%输入任意序列并计算长度Mhn=[1,1,1],N=length(hn),%输入任意脉冲响应并计算长度NL=8,if L<max(M,N); L=max(M,N),end,%输入循环卷积的长度m=0:L-1,%设置代换变量并与两圆周上的编号对应xm=[xn,zeros(1,L-M)],%按圆周编号方向排列不足补零subplot(4,1,1);stem(m,xm,'r.'),%%绘输入序列x(m)ylabel('x(m)'),grid,title('(a) 输入序列x(m)'),%%加标签网格和标题hm=[hn,zeros(1,L-N)],%按圆周编号方向排列不足补零subplot(4,1,2);stem(m,hm,'r.'),%%绘脉冲响应h(m)ylabel('h(m)'),grid,title('(b) 脉冲响应h(m)'),%%加标签网格和标题ycn=zeros(1,L);%循环卷积输出初始化for n=0:L-1%逐个计算循环卷积xn_m=xm(mod(n-m,L)+1),%按圆周编号方向反排后正转n位subplot(4,1,3);stem(m,xn_m,'b.'),%%绘反排正转序列ylabel('x((n-m))L'),grid,title('(c) 反排正转x((n-m))L'),%%加标签网格和标题ycn(n+1)=sum(xn_m.*hm);%计算第n位循环卷积输出subplot(4,1,4);stem(m,ycn,'r.'),%%绘循环卷积输出序列axis([min(m),max(m),min([0,conv(xn,hn)]),max([0,conv(xn,hn)])]) %%控制绘图坐标ylabel('yc(n)'),grid,title('(d) 循环卷积yc(n)'),%%加标签网格和标题pause,%每算完一位循环卷积后暂停,按任意键继续endycn, %显示循环卷积结果3、快速算法计算线性卷积的程序clc;close all;clear;format compact;xn=[5,4,3,2,1], M=length(xn),%输入任意序列并计算长度Mhn=[1,1,1], N=length(hn),%输入任意脉冲响应并计算长度NL=2^nextpow2(M+N-1),%确定适合基2-FFT算法的长度xnL=[xn,zeros(1,L-M)], hnL=[hn,zeros(1,L-N)],%序列补零至L长Xk=fft(xnL); Hk=fft(hnL);%快速傅里叶变换Yk=Xk.*Hk; ycn=ifft(Yk),%对应相乘后求逆输出yn=conv(xn,hn),%与直接线性卷积结果对比4、重叠相加法进行线性卷积的动态演示程序clc;close all;clear;format compact;xn=[4,3,2,1,1,2,3,4,4,3,2,1,1,2],Lx=length(xn),%输入任意序列并计算长度Lxhn=[1,1,1,1],N=length(hn),%输入任意脉冲响应并计算长度NL=2^nextpow2(2*N),%确定适合基2-FFT算法的长度M=L-N+1,T=ceil(Lx/M),%计算每段的点数M及总段数Lxn=[xn,zeros(1,(T+1)*M-Lx)],%输入补零至最后缓存数据可以输出yn=zeros(1,(T+1)*M);%卷积输出变量初始化tn=zeros(1,N-1);%缓存变量初始化n=0:(T+1)*M-1,%序列号赋值nmin=min(n)-0.01;nmax=max(n)+0.01;%%确定绘图横坐标并保证能绘出首尾数据xnmin=min([0,xn]);xnmax=max([0,xn]);%%确定输入序列绘图纵坐标hnmin=min([0,hn]);hnmax=max([0,hn]);%%确定脉冲响应绘图纵坐标ynmin=min([0,conv(xn,hn)]);ynmax=max([0,conv(xn,hn)]); %%确定输出序列绘图纵坐标subplot(6,1,1);stem(n,xn,'r.'),%%绘输入序列x(n)axis([nmin,nmax,xnmin,xnmax]);%%控制绘图坐标ylabel('x(n)'),grid,title('(a) 输入序列x(n)'),%%加标签网格和标题subplot(6,1,2);stem(n,[hn,zeros(1,(T+1)*M-N)],'r.'),%%绘脉冲响应axis([nmin,nmax,hnmin,hnmax]);%%控制绘图坐标ylabel('h(n)'),grid,title('(b) 脉冲响应h(n)'),%%加标签网格和标题for i=0:T;disp('分段卷积段号:'),i, %依次分段处理并显示段号ix=i*M+1,%各段在MATLAB变量中的起始位置xi_seg=xn(ix:ix+M-1),%从输入序列中取出一段xin=zeros(1,(T+1)*M);%%为了只绘第i段输入序列先置零处理subplot(6,1,3);xin(ix:ix+M-1)=xn(ix:ix+M-1);stem(n,xin,'b.'), %% 绘第i段输入axis([nmin,nmax,xnmin,xnmax]);%%控制绘图坐标ylabel('xi(n)'),grid,title('(c)第i段输入xi(n)'),%%加标签网格和标题yi_seg=conv(xi_seg,hn),%分段卷积实际上是用快速算法且X(k)在循环前算出保存yin=zeros(1,(T+1)*M);%%为了只绘第i段输出序列先置零处理if i<T; yin(ix:ix+L-1)=yi_seg(1:L);else yin(ix:ix+M-1)=0;end,%%最后段输出特殊处理subplot(6,1,4);stem(n,yin,'b.'),%% 绘第i段输出axis([nmin,nmax,ynmin,ynmax]); %%控制绘图坐标ylabel('yi(n)'),grid,title('(d)第i段输出yi(n)'),%%加标签网格和标题tin=zeros(1,(T+1)*M);%%为了只绘前段缓存序列先置零处理subplot(6,1,5);tin(ix:ix+N-2)=tn(1:N-1);stem(n,tin,'b.'),%%绘前段缓存序列axis([nmin,nmax,ynmin,ynmax]); %%控制绘图坐标ylabel('t(n)'),grid,title('(e)前段缓存t(n)'),%%加标签网格和标题yi_seg(1:N-1)=yi_seg(1:N-1)+tn(1:N-1),%重叠相加运算yn(ix:ix+M-1)=yi_seg(1:M),tn(1:N-1)=yi_seg(M+1:L),%取前M个数据输出取后N-1个数据缓存subplot(6,1,6);stem(n,yn,'r.'),%%绘输出序列y(n)axis([nmin,nmax,ynmin,ynmax]); %%控制绘图坐标ylabel('y(n)'),grid,title('(f)卷积输出y(n)'),%%加标签网格和标题pause,%每算完一段后暂停,按任意键继续endyn=yn(1:Lx+N-1),conv(xn,hn),%取出线性卷积结果并与直算结果对比。
数字信号处理实验报告实验一 离散时间序列卷积和MATLAB 实现(一)实验目的:学会用MATLAB 对信号与系统分析的方法,理解离散序列卷积和的计算对进行离散信号与系统分析的重要性。
(二)实验原理:1、离散时间序列f1(k)和f2(k)的卷积和定义:f(k)=f1(k)*f2(k)=∑∞-∞=-•i i k f i f )(2)(12、在离散信号与系统分析中有两个与卷积和相关的重要结论:a 、f(k)=∑∞-∞=-•i i k i f )()(δ=f(k)* δ(k)即离散序列可分解为一系列幅度由f(k)决定的单位序列δ(k)及其平移序列之积。
b 、对线性时不变系统,设其输入序列为f(k),单位响应为h(k),其零状态响应为y(k),则有:y(k)=∑∞-∞=-•i i k h i f )()(3、上机:conv.m 用来实现两个离散序列的线性卷积。
其调用格式是:y=conv(x,h)若x 的长度为N ,h 的长度为M ,则y 的长度L=N+M-1。
(三)实验内容1、题一:令x(n)= {}5,4,3,2,1,h(n)={}246326,,,,,,y(n)=x(n)*h(n),求y(n)。
要求用subplot 和stem 画出x(n),h(n),y(n)与n 的离散序列图形。
源程序: N=5; M=6;L=N+M-1; x=[1,2,3,4,5]; h=[6,2,3,6,4,2]; y=conv(x,h); nx=0:N-1; nh=0:M-1; ny=0:L-1;subplot(131); stem(nx,x,'*k'); xlabel('n'); ylabel('x(n)'); grid on ;subplot(132); stem(nh,h,'*k'); xlabel('n'); ylabel('h(n)'); grid on ;subplot(133); stem(ny,y,'*k'); xlabel('n'); ylabel('y(n)'); grid on ;实验结果:24nx (n)5nh (n )510ny (n )分析实验结果:根据实验结果分析可知,实验所得的数值跟x (n )与y (n )所卷积的结果相同。