• 本当は、田舎に庵を建てて隠遁生活したいけど、先立つものも無いので自宅で..。

【NAudio】FFT処理変更

FFTの処理をする時、データ数が2のべき乗に制限される。 一方、WaveInで入力信号をキャプチャする場合はキャプチャ時間をms単位で指定する。 キャプチャされた信号は、必ずしも2のべき乗にならないので、調整が必要になる。

今まではBuffeMilliseconds = 200ms サンプルレート44100Hzでキャプチャしていたので、データ数は44100 * 0.2 = 8820。 これに近い2のべき乗の数として、FFTでのデータ数を8192としていた。

8820 – 8192 = 628データは捨てていた。 周期性のある入力信号にこの処理を行うと、連続性がなくなるので正確なFFTが行えないと思われる。

というわけで、キャプチャしたデータ数がなるべく8192に近づくように変更してみた。 また、いつもお世話になっている三上直樹著「デジタル信号処理プログラミング」の中では、”0埋め”という、足りないデータを0で埋めるという手法が紹介されている。 

そこで、8192になるべく近く8192より小さいデータをキャプチャするサンプルレートとキャプチャ時間を設定した。

算出したサンプルレートは45511Hz、キャプチャ時間は、180ms。 サンプルレートが44100とか48000とかでなく規格外になるけど、特に問題ないと思う。

この条件でサンプリングするとデータ数は8191となり、1データ足りないけど0埋めする。

修正した場所だけ

1kHzのサイン波をサンプルレート44100Hz、サンプル時間200msでキャプチャし、628データ捨てた時。

1KHzの正弦波をサンプルレート45511Hz、サンプル時間180msでキャプチャし、1データ”0埋め”した時。

明らかに、裾の形状が改善されている。

三上さんの本によると、分析区間を部分的に重複させたり、FFTの出力を正規化したりする手法が紹介されているので、もう少し改善する余地がありそう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA