MATLAB 求离散信号卷积
代码如下:
function [C,Ck] = dt_convolution_advance(A,B,Ak,Bk)
% dt_convolution_advance 计算离散信号卷积
% A 输入信号
% B 输入信号
% Ak 输入信号A下标
% Bk 输入信号B下标
% C 输出信号
% Ck 输出信号C下标
% 计算输入信号A,B的离散卷积并画出输出信号的杆状图
% calculate the discrete time convolution of the input signal A and B .
% then output the stem picture[~,a]=size(A); %输出矩阵A的列数
[~,b]=size(B); %输出矩阵B的列数
C=zeros(1,a+b-1); %预定义输出矩阵
A_=zeros(1,a+b-1); B_=zeros(1,a+b-1); for i=1:a+b-1 %将A的长度拉长到与C相等,多余的补0if i<=aA_(i)=A(i);elseA_(i)=0;end
endfor i=1:a+b-1 %将B的长度拉长到与C相等,多余的补0if i<=bB_(i)=B(i);elseB_(i)=0;end
end%% 计算卷积
%C的第i个值等于A_的前i个值与B_的对应的前i个值的乘积和
%注意计算乘积和时的序号 A(k)应与B(i+1-k)相乘
for i=1:a+b-1for k=1:itempt=A_(k)*B_(i-k+1);C(i)=C(i)+tempt;end
end%%
Ck=Ak(1)+Bk(1):Ak(end)+Bk(end); %计算结果的下标%% 作图
stem(Ck,C);
xlabel('n');
ylabel('y(n)');end
应用demo: