人間に近い精度でリアルタイムにオーディオ信号の周波数成分を抽出する最も効率的な方法


14

私はFFTのような方法で任意のオーディオサンプル(通常は音楽)の周波数成分を抽出する方法を(可能であれば)解決しようとしていますが、FFTアルゴリズムの研究では、いくつかの問題があることを学んでいますこの目的のための厳しい制限。

FFTが提示する3つの問題があります。

  1. FFTビン解像度はウィンドウサイズと同等であるため、かなり妥当な精度(1 Hzなど)を達成するには、不当に長いウィンドウ(1秒など)が必要です。これは、トランジェントまたは新しく導入された周波数をすばやく検出できないことを意味します。また、より高速なCPUとより高いサンプルレートでは問題を解決できないことを意味します。制限は本質的に時間に関係しています。

  2. 人間は周波数を対数的に知覚しますが、FFTビンは直線的に間隔が空けられます。例えば私たちの公聴会のローエンドでは20Hzの違いがある巨大なハイエンドでは20Hzの差が知覚できないのに対し、。したがって、低周波数で必要な精度を得るには、高周波数で必要なものよりもはるかに多くを計算する必要があります。

  3. これらの問題の一部は、FFTビン間を補間することで解決できます。これは、多くの音楽オーディオで機能する場合があります。これは、周波数が非常に離れていることが多く、1つの周波数しかビンのペアに漏れないためです。しかし、特にパーカッシブな楽器のような不協和音の場合、これは必ずしも当てはまりません。したがって、補間は実際には単なる当て推量です。

DFT / FFTアルゴリズムの理解から、出力(ビンの振幅)は事実上、各ビンの周波数でのサイン/コサインの相関です。ビンの周波数が非線形に間隔を空けるようにアルゴリズムを再設計できると(つまり、異なるサイン/コサインのセットを相関させると)、すべての周波数で音響心理学的に等しい解像度を達成できると思います。これは可能ですか、それとも関係する数学の私の不完全な理解に基づく空想ですか?

興味のあるすべての周波数でサイン/コサインを相関させることで、ブルートフォースで問題を解決することもできたと思います。これは可能ですか?どのような効率ですか?問題は解決しますか?

信号のより正確でリアルタイムの周波数分解を実現する別の方法はありますか?CPUの効率は懸念事項ですが、大きな懸念事項ではありません-理論的にはまったく実行できるかどうかに部分的に興味があります。ただし、最新のデスクトップマシンでリアルタイムで実行可能なものが理想的です。


3
どの問題を解決しようとしていますか?f0検出、複数f0検出(転写用)、コード認識、音色モデリング...?これらの問題のいくつかにはアドホックな解決策があります。可逆性に関心がありますか(分析->変換->再合成フレームワークで使用されます)?
ピクネット

私が解決しようとしている問題は、明らかに無制限です。私はあなたのリストのほとんどをカバーするデジタル音楽に一般的な興味を持っています。しかし、私の曖昧さは、何ができるのか、あなたが言及する各問題を解決するための特定の業界標準または最良の方法が何であるかに関する私の知識の不足によるものです(この質問をするまで、私は常にFFTがそれであると仮定していました)。しかし、私にとって最も興味のあるリストの項目は音色モデリングです。また、録音中に同時に聞こえる複雑な音色を抽出する方法を見つけたいです。再合成は刺激的です。AIアルゴリズムは興味深いものです。
-bryhoyt

私が過去に解決しようとしていて、いつかもう一度試してみたい、より具体的な問題:マイクで録音されたプレーヤーまたは歌手のグループでリアルタイムに「即興」するプログラムを書きたいです。私は自分のコンピューターにサインを「口hist」を吹かせながら、目立って遅れて調子外れになった。そのような即興演奏が正確に調律とビートに合っていることが重要です。もちろん、これを達成する方法は他にもあります(プレーヤーがデジタル楽器を演奏したり、コンピューターにプリセットのコード進行などの「内部情報」を与えたりします)が、これは私の目標ではありません。
-bryhoyt

「ビンの周波数が非線形に間隔を空けるようにアルゴリズムを再設計できれば、すべての周波数で音響心理学的に等しい解像度を達成できます。」連続的なMorletウェーブレット変換のように聞こえます
エンドリス14

回答:


5

以前の投稿でコメントしたように、「短期フーリエ変換」と呼ばれる時間周波数解析法は、信号xを解析するフィルターバンクと同等です。サイズの特定の分析ウィンドウw nに対してバツバツwn、周波数におけるフィルタ kは/ Nがある: H 、N = wが- N E J 2 π n個のKNk/N

hn=wnej2πnkN

通常の分析ウィンドウ(ハン、ハミング、または長方形)の場合、これは、周波数ビンk(複素指数変調のおかげ)に「シフト」されたカットオフ周波数が約ローパスフィルターに対応します。、したがって、バンドパスフィルターにつながります。1/Nk

この時点で、人間の知覚を反映することについてのあなたの懸念に直接答えるために、一部の人々は["constant-Q transform"(CQT)] [Brown91]を導き出しました。フィルターバンクの解釈では、FTと同じ原理に依存しています。ただし、中心は、「通常の」FTのように直線的に間隔を空けられず、log2間隔になります。音階は西洋音楽の音階と密接に関連しています:f k +fk、我々はオクターブ当たり12個の周波数を得る(?ベルを鳴らし:-))、および帯域幅は次のように設定されています、と言う 2 1 / 12 - 1fk+1=21/12fk。ニーズに最適な他のセンターを選択することもできます。21/1212fk

CQTの実装は、あちこちで見つけることができます。クラプリ教授による最近の実装は、かなりまともな逆になっています。Telecom ParisTechのAudioグループにもPrado教授による実装がありますが、私はまだ試していません。

[Brown91] J.ブラウン、「一定のQスペクトル変換の計算」、アメリカ音響学会誌、1991、89、425-434

EDIT 20121014:(bryhoyt's)の質問に対するいくつかの回答とコメント。

  1. 主な質問に対するあなた自身のコメントについての一般的なアイデア:あなたは、私にとっては対処するのにささいな問題ではない多くのアプリケーションに興味があるようです。「音色モデリング」は、ピッチや周波数の解像度や精度がそれほど問題にならない音声認識などに関連しているように聞こえます(MFCCの通常の計算方法を考慮してください)。

    また、トップの研究者(F. PachetフランスIRCAMのrepmusチーム)が自動即興と伴奏の自動化のトピックに取り組んでいる人数も考慮してください。このタスクは不可能ではありませんが、多くの分野の専門知識が必要です。要約すると、典型的なシステムは、(少なくとも)人間の聴覚システムを模倣し、音/音楽/ピッチ/リズムの知覚を実装し、音楽理論を知り、前のすべてのステップの推定に基づいて決定を下す必要があります。フーリエ変換、または任意の信号表現は、最終目標に向けたほんのわずかなステップです。私の意見では、これまでのところ最もよく理解されている可能性があります。

    とはいえ、誰もが実際に起こっていることをはるかに超えて見ている可能性があり、シンプルでエレガントなソリューションでそれを取り締まるかもしれません!完了したら、公開することを忘れないでください!:-)

  2. 44kHzで0.1秒のサンプルで十分な範囲の周波数を含む

    これは、FTの場合、のオーダーの解像度につながりますFs/N=44100/4410=10Hz

  3. FFTはこれを低周波数と高周波数で検出することはできませんが、他のアルゴリズムでも検出できると言います:トレードオフは何ですか?

    短い答え:メロディ推定に関する私の論文を読んでください!

    もう少し詳しく説明すると、処理するサウンドの仮定のおかげで、多くのピッチ推定アルゴリズムがFTの制限を超えています。自然な音(人間の声、オーボエ、サックス、ピアノなど)からの音は、単一の正弦波よりも複雑であると予想されます。ほとんどのピッチ音は多かれ少なかれ高調波です。つまり、周波数が基本周波数の倍数である正弦波の和としてモデル化できます。

    したがって、スペクトル和、スペクトル積、または自己相関関数などの検出関数を使用する方法では、ピッチを推定するときにこれらの高調波を考慮することが有用です。最近誰かが関連トピックを始めまし

  4. トレードオフは何ですか?より具体的には、適度に短いウィンドウに対してどのレベルの周波数精度を期待できますか?(CQTのウィンドウサイズは可変であることがわかります-どのくらいそうですか?)さらに具体的には、どのくらい近くまで到達できますか。0.005sのウィンドウで0.5%の周波数差を目標としていますか?

    前述のように、0.005秒のウィンドウでは、200Hzの「周波数リーク」のようなものが期待できます。それは、FTが2つの異なる正弦波であることをFTが示すことができないように、周波数が200Hzに近い2つの正弦波がある場合にのみ本当に問題になります。まあ、私たちはあなたの0.5%からは程遠いです(ところで、半音は周波数の6%です!)、0.005sはあなたの目的のために本当に小さいです。ただし、0.005秒ごとに推定値を提供する場合は、音声/音楽処理で通常行われるように、より長いオーバーラップフレームを処理できます。それはあなたが実際に欲しいものですか?

    ウィンドウのサイズについては、[Schoerkhuber2010]を参照できます。フレームの長さは次のとおりです。

    Nk=Fsfk21/B1
    BB=48fk=100Hz約0.7秒の長いウィンドウが必要です。その後、一時的な解像度が少し失われることは言うまでもありません...しかし、前述のように、これは音の構造を忘れた場合にのみ問題になります。さらに、心理音響学は、500Hz未満では、人間は正弦波をそれほどうまく区別していないと考えています。もちろん、私たちのコンピューターが私たちよりもうまくいくことを願っていますが、ここで私たちは難しい問題に直面しています!

    最後に、音の時間周波数表現を計算する他の方法が存在することに注意してください。たとえば、ガンマトーンフィルターバンクを検討してください。前述のCQTの利点は、変換とその反転の両方に対応するソフトウェアがあることです。個人的には、STFTに固執していますが、それは単純さのためであり、これまでのところ、ソース分離であっても低周波数でより良い解像度を必要としていないからです。

    [Schoerkhuber2010] Schoerkhuber、C。およびKlapuri、A。、「音楽処理用のConstant-Q変換ツールボックス」、第7回Sound and Music Computing Conference、バルセロナ、スペイン、2010年。


ちょっとしたコメント:CQTはあなたの懸念のポイント1と2を解決するのに役立つかもしれませんが、ポイント3では解決できません。ポイント3に関しては、時間と周波数の分解能の間には常にトレードオフがあります。周波数成分の場合は、時間分解能を失うために受け入れる必要があります。今、ピッチ推定のために、いくつかの他の解決策があるかもしれません。興味があるなら、私の博士論文で私のものを読むことができます:D
ジャン=ルイスDurrieu

よくわかりません。無料では何も手に入らないことはわかっています。最低周波数の少なくとも2、3周期にわたって、適切な解像度でサンプリングされていない周波数をアルゴリズムが正確に検出することは期待できません。しかし、44kHzで0.1秒のサンプルは、人間が正確に区別できる周波数の範囲を含むのに十分です(相対的な用語で-「ここは5番目です」、「フラットな減少した4番目があります」など)、情報を証明しますどこかにあります。FFTはこれを低周波数と高周波数で検出することはできませんが、他のアルゴリズムでも検出できると言います:トレードオフは何ですか?
-bryhoyt

上記のすべての優れた回答の中で、CQTは私が尋ねていた質問に最も正確に適合しているように見えます。トレードオフは何ですか?より具体的には、適度に短いウィンドウに対してどのレベルの周波数精度を期待できますか?(CQTのウィンドウサイズは可変であることがわかります-どのくらいそうですか?)さらに具体的には、およそどれくらい近くまで到達できますか。0.005sのウィンドウで0.5%の周波数差を目標としていますか?(これは、人間が調子が合わない、または
風変わり

5

まず、古典的な短期フーリエ変換アプローチでは、補間に代わるものがあります-特に、位相情報を利用して瞬時周波数を復元する手法(この質問を参照)では、スペクトルピークの位置を非常に正確に得ることができますFFTサイズの増加。あなたが正しく言ったように、欠点は、システムが隣接するピークを区別する能力を高めていないことです-しかし、これはすでにFFTビンインデックスの中心周波数を使用することに比べて大きな改善です。

srFFT_szeが分析ウィンドウ上ヌル積分を有する複素指数で信号を「プローブ」されているため) -であり、これらは、分析ウィンドウの長さの整数除算である期間を有していなければなりません。他の比率で周波数を「プローブ」するために同じアプローチを単純に使用しようとすると、完全なサイクルを含まない関数で信号を「プローブ」するため、機能しません。動作させるには、分析ウィンドウをブルートフォース検索のすべての信号の周期の最小公倍数に増やす必要があります。これはまさに避けたいことです。

動作する別のブルートフォースアプローチがあります:ウィンドウ化された複素指数(ガボールウェーブレット)で信号を「プローブ」します。これらは、中心周波数、中心時間、および帯域幅(ウェーブレットが時間または周波数にわたってどのように広がるかを測定する)によって特徴付けられます。必要な時間オフセット、周波数、および帯域幅で、信号とこれらのウェーブレットの間の多くの相関を評価する必要があります。結果は、各時間範囲および各周波数帯域に対して最適なウィンドウサイズが選択される、非常に柔軟な「タイル張り」STFTと同じになります。計算コストに加えて、デメリットは効率的なアルゴリズムと因果的アルゴリズムがないことです(辞書の最長ウェーブレットと同じ数のサンプルを事前に知る必要があります)。これらの手法を試してみたい場合は、MPTK

k

  • k
  • これらはホワイトノイズが存在する場合でも良好に機能します。これには、分析の前に信号をホワイトニングする必要があります。フィルタバンクの個々のチャネルで分析を実行することも役立ちます。

これらは計算コストが高くなりますが、モデルの次数やノイズが低い場合は短いウィンドウでオンラインで機能します。


4

周波数またはピッチ?人間のピッチ知覚に関する研究論文や本がすでにたくさんあります。しかし、IIRCは、ピッチの基本が発生しない限り、人間は周波数を正確に「抽出」するのが苦手です。また、「クリティカルバンド」内の複数の周波数ピークは、ノイズとして認識される傾向があります。そのため、「人間の精度に近い」方法には、人間の知覚による推定の失敗も含める必要があります。

FFTは、直交性と可逆性が要件でない限り、多くの目的に最適ではない単なるフィルターのバンクです。他のフィルターバンクは、MEL周波数フィルターバンクなど、これら2つを必要としない場合(そして人間の知覚が明らかに必要としない場合)に可能です。MEL周波数フィルターバンクによって周波数ピークが識別されると、FFT補間または位相ボコーダー技術によるさらなる分析が、分離されたスペクトル周波数ピークの周波数推定を改善するのに役立つ場合があります。

FFTと比較すると、同じ時間領域データのスパンで使用されるこれらのフィルタリング手法のいずれによっても、実際にはそれ以上の情報が収集されないことに注意してください。実際に起こっているのは、人間の聴覚システムの「不正確さ」または異常によく一致するための情報の損失かもしれません。

そして、一連の周波数からのピッチ推定は完全に異なる問題であり、これも多くの研究論文と聴覚学などの本の章のトピックです。

パフォーマンスに関する質問の最後の部分は、ニシンです。最近では、携帯電話のプロセッサでリアルタイムに数十のFFTと数十の異なるフィルターバンクを実行できます。CPUベンダーから入手できる非常に効率的なFFTライブラリを考えると、1000を超える「過剰な」ビンを持つFFTは、非常に小さくても素朴にコード化されたフィルターバンクよりも効率的です。


非常に有益な答え、ありがとう。私はピッチと周波数の違いを知っていますが、あなたの答えは特定の要件を満たす音にどれだけ人間の正確さが依存するかを強調するのに本当に役立ちました。人間はピッチの基本ではない周波数を抽出するのが非常に苦手であるという私の調和の知識に忠実です。調律間隔を互いに、および調律外れ間隔(子音間隔は不協和音よりも簡単に)から正確に区別できます。しかし、2つの調子外れの間隔(「フラット」、「非常にフラット」、「シャープ」などを除く)を区別するのは困難です。
-bryhoyt

2

多くの選択肢がありますが、それはあなたがしていることに依存します。物理的には、私たちの耳はFFTよりも並列フィルターバンクに似ており、時間分解能が高く、「フォーカシング」と呼ばれるプロセスが周波数分解能を高くすると主張します。そのため、場合によっては、理論的にはフィルターバンクを使用できますが、これには多くの処理が必要になるため、処理するデータが多くなります。

ウェーブレットは、特に効率的で関連するフィルターのセットとして見ることができます。音楽およびオーディオ分析用のウェーブレットの問題は、通常1オクターブの解像度しか提供しないことです(これについてはさまざまなことができますが、オーディオでウェーブレットが特に役立つことは実際には見ていません)。

別のアプローチは、重複するFFTウィンドウを使用することです。振幅情報だけでなく位相情報を調べることで、FFTの周波数分解能を上げることができます。これにより、通常よりもはるかに短いウィンドウを使用できるようになり、パフォーマンスと時間分解能が向上します。重複するウィンドウは正しく再合成するのが難しく、フェーズについてあまりにも多くの仮定をすることも危険です。おそらく、これらの種類のトリックは、複雑な時間周波数分析の問題を解決する上でおそらく必要不可欠です。

特定のアプリケーション用のその他のツールも多数あります。


1
バツnバツkmwn
バツfm=nバツn+mwnej2πnkN
Nバツnm
バツfm=pバツpwpmej2πpmkN=pバツphmp
hn=wnej2πnkN

1
STFTはフィルターバンクである場合がありますが、すべてのフィルターバンクがSTFTであるとは限りません。
ビヨンロッシュ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.