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

FFTの処理数とデータ数の関係

FFTの処理数は、2のべき乗にする必要がある。 一方、NAudioでデータをキャプチャする場合、キャプチャ時間はms単位でしか設定できない。

というわけで、サンプル数をFFTの処理数に合わせることができない。

キャプチャしたデータ数とFFTの処理数が一致しない場合、方法としては余ったデータを捨てるか、足りないデータを0で埋めるということになる。

いつも参考にしている「C#によるデジタル信号処理プログラミング」という教科書では、0埋めの方法が紹介されている。

どっちがいいのか、実際にMathNetで提供されているFFTを使って実験して確かめてみた。

キャプチャデータ数(A)とFFT処理数(B)の差は、10%程度としてみた。

最初に基準として両者が一致している場合。A=B=8192

信号の周波数は、4kHz。

余ったデータを捨てた場合。A=9011、B=8192

周波数が低い方へずれているように見える。

足りないデータを0埋めした場合。 A=7373、B=8192

周波数が高い方にずれているように見える。

というわけで、あたりまえだけどやっぱりキャプチャしたデータ数とFFTの処理数は一致していないといけないという結果になった。 FFTの表示を見てみると、どちらかというと余ったデータを捨てた方が一致した場合に近い。

今回、10%というかなり大きい差をつけたけど、実際、そこまで大きな差になることはないと思うので、現実に近い値で実験したみた。

サンプルレートを一般的な48kHzとして、8192に近いデータを多めに取る場合、キャプチャ時間を171msにすると8208データとなる。

この場合 A=8208、B=8192

ほぼ一致している時と同じ波形になった。

どの程度の差まで許容できるか不明だけど、実際それほど大きな差にはならないと思うので、現実的にはなるべく一致するような大き目のデータサイズにしてやれば問題なさそう。

コメントを残す

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

CAPTCHA