FFTベースのフィルタリング方法は、リアルタイムアルゴリズムに本質的なレイテンシを追加しますか?


7

現在のオーディオ処理アプリケーションでは、IIRフィルターを使用して完全に時間領域で作業しています。これにより、3つまたは4つのサンプルのオーディオバッファーを使用でき、そのフレーム内に何らかの形式のオーディオ出力があることを保証できます。

FIRベースのフィルターに切り替えた場合(この質問で概説されているようにフィルターのリンギング時間を短縮するため)、処理効率を維持するためにFFTベースのオーバーラップ加算手法を使用する必要があるでしょう。ご覧のように、変換を行う前に、FFTフレームバッファーにサンプルを入力する必要があります。これにより、FFTの計算に使用されるサンプルの数に比例して、アルゴリズムに固有のレイテンシが追加されます。私はトリックを逃していますか?

回答:


10

あなたは正しいです。FFTベースの処理は、システムに固有のレイテンシを追加します。ただし、これを調整する方法はいくつかあります。

長さ "N"のFIRフィルターがあるとします。これは、FFT長が2 * Nになる標準のオーバーラップ追加またはオーバーラップ保存メソッドを使用してFFTベースを実装できます。システム全体のレイテンシも約2 * Nになります。Nサンプルのフレームを蓄積する必要があり、次の入力フレームを蓄積している間に、現在のフレームで計算を行います。2番目のフレームが累積されるまで(タイムオフセット2 * N)、最初のフレームは出力する準備ができています。高速なCPUを使用している場合は、入力フレームと出力フレームに異なる配置を使用することで、これをいくらか高速化できますが、通常、それよりも面倒です。

また、フィルターを長さMのK個の小さなブロックに分割することもできます(N = K * M)。FFTはM個の入力サンプルでのみ実行する必要があり、複数のフィルターセクションでの遅延と累積は周波数領域で実行されます。Bill Gardnerは、そのいくつかのフレーバーをここで説明しました:http : //www.cs.ust.hk/mjg_lib/bibs/DPSu/DPSu.Files/Ga95.PDF これは、しばしば「ブロックコンボルバー」と呼ばれます。

これにより、基本的にレイテンシと効率のトレードオフが可能になり、直接FIRとフルサイズのオーバーラップ加算メソッドとの間に連続性が提供されます。ブロックコンボルバーの優れた副作用は、フィルターの全長が2の累乗である必要がないことです。たとえば、768タブのフィルターを、効率を大幅に低下させることなく、128の6ブロックとして実装できます。


ブロックコンボルバーに関するヒントです。おかげで
Learnvst
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.