离散序列卷积(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 ; 实验结果:nx (n)nh (n)ny (n )分析实验结果:根据实验结果分析可知,实验所得的数值跟x (n )与y (n )所卷积的结果相同。
离散序列卷积(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 是一套功能强大的工程计算及数据处理软件,广泛应用于工业,电子,医疗和建筑等众多领域。
它是一种面向对象的,交互式程序设计语言,其结构完整又优良的可移植性。
它在矩阵运算,数字信号处理方面有强大的功能。
另外,MATLAB 提供了方便的绘图功能,便于用户直观地输出处理结果。
本课程实验要求学生运用MATLAB 编程完成一些数字信号处理的基本功能,加深对教学内容的理解。
课程试验1——用MATLAB 实现序列卷积运算一、实验目的• 加深对常用离散信号的理解• 熟悉并验证离散时间信号用数字序列表示的方法及序列的线性卷积运算。
二、实验内容1、(1)单位抽样序列⎩⎨⎧=01)(n δ 00≠=n n 在MATLAB 中可以利用zeros()函数实现。
;1)1();,1(==x N zeros x 如果)(n δ在时间轴上延迟了k 个单位,得到)(k n -δ即:⎩⎨⎧=-01)(k n δ 0≠=n k n(2)正弦序列)/2sin()(ϕπ+=Fs fn A n x在MATLAB 中)/***2sin(*1:0fai Fs n f pi A x N n +=-= 2、用MATLAB 计算序列x 1[k]={-2,0,1,–1,3;k=-1,0,1,2,3}和序列x 2[k]={1, 2, 0,-1;k=-2,-1,0,1}的线性卷积。
三、实验要求1、用MATLAB 独立编程并给出运行结果2、试验报告的书写格式(1)试验目的(2)试验内容(3)程序清单(4)运行结果(5)总结(试验结果分析、心得与体会等)。
如何通过Matlab进行卷积与卷积运算
如何通过Matlab进行卷积与卷积运算使用Matlab 进行卷积与卷积运算引言:卷积与卷积运算在信号处理、图像处理、机器学习等领域中起着至关重要的作用。
Matlab作为一款强大的数学工具,提供了丰富的函数和工具箱,能够便捷地进行卷积与卷积运算。
本文将介绍如何使用Matlab进行卷积与卷积运算,并通过实例说明其应用。
一、卷积的基本概念卷积是一种数学运算,常用于信号处理中。
它将两个函数进行混合,输出一个新的函数。
在离散卷积中,输入的两个函数通常是序列或矩阵。
卷积的定义如下:[f * g](n) = ∑[f(k) * g(n-k)] (k=-∞ to ∞)其中,f * g 表示卷积运算,f 表示输入函数,g 表示卷积核函数,n 表示输出函数的索引。
二、Matlab中的卷积函数在Matlab中,可以使用conv函数来进行一维离散卷积的计算。
conv函数的语法如下:y = conv(x,h)其中,x 表示输入函数,h 表示卷积核函数,y 表示输出函数。
在使用conv函数时,需要注意输入函数和卷积核函数的维度匹配,以及输入函数和卷积核函数的长度关系。
在长度不一致的情况下,可以使用padarray函数进行填充。
三、卷积运算的应用举例为了更好地理解卷积与卷积运算的应用,下面将通过几个实例进行详细讲解。
实例一:图像模糊图像模糊是一种常见的图像处理技术,可以用于去除图像中的噪声和细节。
在Matlab中,可以通过卷积运算实现图像模糊。
首先,需要构建一个卷积核函数,例如:h = ones(5, 5) / 25;此处构建了一个5x5的全1卷积核函数,并将其除以25,以实现平均模糊。
然后,使用conv函数对输入图像进行卷积运算:blurred_image = conv(input_image, h);实例二:音频信号滤波在音频处理中,常常需要对音频信号进行滤波以去除噪声或者强调特定频率。
卷积运算可以实现各种滤波器的设计和应用。
matlab离散循环卷积
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实现(实例程序)摘自:张登奇,陈佳.离散卷积的算法分析及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)=∑∞-∞=-•iikfif)(2)(12、在离散信号与系统分析中有两个与卷积和相关的重要结论:a、f(k)= ∑∞-∞=-•iikif)()(δ=f(k)* δ(k)即离散序列可分解为一系列幅度由f(k)决定的单位序列δ(k)及其平移序列之积。
b、对线性时不变系统,设其输入序列为f(k),单位响应为h(k),其零状态响应为y(k),则有:y(k)= ∑∞-∞=-•iikhif)()(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编程作业
一、离散卷积MATLAB编程作业(1)请编程实现一维卷积功能,即自己编写MATLAB中的CONV函数,自己写出一个CONV_NEW函数。
要求,请自己学习MATLAB向量运算操作,基于学习到的内容,用尽量少的代码实现CONV_NEW。
(a)请用例子检查你写的CONV_NEW是否与CONV的输出是否一致。
(b)请用两个10000维数组检测对比你写的CONV_NEW和CONV的时间复杂度。
请查资料大致回答,为什么MATLAB自带的CONV更快一些?(2)请查询自学二维卷积的知识(a)请写一个函数CONV2_NEW实现MATLAB中的二维卷积函数CONV2功能,请用例子检查你写的CONV2_NEW与CONV2的输出是否一致(b)请用此函数,做以下两个卷积核与附件图片lenna.jpg的卷积,将卷积结果打印出来。
并想一下为什么是这样。
(请查阅imread和imwrite函数)两点提示:由于imread和imwrite函数读入和写出的数值范围都是0到255,因此需要将结果归一化。
请参考一下函数程序读入写出例程。
A = imread(‘lenna.jpg’);B = double(A);Imwrite(uint8(B),’test.bmp’);(3)请编写MATLAB程序H = DECONV(X, Y)要求输入序列X和Y,输出序列H,使Y=X*H,若没有H满足要求,则输出错误信息”No sequence satisfies this condition.”二、傅里叶变换编程题对于卷积公式:x(t)*h(t) = y(t),则根据傅里叶变换和卷积性质,在已知x(t)和y(t)的情况下,h(t)可以写成:ℎ(t)=12π∫Y(jω)X(jω)e jωt dω+∞−∞(1)若x(t)和y(t)分别是如下函数,求h(t)。
(2)请用MATLAB画出h(t)在t=[-50,50]的函数图像。
(提示:用分成小段求矩形面积的形式近似求积分,注意规避分母等于0时候的情况)。
用matlab计算序列卷积和并绘图
(一)实验目的:学会用MATLAB对信号与系统分析的方法,理解离散序列卷积和的计算对进行离散信号与系统分析的重要性。
(二)实验原理:1、离散时间序列f1(k)和f2(k)的卷积和定义:f(k)=f1(k)*f2(k)=∑∞-∞=-•iikfif)(2)(12、在离散信号与系统分析中有两个与卷积和相关的重要结论:a、f(k)= ∑∞-∞=-•iikif)()(δ=f(k)* δ(k)即离散序列可分解为一系列幅度由f(k)决定的单位序列δ(k)及其平移序列之积。
b、对线性时不变系统,设其输入序列为f(k),单位响应为h(k),其零状态响应为y(k),则有:y(k)= ∑∞-∞=-•iikhif)()(3、上机:用来实现两个离散序列的线性卷积。
其调用格式是: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 ;实验结果:分析实验结果:根据实验结果分析可知,实验所得的数值跟x (n )与y (n )所卷积的结果相同。
matlab实验-卷积
ห้องสมุดไป่ตู้
2.构造与f1(kΔt)和f2(kΔt)相对应的时间向 量k1和k2(注意,此时时间序号向量k1和k2 的元素不再是整数,而是取样时间间隔Δt 的整数倍的时间间隔点); 3.调用conv( )函数计算卷积积分f(t)的近似 向量f(nΔt); 4.构造f(nΔt)对应的时间向量k。
f=conv(f1,f2); %计算需要序列f1与 f2的卷积和f f=f*p; %将f进行采样 k0=k1(1)+k2(1); %计算序列f非零样 值的起点位置 k3=length(f1)+length(f2)-2; %计算卷积和f 的非零样值的宽度 k=k0:p:k3*p; %确定卷积和f非零 样值的时间向量
subplot(3,1,1) stem(k1,f1) 域波形图 title('f1(k)') xlabel('k') ylabel('f1(k)')
%在子图1绘序列f1(k)时
subplot(3,1,2) stem(k2,f2) 时波形图 title('f2(k)') xlabel('k') ylabel('f2(k)')
%在子图1绘f1(t)时域
%在子图2绘f2(t)时域
subplot(2,2,3) plot(k,f) %画卷积f(t)的时域波形 title('f(t)=f1(t)*f2(t)') xlabel('t') ylabel('f(t)')
卷积运算matlab
卷积运算matlab一、什么是卷积运算在数字信号处理和图像处理领域,卷积运算是一种常用的数学运算方法,它可以通过两个函数产生一个新的函数。
在信号处理中,卷积运算常用于信号滤波、图像边缘检测等领域。
而在图像处理中,卷积运算可以实现图像的模糊、锐化和特征提取等功能。
二、卷积运算的原理卷积运算的原理可以用以下公式表示:$$(f*g)(t)=\in t_{-\i nf ty}^{\in ft y}f(\t au)g(t-\ta u)d\ta u$$其中,$f(t)$和$g(t)$表示两个函数,$*$表示卷积运算符,$(f*g)(t)$表示卷积运算的结果。
在离散情况下,卷积运算可以用以下公式表示:$$(f*g)[n]=\su m_{m=-\i nf ty}^{\in fty}f[m]g[n-m]$$其中,$f[n]$和$g[n]$表示两个离散序列,$[n]$表示序列的下标,$*$表示卷积运算符,$[m]$表示离散序列的下标。
三、在MATL AB中进行卷积运算M A TL AB中提供了方便快捷的函数用于进行卷积运算。
具体步骤如下:1.准备输入序列首先,我们需要准备两个输入序列,分别表示$f[n]$和$g[n]$。
f=[1,2,3,4,5];g=[1,1,1];2.执行卷积运算接下来,使用MA TL AB的`c on v`函数执行卷积运算。
r e su lt=c on v(f,g);3.查看结果最后,我们可以通过打印`r es ul t`来查看卷积运算的结果。
d i sp(r es ul t);四、实际应用案例卷积运算在实际应用中具有广泛的应用性。
下面以图像处理中的边缘检测为例说明卷积运算的应用。
1.准备图像首先,我们需要准备一张待处理的图像。
i m ag e=im re ad('ima g e.jp g');2.定义边缘检测算子接下来,我们需要定义一个边缘检测算子,例如S ob el算子。
s o be l=[1,0,-1;2,0,-2;1,0,-1];3.执行卷积运算然后,使用M AT LA B的`co nv2`函数执行卷积运算。
实验2离散序列的卷积和系统差分方程的MATLAB实现示
信息工程学院实验报告课程名称:数字信号处理实验项目名称:实验2 离散序列的卷积和系统差分方程的MATLAB 实现示 实验时间: 班级: 姓名: 学号:一、实 验 目 的:熟悉序列的卷积运算及其MATLAB 实现;熟悉离散序列的傅里叶变换理论及其MATLAB 实现;加深对离散系统的差分方程和系统频率响应的理解。
二、实 验 设 备 与 器 件MATLAB 2008软件三、实 验 原 理3.1离散序列卷积运算的MATLAB 实现两序列的线性卷积定义为:()*()()()k x n y n x k y n k ∞=-∞=-∑MATLAB 提供了一个内部函数conv(x,h)来计算两个有限长序列之间的卷积。
3.2离散系统差分方程的MATLAB 求解方法对于时域离散系统,可用差分方程描述或研究输入、输出之间的关系。
对于线性时不变系统,经常用的是线性常系数差分方程。
一个N 阶线性常系数差分方程用下式表示:()()N Miii i b y n i a x n i ==-=-∑∑当0,1,2,,i b i N ==时,[]h n 是有限长度的,称系统为FIR 系统;反之,称系统为IIR 系统。
在MATLAB 中,可以用函数filter(a,b,x)求解差分方程,其中参数a,b 分别系统函数的分子和分母多项式的系数。
四、实 验 内 容 与 结 果 分 析4.1已知1(){1,1,1,1,1}x n =,2(){1,1,1,1,1,1,1}x n =,计算12()()*()y n x n x n =。
指令语句如下:N=5;M=7;L=N+M-1;x1=[1,1,1,1,1]; nx1 =0:N-1; x2=[1,1,1,1,1,1,1]; nx2=0:M-1; y=conv(x1,x2); ny=0:L-1;subplot(1,3,1);stem(nx1,nx1,'.');xlabel('n');ylabel('x1(n)');grid on;subplot(1,3,2);stem(nx2,nx2,'.');xlabel('n');ylabel('x2(n)');grid on; subplot(1,3,3);stem(ny,y,'.');xlabel('n');ylabel('y(n)');grid on;执行结果如图4-1所示:图4-14.2 求系统:()0.5((1)(2)(3)(4))y n x n x n x n x n =-+-+-+-的单位冲激响应和阶跃响应。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字信号处理实验报告
实验一 离散时间序列卷积和MATLAB 实现
(一)实验目的:学会用MATLAB 对信号与系统分析的方法,理解离散序列卷积和的计算对进行离散信号与系统分析的重要性。
(二)实验原理:
1、离散时间序列f1(k)和f2(k)的卷积和定义:
f(k)=f1(k)*f2(k)=
∑∞
-∞
=-•
i i k f i f )(2)(1
2、在离散信号与系统分析中有两个与卷积和相关的重要结论:
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 ;
实验结果:
24
n
x (n
)
5
n
h (n )
5
10
n
y (n )
分析实验结果:
根据实验结果分析可知,实验所得的数值跟x (n )与y (n )所卷积的结果相同。
2、题二:已知序列
f1(k)=⎩⎨⎧≤≤其它0201k f2(k)=⎪⎪⎩⎪
⎪⎨
⎧===其它
33
2211k k k
调用conv()函数求上述两序列的卷积和 源程序: clc; k1=3; k2=3;
k=k1+k2-1; f1=[1,1,1]; f2=[0,1,2,3]; f=conv(f1,f2); nf1=0:k1-1; nf2=0:k2; nf=0:k;
subplot(131); stem(nf1,f1,'*r'); xlabel('n'); ylabel('f1(n)'); grid on ;
ylabel('f2(n)'); grid on ;
subplot(133); stem(nf,f,'*g'); xlabel('n'); ylabel('f(n)'); grid on ;
实验结果:
12
n
f 1(n )
n
f 2(n
)
n
f (n )
分析实验结果:
根据实验结果分析可知,实验所得的数值跟f1(n )与f2(n )所卷积的结果相同。
3、题三:编写计算两离散序列卷积和f(k)=f1(k)*f2(k)的实用函数dconv().要求该程序在计算出卷积和f(k)的同时,还绘出序列f1(k),f2(k)和f(k)的时域波形图。
function[f,k]=dconv(f1,f2,k1,k2)
%f1(k),f2(k)及f(k)的对应序号向量分别为k1,k2和k 。
源程序:
function [f,k]=dconv(f1,f2,k1,k2); f=conv(f1,f2); k(1)=k1(1)+k2(1);
k(length(f))=k1(length(f1))+k2(length(f2)); k=k(1):k(length(f));
subplot(131); stem(k1,f1,'*r'); xlabel('k1'); ylabel('f1(k1)'); grid on ;
ylabel('f2(k2)'); grid on ;
subplot(133); stem(k,f,'*g'); xlabel('k'); ylabel('f(k)'); grid on ;
该程序编写了一个可以在计算出卷积和f(k)的同时,还绘出序列f1(k),f2(k)和f(k)的时域波形图的函数。
4、题四:试用MATLAB 计算如下所示序列f1(k)与f2(k)的卷积和f(k),绘出它们的时域波形,并说明序列f1(k)与f2(k)的时域宽度与序列f(k)的时域宽度的关系。
提示:可用上述dconv()的函数来解决。
f1(k)=⎪⎪⎩⎪
⎪⎨⎧==-=其它0
110211
k k k
f2(k)=⎩⎨
⎧≤≤-其它
221k
源程序: clc;
f1=[1,2,1]; f2=[1,1,1,1,1];
k1=-1:length(f1)+k1(1)-1; k2=-2:length(f2)+k2(1)-1; dconv(f1,f2,k1,k2); 实验结果:
-1
01
k1
f 1(k 1)
-2
02
k2
f 2(k 2)
-5
5
00.51
1.52
2.5
3
3.54k
f (k )
分析实验结果:
根据实验结果分析可知,实验所得的数值跟f1(n )与f2(n )所卷积的结果相
同。
直接调用已经编好的函数,得到卷积结果及图形。
5、题五:已知某LTI 离散系统,其单位响应h(k)=e(k)-e(k-4),求该系统在激励为f(k)=e(k)-e(k-3)时的零状态响应,并绘出其时域波形图。
提示:可用dconv()的函数来解决。
源程序: clc;
f1=[1,1,1,1]; f2=[1,1,1];
k1=0:length(f1)+k1(1)-1; k2=0:length(f2)+k2(1)-1; dconv(f1,f2,k1,k2);
实验结果:
k1
f 1(k 1)
k2
f 2(k 2
)
k
f (k )
分析实验结果:
根据实验结果分析可知,实验所得的数值跟f1(n )与f2(n )所卷积的结果相同。
直接调用已经编好的函数,得到卷积结果及图形。
系统的零状态响应就是激励信号与该系统的单位响应的卷积。
(四)心得体会:通过Matlab 的仿真,形象地得出了离散序列相卷积的结果,而对卷积函数conv (x ,y )的使用可以编写函数,然后方便地调用函数得到一些特有的功能。