离散卷积的算法分析及MATLAB实现(实例程序)
摘自:张登奇,陈佳.离散卷积的算法分析及MATLAB实现[J].湖南理工学院学报(自然科学版). 2013(02)
摘要:离散卷积是信号处理的基本运算,快速卷积和分段卷积是计算离散卷积的重要算法.文章以离散线性卷积的概念为基础,介绍了计算卷积的常用方法和运算流程,列举了MATLAB实现的程序.这些程序能动态演示卷积运算的全部过程,既可帮助理解卷积运算的原理流程,也可作为教学讲解的演示工具. 1、离散卷积常规算法的动态演示程序
clear;clc;close all;format compact;
xn=[5,4,3,2,1],M=length(xn),%输入任意序列并计算长度M
hn=[1,1,1],N=length(hn),%输入任意脉冲响应并计算长度N
m=[-(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,%逐个计算卷积输