音声スペクトル表示

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

<<