離散卷積過程舉例圖示詳解








卷積結果的通俗解釋:

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;