卷積運算
一般來說,在使用MATLAB的conv函數進行卷積運算時,我們的輸入序列都是從n=0時刻開始的,設兩個序列的長度爲N1和N2,則得到的卷積序列的長度爲N1+N2-1,其對應的橫座標範圍就是0:1:N1+N2-1-1。
當兩個序列的起始位置不爲0時,得到的卷積結果座標需要專門去確定。這裏自編一個函數get_bound來解決這個問題,和conv一起使用效果很好。
代碼實現
function [ bound ] = get_bound( n1, n2 )
%GET_BOUND 獲得序列卷積的橫座標範圍
% 輸入:兩個序列的橫座標範圍
% 輸出:卷積之後的橫座標範圍
leftbound = n1(1) + n2(1);
Len = length(n1)+length(n2)-1;
rightbound = Len - 1 + leftbound;
bound = leftbound:1:rightbound;
end
使用舉例
% 例子:
% 計算sin(n/2)與0.5^n的卷積(3<=n<4*pi)
n = -3:1:4*pi;
f1n = sin(n/2);
f2n = power(0.5, n);
yn = conv(f1n, f2n);
n_ = get_bound(n, n);
stem(n_, yn); title('卷積圖像');
axis([-inf, inf, min(yn)*1.2, max(yn)*1.2]);