基于Matlab实现线性卷积等

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

线性卷积与循环卷积

一、作品目的

通过matlab的强大功能展示线性卷积和循环卷积过程中方方面面的计算和变化,让大家对这两种卷积有一个更加完美的认识。

二、概念简介

卷积是一种典型的乘累加运算。

1.线性卷积

线性卷积是对线性移不变(LSI)系统的输入输出关系的描述,体现系统的特性。

线性卷积的表达式为

一般情况,现实的系统为因果系统,有k<0时,恒有h(k)=0,则

若x(n)是一个N点序列,h(n)是一个m点序列,则卷积的结果y(n)将是L=N+M-1点的序列。

2.循环卷积

设x1(n) 和x2(n) 是两个长度为L、M的有限长序列,它们的N 点循环卷积x3(n) 定义为:

注意:其中N>=Max{L,M}如果其中一个序列(或者两个序列)的长度没有所求N点循环卷积的长度长,那在该序列后面补零,直到长度达到N。

三、设计思路及程序

1. 线性卷积:

(1)以输入序列x(n)=[5,4,3,2,1],脉冲响应h(n)=[1,1,1,1]为列进行演示。

(2)计算输入序列和脉冲响应的长度。

(3)画出补零后的输入序列和脉冲响应

(4)设计一个循环,在循环中实现反转、位移和计算。并画出反转后的图像变化和卷积图像,将每一次移位结果保存为fig图。(5)最后将上一步所生成的所有fig图合起来生成一张gif图

程序展示:

clear;

clc;

close all;

(1)(2)

xn=[5,4,3,2,1];

M=length(xn);%输入任意序列并计算长度M

hn=[1,1,1,1];

N=length(hn);%输入任意脉冲响应并计算长度N

m=[-(M-1):M+N-2];%设置代换变量的范围以便x(m)翻转和移位(3)

xm=[zeros(1,M-1),xn,zeros(1,N-1)];%补零以便与m对应绘图

subplot(2,2,1);stem(m,xm,'r.');%%绘输入序列x(m) ylabel('x(m)'); grid on;

title('(a)输入序列x(m)');

hm=[zeros(1,M-1),hn,zeros(1,M-1)];%补零以便与m对应绘图

subplot(2,2,2);stem(m,hm,'r.');%绘脉冲响应

ylabel('h(m)'),grid,title('(b)脉冲响应h(m)');%%加标签网格和标题

yn=zeros(1,2*M+N-2);%卷积输出初始化

(4)

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;%实现翻转后移位并显示

end

subplot(2,2,3);stem(m,xmfy,'b.');%%绘制翻转移位序列ylabel('x(n-m)'), grid,title('(c)x(n-m)');%%加标签网格和标题

yn(M+n)=sum(xmfy.*hm);%计算第n位输出并与m位置对应subplot(2,2,4);stem(m,yn,'r.');%%绘制卷积输出序列axis([min(m),max(m),min([0,conv(xn,hn)]),max([0,c onv(xn,hn)])]);%%控制绘图坐标

ylabel('y(n)');

grid on;title('(d)卷积输出y(n)');%%加标签网格和标题pause(.5);

drawnow,

picname=[num2str(n) '.fig'];%保存的文件名:如i=1时,picname=1.fig

hold on % 写后面的字时,不把前面的字冲掉

saveas(gcf,picname)

end

yn;

stepall=M+N-2;

(5)

for i=1:stepall

picname=[num2str(i) '.fig'];

open(picname)

set(gcf,'outerposition',get(0,'screensize'));% matlab窗口最大化

frame=getframe(gcf);

im=frame2im(frame);%制作gif文件,图像必须是index索引图像

[I,map]=rgb2ind(im,20);

if i==1

imwrite(I,map,'xianxingjuanji.gif','gif', 'Loopcount',inf,'DelayTime',0.5);

elseif i==stepall

imwrite(I,map,'xianxingjuanji.gif','gif','WriteMo de','append','DelayTime',0.5);

else

imwrite(I,map,'xianxingjuanji.gif','gif','WriteMo

de','append','DelayTime',0.5); end;

close all

end

实验结果展示:

2. 循环卷积

(1)以输入序列x(n)=[5,4,3,2,1],脉冲响应h(n)=[1,1,1,1]为列进行演示。

(2)计算输入序列和脉冲响应的长度。

(3)画出补零后的输入序列和脉冲响应

(4)设计一个循环,在循环中实现反转、循环、位移和计算。并画出循环反转后的图像变化和卷积图像

程序展示:

clc;

close all;

clear;

相关文档
最新文档