ΔΣ変調とPIC16F88とADPCMと
くまがいさんのあな。のコメント
にインスパイヤされて、情報収集中。
ここでの音声は1つにつき2秒くらいあればよさそうなので、16bitPCMを4bitADPCMに圧縮して、PIC16F88のプログラムエリアに書き込んで8kHzで再生するようにすれば、PICに電源とスピーカとスイッチを接続するだけというお気楽構成な再生基板ができそうです。PIC16F88にはPWM出力もあるのですが、せっかくなので流行りの1ビット⊿Σ変調にしたいところ。
⊿Σ変調については、ΔΣ変調の部屋に詳しい解説があるので、詳細はリンク先を読んでいただくとして、結局のところ
という処理を実装すればよさげです。ここで、A, B, 入力値, 出力値はそれぞれ入力値のとりうる範囲を超えないように飽和演算をする必要はありますが。
ADPCMについては、P/ECE研究記録~ADPCMの仕組みにYM2608方式とP/ECE方式の丁寧な解説があります。P/ECE方式で実装するのが簡単そうです。
PIC16F88には4kワードx14bitのプログラムエリアがあり、PIC16F84とは違ってプログラムエリアの内容をダイレクトに読み書きできる(PIC16F88 PDF, EXAMPLE 3-3: FLASH PROGRAM READ参照)ので、4bit ADPCMを利用すれば、4k×14/4/8kHz = 1.75秒くらいは再生できます。叫び声程度ならこれでOKでしょう。
ADPCMのデコード処理とΔΣ変調するためにオーバーサンプリングするコストがどの程度になるかが気になるところですが。
とりあえず、今日はここまで。
ささお>
音声のみ制御可はプログラムを書くのは楽しそうですが、自分で"喋って"操作するのにはちょっと勇気が...。
tokoya>
音声をROMに焼いてボタンで再生する基板を作って、それで操作というのはどうでしょう?(笑)。
くま@G>
その可能性を忘れていました:-)>声優声が流行ったり(汗<肉声に限るとか補助ルールがひつようそうだ。
音声のみ制御可はプログラムを書くのは楽しそうですが、自分で"喋って"操作するのにはちょっと勇気が...。
tokoya>
音声をROMに焼いてボタンで再生する基板を作って、それで操作というのはどうでしょう?(笑)。
くま@G>
その可能性を忘れていました:-)>声優声が流行ったり(汗<肉声に限るとか補助ルールがひつようそうだ。
にインスパイヤされて、情報収集中。
ここでの音声は1つにつき2秒くらいあればよさそうなので、16bitPCMを4bitADPCMに圧縮して、PIC16F88のプログラムエリアに書き込んで8kHzで再生するようにすれば、PICに電源とスピーカとスイッチを接続するだけというお気楽構成な再生基板ができそうです。PIC16F88にはPWM出力もあるのですが、せっかくなので流行りの1ビット⊿Σ変調にしたいところ。
A = (入力値) - (1ステップ前の)(出力値)
B = A + (1ステップ前の)B
(出力値) = (Bが閾値以上なら 入力値がとりうる値の最大値、未満なら 最小値)
B = A + (1ステップ前の)B
(出力値) = (Bが閾値以上なら 入力値がとりうる値の最大値、未満なら 最小値)
という処理を実装すればよさげです。ここで、A, B, 入力値, 出力値はそれぞれ入力値のとりうる範囲を超えないように飽和演算をする必要はありますが。
ADPCMのデコード処理とΔΣ変調するためにオーバーサンプリングするコストがどの程度になるかが気になるところですが。
とりあえず、今日はここまで。
コメント
コメントする
この記事のトラックバックURL
http://tmp.junkbox.info/tb.php/18
トラックバック
TOP PAGE △