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: