前回Lチカに成功したPICですが、その後調査を続けてdsPICでエフェクターを作れそう・・・というところまで来ました。
が、実験に使ったdsPIC30F2012はRAMが1KBしかないということに開発途中で気づき、リバーブを作りたくても作れなかった、というお話です。
リバーブにはいくつかのアルゴリズムがありますが、今回はシュレーダー(schroeder)のリバーブを試みました。
これにはIIRコムフィルタが4つとオールパスフィルタ2つが使われています。
IIRコムフィルタはおよそ50msの遅延をもたせるように設計されています。
16bit/Fs28KHzとした場合、これを実現するには、16bitの要素数約1500の配列が必要になります。(1サンプル34μsなので50ms/34μs=1470)
つまり、これひとつだけでメモリ消費が3KBになります。
これを4つ用意すると12KB。
ということで、SRAMの少ないdsPIC30シリーズでは結構厳しそうです。
DSPIC33シリーズならばデータメモリが16KB以上のものもあるので頑張ればできるかもしれません。
が、ヒープやスタック、ニアとファーなんかを考えるとそれでも足りないのかもしれません。
やる気が続けばhttps://akizukidenshi.com/catalog/g/gI-08458/を使って挑戦してみようと思います。
※RAMが豊富に必要ではない歪み系やモジュレーション系なら問題なく作れるはずです。
供養のために上限の遅延数400で作った、遅延15msのショートディレイの画像を貼っておきます。
参考書:dsPIC基盤で始めるディジタル信号処理