音声スペクトル表示
Osamu Tamura @ Recursion Co., Ltd.
1. 概要
音声帯域(0〜4KHz)の周波数スペクトルをリアルタイム表示します。C言語とアセンブラで開発しました。
2. 回路図
音声をコンデンサマイクなどで取り込み、オペアンプで AD 変換に必要なレベルまで増幅します。この辺りはちょっと面倒なので、アンプ内蔵のマイク SP0103NC3-3 で簡単に済ませました。ゲインがやや不足ですが、赤 LEDで作った電圧源だとマイク出力は 0.8 ±0.1V ぐらい得られるので、AD 変換の基準電圧源 1.1V にちょうど収まります。
本来ならばここで、AD変換前にアンチエイリアシングの低域通過フィルタが必要です。省略しましたが、できれば fc = 4KHz ぐらいの急峻なものを入れてください。
LEDでの電圧源は精度が悪く安定しないので、これも工夫してみてください。
図1. スペクトル表示の回路図
3. プログラム
スペクトル分析には FFT 演算を用いて周波数域へ変換します。CPUクロック 8MHz でサンプリング 8KHz の 10bit AD 変換を行い、16bit 固定小数点 FFT をリアルタイム演算しています。この部分はインタプリタ動作では間に合いませんので、ChaN 氏が公開している FFT 演算ルーチンを改造して使いました。dB 値を得るので √演算を省き、マトリクス LED 表示としたぐらいです。LED表示は
縦軸 利得( -6dB/dot )、 横軸 周波数( 500Hz/dot )
マイク出力は 0.8V 付近が中心となるので、AD変換直後にこの分を減算してDC成分をキャンセルします。main.c のなかで、LEDに合わせての調整が必要です。無音状態でマトリクス LED ができるだけ点灯しない値にします。空いている他の AD ポートに半固定抵抗をつないで、この電圧値を減算すれば調整が楽でしょう。
ソースコード一式 fft-usb.zip (27KB)
リアルタイムの FFT 演算は、かつては DSP でなければ難しい処理でした。昨今の 8bit マイコンの能力の高さには驚かされます。
11 Jun. 2008