fft
Juliaでゼロパディングを特定の長さに計算するにはどうすればよいですか? 当然、ベクトルにゼロを追加することはできますが、それは厄介なようです。
ドキュメントでこれについて何も見つけることができません。また、呼び出しmethods(fft)
によって関連するメソッド シグネチャが表示されないようです。どちらにも関連するものは見つかりませんplan_fft
。
これを行うためのキーワード引数はないと思いますか、それがあなたが探していたものであれば、そのようなことはありませんか?
nextpow2()
および関数は、 に入力する配列のサイズを取得するのnextprod()
に役立ちますfft()
。次に、より効率的なサイズのゼロの配列を作成して、データで埋めることができます。または、理想的なサイズと配列サイズの差を配列に追加することもできます (多くの fft を計算している場合は、入力配列を毎回再入力するだけで再利用できるため、前者の方が適しています)。
コメントからのワンライナーdatpad = [dat; zeros(eltype(dat), nextprod(length(dat)) - length(dat)]
http://docs.julialang.org/en/release-0.5/stdlib/math/?highlight=fft#signal-processing まだチェックしていない場合に備えて!
私が間違っていなければ、Julia は FFT に FFTW を使用します。入力データを操作せずに自動的にゼロパディングされた FFT を実行することについて、FFTW マニュアルで何も見た覚えがありません。
速度に関心がなく、FFT を離散フーリエ変換 (DFT) の省略形としてのみ使用している場合は、任意の周波数ビン サンプリングの DFT 関数を使用して DFT を実行するか、変換を手動で実行することができます。これは O( N log N ) 操作ではなくなりますが、元のデータ ベクトルを手動でパディングすることは回避され、必要に応じて変換のサンプリングの間隔を空けることができます。気にしない部分を抜きます。
たとえば、周波数 でサンプリングする DFT 行列を作成するには、次のようにしますf
。
M = exp( -2im*pi * f/Fs * (0:N-1)' )
ここFs
で、 はデータ ベクトルのサンプリング レートで、 はデータ ベクトルN
の長さです。 f
も周波数値のベクトルです。行列乗算で適用する:
y = M * x
DFT 行列が大きくなりすぎた場合は、その各行をループで適用するだけです。