1

支配的な周波数を含む 2 つの音を取り上げて、「これはこれよりも高い」と言いたいのです。FFT を実行し、それぞれの振幅が最大の周波数を見つけて比較することができます。私は特定のタスクを持っているので、もっと単純なアルゴリズムがあるのではないかと思っています。

音は多くの周波数で非常に汚れていますが、明確なドミナント ピッチが含まれています。それらは完全に生成された正弦波ではありません。

4

3 に答える 3

1

サウンドが非常に汚れていることを考えると、FFT の出力を使用してアルゴリズムの開発を開始することをお勧めします。問題を診断するのがはるかに簡単になるからです。それが機能していることに満足したら、最適化/簡素化について考えることができます。

As a rule of thumb when developing this kind of numeric algorithm, I always try to operate first in the most relevant domain (in this case you're interested in frequencies, so analyse in frequency space) at the start, and once everything is behaving itself consider shortcuts/optimisations. That way you can test the latter solution against the best-performing former.

于 2012-07-11T11:00:30.833 に答える
0

ゼロクロッシングのカウント(あなたの場合は明らかに機能しません)から非常に複雑なアルゴリズムまで、さまざまなピッチ検出方法があります。

周波数領域の方法が最も適切に思えますが、「FFT を取る」ほど単純ではありません。データのノイズが非常に多い場合、支配的な周波数と見なされる周波数よりも高いスプリアス ピークが発生する可能性があります。1 つの解決策は、信号のウィンドウ オーバーラップ セグメントを使用し、STFT を実行して、結果を平均化することです。しかし、これにはさらに疑問が生じます。窓はどのくらいの大きさにすべきでしょうか? この場合、それらの支配的なピークがどれだけ離れていると予想されるか、記録の長さなどによって異なります。 、すべての FFT ウィンドウを一緒に平均化するよりも複雑なことを行う必要があります)。

別のアプローチは、YIN などの時間領域法です。

http://recherche.ircam.fr/equipes/pcm/cheveign/pss/2002_JASA_YIN.pdf

ウィキペディアでは、さらにいくつかの方法について説明しています。

http://en.wikipedia.org/wiki/Pitch_detection_algorithm

この本の第 9 章では、さらにいくつかの方法を検討することもできます。

http://www.amazon.com/DAFX-Digital-Udo-ouml-lzer/dp/0471490784

yin の matlab ソースコードは、その本の第 9 章から入手できます。

http://www2.hsu-hh.de/ant/dafx2002/DAFX_Book_Page_2nd_edition/matlab.html

于 2012-07-11T18:38:14.577 に答える
0

一般的なケースでは、適切なピッチ検出/推定には、通常、単純なアルゴリズムではなく、FFT ピークを調べるよりも高度なアルゴリズムが必要です。

于 2012-07-11T16:40:41.360 に答える