CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

オーディオディレイ

DSP56001ボードの応用例としてオーディオディレイの実装を考えてみます。これはTMS320C25ボードでも同様なことをやっていてループバックの次に簡単な処理です。

まず一定の長さのデータメモリを用意して終端と先頭が連続するようなリングバッファを構成します。ここに書込みポインタをつかって入力データを書き込むと同時に読み出しポインタから出力データを取り出すようにしておきます。書込みポインタを読出しポインタを一定の距離離しておき、同時にインクリメントすると時間的に遅れた過去データを取り出すことができます。

以下の例では32kWORDのデータメモリを用意して読出しポインタを書込みポインタから16kWORD遅らせておき、サンプリング周期fs=48kHzでポインタ更新すると16384/48kHz=340msの遅延が発生します

実際のコーディングはこのようになりました。DSP56001にはリングバッファを構成するのに便利なモジュロアドレッシングモードが用意されていてアドレスレジスタRnに関連付けされた修飾レジスタMnM-1の値をセットすると実効アドレスが「Mを法」として演算されます。これによってバッファアドレスが0x8000を超えるとラップアラウンドして0x0000に戻ります

ここではYデータメモリ空間の0x0000~0x7FFFにリングバッファを確保しています。ただしDSPリセット後のデフォルトでは0x0100-0x01FFにデータテーブルROMが見えてしまうのでOMR(オペレーションモードレジスタ)のDEビットをクリアしてデータROMをディセーブル、裏にある高速内蔵SRAMが見えるようにしておく必要があります、さらに遅延したままの信号だけを聴いても違いが判らないので、Aレジスタにある原信号とBレジスタにある遅延信号を加算して出力しています。聴覚上の効果はダブリング効果になります。TMS320C25ボードのfs=25kHz、14ビットに対してfs=48kHz、16ビットで高音質になっているはずです