卷積結果的通俗解釋:
f(x)是待處理的信號。通常地,該函數數據個數比較多。
g(x)是對信號前後相關性的描述的函數。通常地,該函數非零數據個數比較少。它通常具有在(-∞,+∞)內可積且快速收斂的特性。
對於本例中的函數g(x),卷積的結果可以解釋爲:在x時刻的值受到x-2, x-1, x, x+1, x+2共5個時刻的影響,其加權係數分別是0.01, 0.2, 1, 0.8, 0.05。也就是說(f*g)(x)=f(x-2)*0.01+f(x-1)*0.2+f(x)*1+f(x+1)*0.8+f(x+2)*0.05。其他x取值都是g(x)=0那麼乘積項f(t)*g(x-t)也是0,因此在計算(f*g)(x)時可以不計。
從函數圖像來看,比較函數f(x)的曲線和卷積後的函數(f*g)(x)的曲線,不難發現,卷積後的曲線比f(x)變得光滑一些。也就是說卷積運算能將f(x)函數的光滑度提高一階。
Matlab程序代碼
以下Matlab程序源代碼實現了上例卷積運算,並且將f(x),g(x),(f*g)(x)的圖像在同一座標系中繪製出來。
clear; N=11;
x=[-5,-4,-3,-2,-1,0,1,2,3,4,5];
g=[0,0,0,0.05,0.8,1,0.2,0.01,0,0,0];
f=[1,4,3,6,2,3,1,4,5,3,4];
s=0;
f_g=zeros(1,N);
for xi=-5 : 5
index_xi=xi+6;
s=0;
for ti=-5:5
index_ti=ti+6;
if xi-ti<-5 || xi-ti>5
item=0;
else
index_xi_ti=xi-ti+6;
item=f(index_ti)*g(index_xi_ti);
end
s=s+item;
end
f_g(1,index_xi)=s;
end
hold on;
plot(x,f,'-o')
str=[ repmat(' ',N,1) num2str(f',2) ];
text(x,f,cellstr(str));
plot(x,g,'-o');
str=[ repmat(' ',N,1) num2str(g',2)];
text(x,g,cellstr(str));
plot(x,f_g,'-o');
str=[ repmat(' ',N,1) num2str(f_g',3) ];
text(x,f_g,cellstr(str));
hold off;