7

私はFFTと信号処理に慣れていないので、この質問が理にかなっているか、愚かではないことを願っています。

ライブオーディオ信号のスペクトル分析を実行したいと思います。私の目標は、応答性と周波数分解能の間の適切なトレードオフを見つけて、着信オーディオのピッチをほぼリアルタイムで推測できるようにすることです。

フーリエ変換の背後にある数学について私が集めたものから、サンプルサイズと周波数分解能の間には固有のバランスがあります。サンプルが大きいほど、解像度は高くなります。サンプルサイズを最小化しようとしているので(ほぼリアルタイムの要件を達成するため)、これは解像度が低下することを意味します(出力バッファーの各スロットは広い周波数範囲に対応します。これは望ましくありません)。

ただし、意図したアプリケーションでは、ほとんどのスペクトルを気にしません。狭い周波数範囲、たとえば100hz〜1600hzのスペクトル情報のみが必要です。入力バッファサイズを一定(および小さい)に保ちながら、周波数領域出力の解像度を向上させることができるように、FFT実装を変更する方法はありますか?つまり、出力の合計帯域幅を出力解像度と交換できますか?もしそうなら、これはどのように行われますか?

私はせいぜい数学の理解が弱いですが、入力バッファをゼロで埋めることは興味深いかもしれませんね。

あなたが提供できるどんな助けにも前もって感謝します。

4

6 に答える 6

8

どこからともなく追加情報を取得することはできませんが、連続する FFT をオーバーラップさせることでレイテンシを減らすことができます。リアルタイムのパワー スペクトル推定では、連続する入力ウィンドウが 50% オーバーラップするのが一般的です。

サンプル間にゼロを挿入するのも便利な方法です。これにより、出力ビンの解像度がより明確になりますが、実際には補間を行っているだけです。つまり、追加の情報は得られません (もちろん)。ただし、上記のオーバーラップの提案に加えて、この手法が役立つ場合があります。

于 2010-11-02T22:47:20.813 に答える
3

マークが言うように、ゼロを追加すると、高調波(不要な周波数)が発生します。

また、「サンプルが大きい」とは、サンプルが多いということですか、それともサンプルレートが高いということですか。頻度の高いサンプルレートでは、単位時間あたりのサンプル数が多くなりますが、固定サンプルレートでより多くのサンプルを意味しているように見えます(つまり、より大きな時間のチャンクを分析します)。

1600Hzの上限周波数について言及したので、少なくとも3200Hzのサンプルレートが必要になります。ダブル。

一度に処理する期間については、応答性(10秒のバッファーは結果が得られるまでに10秒+処理時間かかります)とノイズの低減を交換する必要があります。バッファが小さいほど、スプリアスノイズ信号を拾う可能性が高くなります。

余談ですが、周波数領域で考えることは、最初は難しい場合があります。私はこれに最適なものを見つけました。それは、私が大学で受けたさまざまな応用数学のクラスではなく、結晶学のクラスでした。結晶回折パターンは、単なる2次元フーリエ変換です。回折パターンが結晶構造に視覚的にどのように関連しているかを把握することは、私の最初の仕事で地震データのFFTを処理する場合に非常に役立ちました。

于 2010-11-02T22:01:49.333 に答える
3

FFTを上回る「トリック」はないと思います。「ゼロの追加」は、信号のオーバーサンプリングを意味する場合もあります。高調波を取り除くには、信号をフィルタリングする必要があります(これにより、確実に余分なノイズが発生します)。次に、より長いFFTを実行しますが、その後も全体的な解像度は同じになります。

また、ウィンドウ関数は結果の周波数ピークを広げます。

OTOH、周波数が2つのFFTビンの間にある場合、隣接するビンの比率を調べることで、より良い解像度を得ることができます: http ://www.tedknowlton.com/resume/FFT_Bin_Interp.html

ただし、これは、より複雑な信号(多くの同時周波数)では機能しません。

  • 特定の周波数が存在するかどうかを知りたい場合は、フィルターと相関を調べます。

  • 特定の周波数を特定する場合は、最初にそれをフィルターで除外してから、ゼロ交差を検出できます。フィルタを設計する際には多くのパラメータがあるため、フィルタの長さは、特定のフィルタ(ステップ)応答時間につながる1つのパラメータにすぎません。これは、複数の周波数で次々に実行できます...

追加:いくつかの直感:

  1. FFTは再構成に十分であるため、同じサンプルベクトルにつながる高解像度のスペクトルは主に無限に多くあり、これ以上正確なものはありません。ビン補間は、基本的に、高速フーリエ変換の等間隔のビンよりも別の(「より適切な」)表現を計算します。

  2. 離散的な量子化されたケース、たとえば8ビットの場合、非常に近い2つの周波数について考えます。差が十分に小さい場合は、同じ、たとえば256個のサンプルが生成されます。しかし、より多くのサンプル(おそらく1024)を見ると、違いが見られるほど大きくなっていることに気付くでしょう。

PS:オーバーサンプリングのフィルタリングは、FFTの後で、上位のビンを無視するだけで実行することもできます。

于 2010-11-02T22:30:21.740 に答える
2

1600 Hz (またはそれより少し高い、たとえば 2k) でデータをローパス フィルター処理してから、より低いサンプルレート (フィルター周波数の 2 倍、たとえば 4k) にリサンプリングして、サンプル数を減らすことができます。次に、ゼロ パディングを使用して周波数分解能を上げます。

于 2010-11-03T08:46:02.213 に答える
0

圧縮センシングを調べてみてください。後で再構築できる本質的に事前に圧縮された信号をサンプリング(および保存)できます。信号のスパース性が高い限り(おそらくあなたの状況ではそうなるでしょう)、シャノン-ナイキストの制約は多少曲げることができます。欠点は、元の信号を再作成するための後処理に計算時間がかかる可能性があることです。また、工場のドライバーはおそらくナイキスト-シャノンの制約に従うことに関心があると想定しているため、信号のサンプリングに使用しているハードウェアを管理するために、独自のデバイスドライバーを開発する必要があります。詳細については、こちらをご覧ください

于 2010-11-11T05:19:21.090 に答える
0

あなたが述べた目標は、あなたの質問と両立しません。オーディオのピッチは、分解された周波数ピークと同じではありません。ボーカルと音楽のピッチ推定に関する膨大な文献を読んでください (知覚されるピッチを持つ他の多くの種類の音に適用されます)。アダプティブ/インクリメンタル/スライディング タイム ドメイン手法は、周波数ドメイン ブロック ベースの手法よりもレイテンシが低くなる場合があります。

オーディオ サンプル ベクトルのゼロ パディングは、周波数領域データの補間とほぼ同じです。ノイズや近くに干渉がほとんどない場合は、より正確な (「解像度」の高い) 周波数ピーク位置を見つけることができます。しかし、近くのスペクトル ピーク (分離分解能) やノイズの除去が改善されることはありません。

FFT の前にデータ (von Hann など) をウィンドウ処理すると、近くにあるがビンまたは 2 ビンに隣接していない周波数によって引き起こされるノイズの一部を除去するのに役立つ場合があります。

追加: サンプリング後のローパス フィルターがほぼ完全で位相線形でない限り、目的の周波数帯域の端近くで実際に周波数分解能が失われる可能性があります。フィルタリングは、対象の帯域に実際の情報を追加しないため、「解像度」を高めるのに役立ちません。ウィンドウ処理は、他の周波数からの干渉を減らす可能性が高くなります。

于 2010-11-03T17:38:33.017 に答える