线性卷积与循环卷积
一、 作品目的
通过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;
基于Matlab实现线性卷积等资料



