9

scipy.fft時間とともに変化する周波数の振幅をプロットするために、移動ウィンドウを使用して信号を使用しています (ここではを示します。時間は X に、周波数は Y に、振幅は色です)。

ただし、関心のある周波数はごくわずかです (~3、4 周波数のみ)。MemoryErrorFFT では、必要な周波数だけを選択することはできないようです (明らかに、周波数の範囲はアルゴリズムによって決定されるためです)。長いです。

私は何をすべきか ?カスタムのフーリエ変換を使用する必要がありますか?その場合、適切な実装のリンクを歓迎します?またはscipy方法はありますか?


編集

@jfaller の回答の後、Goertzel アルゴリズムを実装する (しようとする) ことにしました。私はこれを思いつきました: https ://gist.github.com/4128537 しかし、それは機能しません(周波数440は表示されません。ピークを気にせず、適切なウィンドウを適用することを気にしませんでした)。何か助けて!? DSPが苦手です。

4

2 に答える 2

8

あなたは本当にGoertzelアルゴリズムの使用を探しています:http://en.wikipedia.org/wiki/Goertzel_algorithm。基本的に、これは単一ポイントでのFFTであり、信号に限られた数の周波数のみが必要な場合に効率的です。ウィキペディアからアルゴリズムを引き離すのに問題がある場合は、pingを返してください。サポートさせていただきます。また、いくつかのリソースをグーグルで検索すると、Pythonで記述されたDTMFデコーダー(タッチトーン電話デコーダー)が存在します。あなたは彼らがそれをどのように行うかをチェックすることができます。

于 2012-11-21T19:37:05.667 に答える