2021年2月13日土曜日

STM32でDDCを作ろう! DSDの曲頭でプチッノイズの原因と対策

告知です.
コミケ99にて当社のDDC/DACを頒布いたします.
  日付   2021年12月31日(金) 東地区 テ-40b  東5ホール
  サークル名    bangflat
コミケにお越しの際はお立ち寄りいただけますとありがたいです.
商品紹介ページを作りました.

ーーーー
STM32でDDCを作ろう!

DDCのfirmwareを開発中です.開発中というよりも、熟成中というべきかな.

いま取り組んでいるのは、例えばサンプリング周波数を切り替えたときに生じるプチッノイズをmutingするような、重箱の隅の問題を処理しているところです.まぁこういう傍流の問題が得てして最終段階で大問題になってしまうものです.

先日、ありゃりゃ~っと基板改版が必要になってしまった件も重箱の隅つつきノイズ問題でした.
なにが起きたのかというと、、、
 ・12V 5AのACアダプタを使うと無問題
 ・12V 1A程度の小型ACアダプタを使うとブツブツブツとノイズが生じる
という問題でした.
原因は、PCB上の12Vラインに10000uFの電解コンを載せています.巨大Cなので電源オン時に突入電流がそれなりに流れます.非力なACアダプタだと、突入電流を異常と感知して保護回路が発狂的に働き、12Vが周期的に断続する謎のモードに入ってしまい、音声にブツブツ音が出る.(ACアダプタ次第でそうなることがあるということ)
対策は、12VにNTCサーミスタを直列しました.プリント基板の改版が必要です.fuckだなぁ.

------
今回の話題は、DSD再生の先頭で生じるプチッノイズです.ますます重箱の隅へ.

てか、そんなの外付けmuting回路でブロックせよと言いたい人多数と思いますが、部品代をかけたくないし、muting回路が音質を損ねるリスクを負いたくないです.

なので、てってーてきな原因究明です.どうしてDSDに限りプチッノイズが生じるのか?

状況はこのオシロ画像で説明できます.
 ① USB packetが到来する前
 ①②の境界    USB packetの開始時刻
 ② USB packetが来てるが、DSDなのにPCM ZEROが来てる
 ③ 80mSecぐらい遅れてDSD packetが来はじめる DoP formatで来る)
厄介なのは②です.
DSD再生なのだからpacketの先頭からDSD ZEROが来るべきですがそうなってません.なので、楽曲再生の先頭で一旦はPCMで走り始めるが、80mSec後にDSDに切り替えるのでプチッノイズが生じる.ざっとそんな様相です.
DSD再生なのに先頭にPCM0を引っ付けてる奴は誰なのか?
可能性は、
1)win10のUAC2デバドラ
2)winアプリ TuneBrowzer
3)winアプリ foobar2000
これらの完全なる切り分けは出来ていませんが、PCM0の時間長がアプリによって異なるのでアプリのせいかなと少し思います.でもUAC2デバドラの起動制約の可能性も払しょくできていません.アプリがUAC2をopen()した時点でデフォルトでPCM0になってたりするのかなと.深追いしようが無いので放置.

事情はさらに複雑でして、AK4495の自動mute機能も一枚かんでいるんです.
AK4495 DSD modeには、dataがall 1だったりall 0だったりすると自動的にmuteになる機能があります.ただしその機能を使ってもプチッノイズを消せません.muteに入るまでに3000bitぐらいかかるからです.いろいろな試行錯誤をしましたけど、PCM0が出ているときにAK4495をDSD modeに叩き込むとResetなど何をやってもプチッノイズを消せませんでした.

前回投稿で書いたように、AK4495へ供給するBCKやMCLKを止める荒業はかえって被害を大きくします.AK4495がpower saveに入ってしまい、復帰時にボコッ音を出すからです.

PCM modeでは、AK4495にword境界を正しく認識させる必要がありますから、上の写真の①の時刻にあらかじめAK4495をPCMに設定しておき、packet到来を待ちます.

ところがDSD modeでは、word境界はカンケーないので、DSD dataが始まってから無造作にAK4495をDSDに設定しても無問題です.なおで③の時刻に入ってからAK4495をDSDに設定するようにシーケンスを変更しました.

これでDSDのプチッノイズが無くなりました.めでたしめでたし.2日悩んだけど.

かしこ

ーーーーーー
追記・続報
volumeをさらに上げると小さいけどプチッノイズがまだ出てる.
カギはこの図にあるとおり、レジスタのRSTNを使ってあたかも「強制MUTE」するのがAK4495の作法であるようです.いままでわたしはSoft MuteやVolume機能をどうやって使いこなすかに腐心していたのですが、その方向は誤りで、RSTNを使うのが正解ということです.
上で「power saveに入ってしまう困った」と書いた件については、このRSTNはpower saveに叩き込んだりしません.それどころか、レジスタ設定をオール初期化もしません.なのでRESETと命名するよりもPAUSEが適切かなと思わんでもない.
ちなみに、ガチでRESETするには、PDNという外部pinを使います.こちらを使うとレジスタは初期化&power down入りするようです.なにせ命名もPDですから.

0 件のコメント:

コメントを投稿