発症検出はかなり新しいです。私はそれについていくつかの論文を読み、時間領域のみで作業する場合、多数の誤検知/陰性が発生する可能性があり、一般に両方の時間領域で作業することをお勧めします。および周波数領域または周波数領域。
これに関しては、スペクトルエネルギーまたはFFTビンからの結果を使用して音符の開始を決定する方法に問題があるため、少し混乱しています。なぜなら、振幅の鋭いピークによって表される開始に注意しないのですか?
誰かがこれについて私に教えてもらえますか?ありがとうございました!
発症検出はかなり新しいです。私はそれについていくつかの論文を読み、時間領域のみで作業する場合、多数の誤検知/陰性が発生する可能性があり、一般に両方の時間領域で作業することをお勧めします。および周波数領域または周波数領域。
これに関しては、スペクトルエネルギーまたはFFTビンからの結果を使用して音符の開始を決定する方法に問題があるため、少し混乱しています。なぜなら、振幅の鋭いピークによって表される開始に注意しないのですか?
誰かがこれについて私に教えてもらえますか?ありがとうございました!
これは、音符の開始について考える最も簡単な方法です。
音楽信号をフラットな一定の信号と考えてください。開始が発生すると、信号の大きな急速な変化(正または負のピーク)としてそれを見る
これが周波数ドメインで意味すること:
定数信号の FT は、まあ、定数です! そしてフラット
開始イベントが発生すると、スペクトル コンテンツが急速に増加します。
「それって実は発症のピークのことでしょ?」と思われるかもしれませんが。全くない。実際には開始のピークではなく、信号の立ち上がりエッジに関心があります。信号が急激に増加すると、高周波成分が増加します。
これを行う 1 つの方法は、スペクトル差関数を使用することです。
1) 時間領域信号を取り、重なり合うストリップに分割します (通常は 50% 重なります)。
2) ハミング/ハン ウィンドウを適用します (これは、スペクトルの汚れを減らすためです) (信号をウィンドウに分割することは、パルスを乗算するようなものであり、周波数領域では、信号を sinc 関数で畳み込むようなものです)。
3) 連続する 2 つのウィンドウに FFT アルゴリズムを適用する
4) 各 DFT ビンについて、Xn ビンと Xn-1 ビンの差を計算します。それが負の場合は、結果をゼロ 2 乗に設定し、すべての th ビンを合計します。
5) 信号の終わりまで繰り返します。
6) 中央値のしきい値を使用して信号のピークを探すと、開始時間が表示されます!
ソース:
http://bingweb.binghamton.edu/~ahess2/Onset_Detection_Nov302011.pdf
および http://www.elec.qmul.ac.uk/people/juan/Documents/Bello-TSAP-2005.pdf
「なぜなら、ノートの始まりは振幅の鋭いピークによって表されていませんか?」A: いつもではありません。パーカッシブな楽器 (ピアノを含む) ではこれは当てはまりますが、バイオリンやフルートなどでは、急激な振幅の増加を伴わずに周波数が変化するにつれて、ノートが互いに「滑り込む」ことがよくあります。ピアノのオンセット検出のように単一の楽器に固執する場合は可能です。一般化された発症検出は、はるかに難しい問題です。オンセット検出に使用されているプリミティブ機能は、約 12 種類あります。それらをコーディングしたら、それらをどのように使用するのが最善かを決定する必要があります。
特定の周波数での振幅の急激な違いを、音の発生の疑いとして見ることができます。たとえば、フルートが G5 の演奏から C の演奏に切り替わると、784 Hz 付近でスペクトルの振幅が急激に低下します。
どの周波数を調べればよいかわからない場合は、FFT ベクトルの大きさから、ある時間ウィンドウでのすべての周波数の振幅が得られます (時間ウィンドウの長さに応じた分解能で)。周波数または周波数の束を選択し、2 つの異なる時間ウィンドウの 2 つの FFT を比較します。これにより、2 つの時間枠の間のどこかで音の開始または変化の可能性の推定の一部として使用できるものが得られる可能性があります。ウィンドウをスライドさせたり、ウィンドウの位置を時間的に逐次的に近似したりすることで、疑わしい音の開始やその他の音の重大な変化の時間を絞り込むことができます。