DIV5142の統合コントローラ(PICO)を検討する!の巻き 2024.8.29

懸案は色々あれど
自作オーディオでの懸案事項というか、やり残しているものとか、途中でほっぽり出しているものとか、
数えだしたらキリがありませんが、その中の1つがDIV5142の統合コントローラです。

DIV5142自体は4WAYまで対応可能なディジタルチャンネルデバイダーになりますが、遮断特性は最大で-48dB/octです。
これでも十分だとはおもうのですが、さらに突き詰めると、さらに高次のフィルターが必要なことがわかっています。
そこで、PCM5142を2個シリーズでつかうことで、高次まで実現した2WAY用のチャンデバも作りました。

しかし、自身のシステムは3WAY+サブウーハの構成でもあるので、そのままでは使えません。
使えるようにするにはDIV5142を複数枚つかってのシステムになります。まあ、それぞれを個別に
セッテングするようにすればいいのですが、ちょっとスマートではありません。
複数枚のDIV5142を統合的にコントロールできるものが欲しいところでした。

ネックのPICの代替はあれど
しかし、現状つかっているマイコンのPICでは容量的にかなり厳しいです.。最近のPIC18F27Q43になると、
ROM容量も128kBありますから、DIV5142でつかっていたPIC18F26K20(64kB)の倍あります。
であれば、なんとかなりそうではあったのですが、表示にグラフィックディスプレーなどをつかいたいところで、
そうなるとフォントデータを積み込む必要があり、その容量がかなり大きなものになるため難しいところです。

そうした中でRP2040というコントローラをつかったPICOなるものがでてきています。ROM容量も2MBと大きく、
さらに32BitCPUということでかなりの速度も期待できます(ちなみにPIC18Fは8Bitです)。

ちょっと前にPICOをつかったコントローラの企画をスタートしかけたことがありましたが、立ち消えに
なってしまいました。


3年ほどまえにここまで組み立てましたが、立ち消えになってしまいました。

今回はそのリベンジです。
仕切り直しということで、コントローラ基板も一新です。


こちらの基板をつかって統合ソフトの検討開始です。

リベンジで準備!
まずは、H/Wの準備です。統合コントローラについてはこの手半田での基板を使います。
一応320x240のグラフィックもつかえます。グラフィックより文字が沢山表示する目的でつかいます。
DIV5142には2個だけPCM5142を搭載した基板をつかいます。基板上のPICは使いませんから、
部品はかなり省いています。


まずはDIV5142と接続できる形で構成してみました。

いや〜、完全に忘れているなあ〜


プログラムは以前に作成したものをベースにしてと思いましたが、プログラムソースをみても
なにをやっているのか、サッパリわかりません(笑。過去のホームページの記事と付き合わせながら
読み進めてはいますが、なんのこっちゃ〜てな感じです。
やりたいことの概略はホームページにも記載していますが、そこから実際のプログラムに落とすまでの
過程がごっそり抜けています。これが、仕事ならちゃんとしたプログラムの仕様書やらフローチャート等を
記録として残すのでしょうが、そんな面倒なことはやってないですからね〜。

ちなみに、4WAY版のDIV5142を最初に検討し始めたのが今から7年前。7年もたてば忘れているよね?
と自身を慰められそうですが、2WAY版の改良を検討したのが、今からたかだか4年前です。4年前くらいなら
覚えていそうなものですが、自身の中では10年くらい前のイメージになってしまっています。
ほんと、短期記憶が衰えたなあ〜(笑。

ということで、本当に最初から開発を進めるようなイメージになっちゃいそうです。

リンクも切れているなあ〜 2024.8.30

BIQUADフィルターの設計を解説しているページにリンクを張っていましたが、
再度見直そうと思ったら、リンクが切れていまし(下記)。
http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt

そりゃ、今更http://で始まるページなんてないですからね〜。
ということで、再度探しておきました。
AudioEqCookBook.txt
です。今度はリンクでなく、ファイルで保存です。
これでリンク切れはないでしょうが、このHPはいつまで維持できるだろう?

ついでにフィルタに関する備忘録

多段のフィルターを設計するときに必要になるのが、各段のQ値です。
このQ値の計算方法って、ネットで探してもなかなか出てこないのですが、
プログラムを見直して、一応メモをしておきましょう。

バターワースの場合
            1
 Qn= −−−−−−−−−−−−
      2 x cos(((2*n - 1)/4m) x PAI


ここでmはBIQUADの段数で、n=1..m です。

BIQUADは1段あたり-12dB/octになるので、2段だと-24dB/octの特性になります.,
一応計算しておくとm=2なので
 Q1=0.54119
 Q2=1.30656
となります.,Q1xQ2=0.707ですね。

一応18段まで計算しておきました。


これって、PICのときはROM容量が小さかったので、都度計算していましたが、
PICOだと容量は気にする必要はなさそうなので、テーブルで持っておいても良さそうです。
倍精度(8byte)だとしても、2.6kB程度の容量です。

Linkwitz-Rielyの場合
 こちらはQ=0.5で位相特性が優れていると言われるものです。
計算は偶数段のみになりますが、Qn'をバターワース自での計算結果だとすると

2段の場合 Q1=Q2=Q1’
4段の場合 Q1=Q3=Q1’、Q2=Q4=Q2’
6段の場合 Q1=Q4=Q1’、Q2=Q5=Q2’、Q3=Q6=Q3’


というようになります。すなわち半分の段数で計算したバターワースでのQ値の並びを
2度繰り替えす形になります。こうすればQ値は0.5になります。
バターワースの場合はQ値を乗算していくと0.707になりますから、0.707^2=0.5ですからね。
(間違っていたら指摘ください)

このLinkwitz-Rielyについても、テーブルで持たせたほうがいいかもです。
またテーブルはわざわざ12dB/OCT毎にしなくとも、24dB/Oct毎でもいいかもです。

PCM5142の連結は2個か3個か、あるいは4個か?

今回はPCM5142のDAC機能は使わない予定です。すなわち音は出ません。
単なるDSPとしてのみ使います。そのため、音を出すには外付けのDACを使います。
なぜかというと、DAC機能をつかうと、そこにかなりのリソースが消費してしまい、
フィルタの段数が持つことができません。ちなみにDACを使うとなると、192KHzでの
再生ではフィルターの段数は最大7段までです。しかし、DACを使わないと、最大で
12段まで使えます。
 12段まで使えると、減衰量は12*12=144dB/OCTまで稼げます。
必要な減衰量としては200dB/oct程度は欲しいので、できれば18段(216dB/Oct)は
欲しいところです。となると、PCM5142を3個連結してトータル36段として、
HPFに18段、LPFに18段を分配してやればいいことになります。
 ただ、DIV5142基板自体はPCM5142を最大で4個搭載できるので、全部使っても
いいかな〜。そうすれば、トータルで48段になってHPFに24段、LPFに24段分けられ
ます.このときの減衰量は288dB/Octになります。
 しかし216dB/octと288dB/octの違いってわかるのだろうか?

まあ、PCM5142を何個つかうかは、もっと後で考えましょう。
まずは、ちゃんとPICOで動かせるようになることが先決です。


12個のBIQUADフィルターを並べた場合です。


これでもサイクル数は255で、256未満なので192kHzで動作可能です。


だいぶ思い出してきました 2024.8.31

12段のBIQUADを並べたフィルターを構成して、フィルターの遮断周波数テーブルを変えて
みたのだけど、なぜかうまく動きません。で、過去のプログラムを見直して、テーブル変更した
後に、それを有効にする(DSPに受け渡す)ためのスイッチ動作が必要なことを忘れていました。
で、スイッチをかけると、無事に設定した定数でフィルターが動くようになりました。
いや〜、ほんとに色々と忘れています。でも、だいぶ思い出してきました。

試運転は12段BIQUADでのfc=1kHzでのLPFとHPFの特性です。
12段ですから遮断特性は144dB/octです。1kHzから200Hz離れると
ほとんど減衰してしまうことがわかります。

HPF出力



f=800Hz
(fc=1000Hz)


LPF出力
HPF出力



f=900Hz
(fc=1000Hz)


LPF出力
HPF出力



f=1000Hz
(fc=1000Hz)
ちょうど-3dB


LPF出力
HPF出力



f=1100Hz
(fc=1000Hz)


LPF出力
HPF出力



f=1200Hz
(fc=1000Hz)


LPF出力

192kHzに拘らなければ

192kHzでの再生に拘らなければ、もっとBIQUADの段数を増やすことができます。
実際として、いつも聞いているときは44.1kHzあるいは48kHzなので、それに限定させるなら
どこまで段数を増やせるか試してみましょう。

ということで、現状の12段の倍の24段にしてみました。


BIQUADを24段まで連結しました。

BUILD(実際の命令コードにコンパイル)してみたときのリソースは下記になりました.
フィルターの係数WORDは49%なので、まだまだ余裕はあります。
肝心のCYCLESは495なので96kHzの限界と思われる512未満を満たしているので、
96kHzは再生できそうです。ただ、inst(命令コード)は97%になっているので、これが限界の
感じです。

これならば96kHzまでは動きそうです.

一応、48kHz、96kHzの入力で動くかどうか確認しましたが、問題なく動作しました。
試しに192kHzでもやってみましたが、流石にうんともすんとも言いませんでした(笑。


BIQUAD28段でも96kHzまでは問題なく動くようです。

BIQUADが24段まで連結できるなら、BPFにしても144dB/Octの減衰率で
DIV5142が1枚で4WAYまで対応できそうです。2WAYにするなら288dB/Octまで
減衰率を上げることができそうです。

サブウーハ用だと
今のシステムが3WAY+サブウーハであることを考えて、
サブウーハ用の構成も試してみました。サブウーハなので左右を一旦ミキシングしたのちに
24段のBIQUADに接続します。
この構成でコンパイルしてみたところ、CYCLESは256になりました。96kHz(512未満のはず)
は余裕ですが、192kHz(256未満)はギリギリ無理なようです。
まあ、そこまで欲張らなくてもいいですね。

サブウーハ用の構成です。

CYCLESが256になっているので、96kHzが限界でしょう。

サブウーハは減衰率をあげないと、ボーカルなどが漏れてきてしまいます。
いまつかっているサブウーハはアナログのLPFなので、おそらく次数は12〜24dB/oct
程度なので、どうしてもポートから漏れてきて欲しくない音もでてきます。
しかし、288dB/octまで減衰率を上げられるなら、重低音のみの再生が可能でしょう。


(つづくかな?)