1

問題の説明

畳み込みを効率的に計算するために、畳み込み定理を採用しました。2 つの実信号がs1あり、それぞれs2の長さが異なるとしNます。次に、畳み込みを取得できます

import numpy as np
import numpy.fft as fft

size = len(s1)
fft_size = int(2 ** np.ceil(np.log2(2 * size - 1))) #The size for the FFT algorithm

S1 = fft.rfft(s1, fft_size) #Take FTs
S2 = fft.rfft(s2, fft_size)

convolution = fft.irfft(S1 * S2) #Take IFT

ただし、信号がある場合は、k読み取るfft_sizeように変更する必要があります

fft_size = int(2 ** np.ceil(np.log2(k * size - 1)))

円形の重なりを避けるため。

k残念ながら、私は先験的に知りません。1 つのオプションは最大値を選択することですk_maxが、絶対に必要でない場合は大量のメモリを使用する必要がなく、k が変更されるたびに FT を再度評価しないことを好みます。

質問

次のいずれかを行うことは可能ですか

  • k=1必要に応じて「フーリエ空間のゼロ パッド」の信号の FFT を実行しますか?
  • FFT での循環ラップを防止しますか?
4

1 に答える 1

1
  1. 周波数ドメインでのゼロ パディングは可能ですが、時間ドメインで行うよりもはるかに多くの計算作業 (フロップ) が必要です。追加の高速畳み込みごとに「余地」を作成するために、IFFT、ゼロパッド、および再 FFT の方が高速である可能性があります。

  2. 完全な畳み込みのより長い結果はどこかに行かなければならないので、いいえ、FFTを使用するときに循環畳み込みを防ぐことはできません。ゼロパディングでさえ、循環オーバーラップの計算を妨げません。結果のオーバーラップがゼロの追加と同等であることを確認するだけです。

于 2012-02-15T21:48:11.670 に答える