1:簡述
Numpy擁有函數numpy.convolve(a, v, mode=’full’)[source]¶,經過該函數完成卷積算法並圖形化(Matplotlib)實現。html
2:卷積定理
原理:
設:f(x),g(x)是R1上的兩個可積函數,做積分:
python
∫∞−∞f(τ)f(x−τ)dτ
用處:
二個二維連續函數在空間域中的卷積可求其相應的二個傅立葉變換乘積的反變換而得。反之,在頻域中的卷積可用的在空間域中乘積的傅立葉變換而得。
f(x,y) * h(x,y)<=>F(u,v)H(u,v)
f(x,y)h(x,y)<=>[F(u,v) * H(u,v)] (A * B 表示作A與B的卷積)web
3:官方函數解讀
numpy.convolve(a, v, mode=’full’)
(http://docs.scipy.org/doc/numpy/reference/generated/numpy.convolve.html#r17)
a,v是兩個算子(array_like),mode有三種狀況,’full‘ : 默認值,將計算每一個點的卷積,即若a,v長度爲n,m。最終輸出圖形x長度爲(n+m-1),在邊界處信號不徹底重疊,即存在邊界效應。‘same‘:返回長度爲max(n,m),仍然有邊界效應。‘valid‘:返回長度爲max(n,m)-min(n,m)+1。其中只會顯示兩個信號重疊的部分,不會有邊界效應。算法
相似功能函數:
scipy.signal.fftconvolve
%使用快速傅里葉變換卷積函數。
scipy.linalg.toeplitz
%可用於構造卷積運算符(Used to construct the convolution operator.)。
polymul
%多項式乘法,能夠同本函數得到相同的輸出,可是還能夠接受poly1d對象做爲輸入。
案例:
>>> np.convolve([1, 2, 3], [0, 1, 0.5])
array([ 0. , 1. , 2.5, 4. , 1.5])
>>> np.convolve([1,2,3],[0,1,0.5], 'same')
array([ 1. , 2.5, 4. ])
>>> np.convolve([1,2,3],[0,1,0.5], 'valid')
array([ 2.5])
4:編碼嘗試
%cmd -> ipython notebook
%list和nparry都是單元數據,不能被直接plt。
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.plot([1,1,3])
end=np.convolve([1,2,3,4],[1,1,3],'full')
plt.plot(end)