[英]Python: 1d array circular convolution
我想知道 numpy/scipy 中是否有用於一維數組循環卷積的函數。 scipy.signal.convolve()
函數只提供“模式”而不提供“邊界”,而signal.convolve2d()
函數需要二維數組作為輸入。
我需要這樣做來比較開放與循環卷積作為時間序列作業的一部分。
根據卷積定理,可以使用傅立葉變換得到循環卷積。
import numpy as np
def conv_circ( signal, ker ):
'''
signal: real 1D array
ker: real 1D array
signal and ker must have same shape
'''
return np.real(np.fft.ifft( np.fft.fft(signal)*np.fft.fft(ker) ))
由於這是家庭作業,我省略了一些細節。
通過卷積的定義,如果追加的信號給自己,然后AA和B之間的卷積將包含a和b的循環卷積內。
例如,請考慮以下事項:
import numpy as np
from scipy import signal
%pylab inline
a = np.array([1] * 10)
b = np.array([1] * 10)
plot(signal.convolve(a, b));
那就是標准的卷積。 然而現在這
plot(signal.convolve(a, np.concatenate((b, b))));
在最后一張圖中,試着看看循環卷積的結果在哪里,以及如何推廣它。
本着 StackOverflow 的精神,您可以復制粘貼此代碼:
n = a.shape[0]
np.convolve(np.tile(a, 2), b)[n:2 * n]
這假設 a, b 具有相同的形狀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.