簡體   English   中英

Python:一維數組循環卷積

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

由於這是家庭作業,我省略了一些細節。

通過卷積的定義,如果追加信號給自己,然后AAB之間的卷積將包含ab的循環卷積內。

例如,請考慮以下事項:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM