CPU実験室

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

デジタルディレイ

楽器など音声信号に効果を与えるエフェクターとして代表的なものにディレイ、エコーといった時間系の処理がありますが、これをDSP基板で実現してみます。
基本的なエコー処理はこのようなアルゴリズムで示されますが、これはデジタル信号処理のフローそのものなので簡単に実装できそうです
 
イメージ 2
 
まず処理の中心的役割であるディレイ部分を作ってみます。
たとえばサンプリング周波数がfsのとき、データバッファがfs個あれば1秒分のデータを保持できそれをサンプリング間隔ごとにシフトしていけば1秒のディレイをつくれます。
 FIRデジタルフィルタでは時間遅れ要素Z^-1をデータ転送命令DMOVで実現していましたがこれではバッファを全て舐めるのにサンプリング間隔内では処理しきれません。
そこで外部のデータメモリにリングバッファを用意し、そこへの書込みポインタ、読出しポインタを制御することで仮想的なシフトレジスタを構成します。
 
データメモリは32kWORDありますが他の変数でもつかうのできり良く16kWORD。
サンプリング周波数が25kHzなので約0.65秒のディレイを作り出せます
 
イメージ 1
 
書込みポインタを追いかけるように読出しポインタをインクリメントし
0x3FFFでマスクすることで0x4000の剰余系である0x0000~0x3FFFのリングバッファとなります。リングバッファに最初の1周分データが書き込まれるまでは、ゴミデータを読み出して異常音が出ないようにバッファをクリアしておき、割込み待ちの永久ループに入ります