Convolution卷積算法python以numpy,Matplotlib實現


1:簡述

Numpy擁有函數numpy.convolve(a, v, mode=’full’)[source]¶,通過該函數完成卷積算法並圖形化(Matplotlib)實現。

2:卷積定理

原理:

設:f(x),g(x)是R1上的兩個可積函數,作積分: 

用處:

二個二維連續函數在空間域中的卷積可求其相應的二個傅立葉變換乘積的反變換而得。反之,在頻域中的卷積可用的在空間域中乘積的傅立葉變換而得。 
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的卷積)

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對象作為輸入。

 
 
 
         
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

案例:

>>> 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])

 
 
 
         
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM