ゼロ詰めFFTの低係数のみを効率的に計算する方法


14

シーケンスをゼロに4Nにパディングし、FFTを実行し、生成された4NからNポイントの最低周波数のみを使用するアルゴリズムを持っています。

これは多くの無駄な作業のように思えますが、どのようにこれをより速く行うことができますか?


@Dilip。FFTWまたはIMKLライブラリを使用します。私はもちろん、私のkissfftライブラリを使用することができますが、それは他の人VSスピード不利で出始めている
マーク・Borgerding

2
頻度の間引きを言うつもりだったので、代わりに時間の間引きを書いたので、私はあなたが応答したコメントを削除しました。しかしここで蝶図を見てください。多数のゼロを考慮して対応する乗算をスキップするために -FFT の最初の2つのステージのコードを記述する場合、入力ベクトルが存在する -FFT に対してFFTライブラリサブルーチンを回呼び出すことができます。 「フル」。もちろん、各サブルーチン呼び出しからの出力ののみが必要です。4N4NN/4
ディリップサルワテ

回答:


2

少数のビンしかない場合、次の方法が非常に効率的です
。1.必要な各周波数でDFTを実行します。
2.問題の各周波数に対してGoertzelアルゴリズムを使用します。


マークは、4 N個のうちビンが必要だと言ったため、1)は妥当な選択肢ではないようです。Goertzelアルゴリズムには、データの受信時のオンライン計算、小さなストレージなどの利点がありますが、ビンごとに2 N + 4の乗算が必要です。一方、Hornerのルールによる多項式評価として計算される各ビンは、Nの乗算のみが必要です。したがって、2)も特に合理的なオプションではないようです。N4N2N+4N
ディリップサルワテ

あなたは正しい、私はどういうわけか詳細を逃した質問を読んでいる間。私が答えている間、私は「うん、彼が欲しいビンの数を知るのはいいだろう...」と考えていました。答える前に質問を読み直すべきだと思います。
ジェイコブ

2

4Xの長さへのゼロパディング、長いFFTの計算、そして下の1/4ビンのみを使用すると、元の長さのFFTのウィンドウ化されたSinc補間とほぼ同じ結果が得られます。

したがって、元のFFT長を使用し、適切なウィンドウ幅の3フェーズSinc補間カーネルを使用して補間するだけです。


0

時間領域のゼロパディングは、より高い周波数ソリューションを提供しますが、新しい情報は提供しないため、基本的に周波数ドメインでの補間を提供します。信号の性質と必要な精度に応じて、Nポイントの通常のFFTで追加の周波数ポイントを取得し、適切な補間(線形、スプライン、pchip、sincなど)を実行できる場合があります。


ましょ(複素係数はおそらくと多項式であるxはIの程度の)N - 1。我々は、でそれを評価するN個のα nは0 N N - 1 α = EXP - J 2 π / Nでであり、Nバツz==0N1バツzバツN1Nαn0nN1α=expj2π/NN取得する結束番目のルートX N = X α nで。これらは、の値であるX Z N単位円上に等間隔点。私たちが本当にしたいことの値であるX Z β nは0 N N - 1 β = EXP - jの2 π / 4 N あり、Nバツn=バツαnバツzNバツzβn0nN1β=expj2π/4N単位円の最初の象限上の N点。線形、スプラインなどの補間がどのように機能するかわかりません。説明してください。N
ディリップサルワテ

申し訳ありませんが、私の前回のコメントの最後から2番目の文は、単位円の第4象限と言っていたはずです。以来、、すべての第四の目標値X β 4 kは既にFFTにより計算された: X β 4 K= X α Kβ4=αバツβ4kバツβ4k=バツαk
ディリップサーワテ

大きなFFTを実行するよりも、適切な補間を高速に実行することは難しいと思われます。
マークボーガーディング

128ポイントのFFTと12800Hzのサンプルレートがあるとします。128ポイントのFFTは、0Hz、100Hz、200Hz、300Hzなどの値を提供します。ゼロパディングは、周波数分解能を0Hz、25Hz、50Hz、100Hzなどに上げることです。これは補間問題と見なすことができます。数学的に正確に言えば、128次の円形sinc内挿を行う必要があります。それは確かにわざわざの価値はありませんが、アプリケーションと必要な精度に応じて、はるかに低次の補間で十分です
ヒルマー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.