| デジタルサンプリング方式を今回は模索してみたい。 デジタルサンプリングといっても1ビットサンプリングなので、 要は矩形波を相手に考えるだけでよい。
まず、サンプリング周波数はs13メーターの限界である800Hzを超えた 1KHzの信号を相手にする。 これはS14の場合ではさらに半分と考えてよいだろう。 したがって、入力サンプリング周波数は2KHzで十分である。
さらにこのときに必要なデーター量は1秒間で10KBとなる。
しかし、1秒間データーをメモリしてからそれを再生となると非常にいびつな 波形しか生成できなくなる。 せっかく原信号を忠実に圧縮再生できるデジタルサンプリング方式が 台無しである。
そこで、10Kbのメモリブロックを2つ用意する。 それを交互に入力波形用、出力波形用として利用する。 肝心のプログラム内容は以下のような構造となる。
◎◎◎◎◎◎◎◎◎◎20KHzクロック割り込み。 ↓↓↓↓↓↓↓↓↓↓ ○●●●●●●●●●
○が入力処理 ●が出力処理
まず、20KHzの割り込みを10分割する。つまり、2KHzごとに 1ルーティンが実行されるものとする。 その間の命令ステップ数は4MHzクロックを利用したとしても200ステップあり、 PICが擬似マルチタスク動作を行うには十分なステップ数の余裕となるだろう。
最初の一回だけ入力ルーティンが読み込みを行う。 次に続けて9回出力ルーティンが信号出力を行う。 入力ルーティンも出力ルーティンも実行するたびに 1バイト分アドレスをインクリメントしていく。
ここで、問題となるのはたとえば1秒間の波形データーがすでにあったとしても 出力ルーティンの速度が入力ルーティンの9倍の速度で追い越してしまうということだ。また、電源を入れたばかりの時はメモリ内容が不定になるため、最低でも 1秒間は出力データーが安定しないことである。
前者はある程度の時間を再生したら、9回同じデーターの出力をを繰り返せば、その間に入力の速度が追いつく。
また、後者の問題に対してはプログラム開始時にメモリを初期化してZEROクリアを してしまえば、出力ルーティンが空データーを読んでも出力はLOWのままであるから問題はなくなる。
また、メモリブロックは2つのブロックを交互に使うメビウスリングメモリ 方式で20KBのデーター容量のみで、1秒間の波形データーを保持し、 入力と出力を擬似的に同時に出力することが可能となる。
これで、スピードメーターのクロック数を9倍に逓倍できる。
あとは2分周回路にかけるなりすれば4.5倍のクロックでも9倍のクロックでも 十分なものができるはずである。
ここまでロジックを煮詰めてしえば、案外IC回路だけでもできるかもしれない。
この方法は昔98のサウンドボードUという音源ボードでPCM再生を行う という遊びが流行った時によく、サンプリングレートの設定を間違えてしまい、 スピードと周波数が変わるという現象がおきたことにヒントを得ている。
まぁ、正確には1秒遅れの速度表示だが、出力波形は滑らかなものが期待できるはずである。
このロジックと同じものがアナログな回路で再現ってできないかな? それができれば奇数倍逓倍なんかも普通にできると思います。
こっちの方がメーターの針の動きは確実に滑らかにはなるはず! ただし、計測時間が1秒なので1秒遅れの再現性となりますがね。
ところで、ABS C/Uの出力波形は常にディーティー比は一定ですか? 安定した周波数での場合ですが…
|