STM32F4-Discovery 用FM音源プログラム -- TGSTM32F4 (5)

2 月 19 日付けの記事で、DAC 出力の左右非対称なリンギングは、アナログ部分の遅延特性によるものではないかと書きましたが、実際には、ディジタル・フィルタ部分で、あのような特性が生じていることが分かりました。
CS43L22 DAC のサンプリング周波数を 8 kHz とし、インパルス波形、つまり、1 サンプルだけ 0x7fff で、他の部分は 0x0000 としたものを出力し、PC で 96 kHz サンプリングで「録音」した波形を波形編集ソフトで表示したものを下に示します。

この、前に詰まって、後に長く尾を引くインパルス応答の概形は、DAC のサンプリング周波数を変えても相似なものになります。
この例では、8 kHz サンプリングですから、リンギングの周波数は約 4 kHz で、アナログ部分の遅延特性が問題になるような周波数ではありません。
したがって、この特性はディジタル・フィルタ部分の特性そのものと考えるほかはありません。
このインパルス応答に Blackman 窓を掛け、64 K (65536) ポイントの FFT を計算した結果のグラフを下に示します。

0 〜 4 kHz までが通過域で、平坦な特性となっています。
それより高い周波数は阻止域で、ノイズ成分が見られますが、特に、36 kHz 付近に -10 dB を上回るレベルのスペクトルの鋭いピークが見られます。
これは、ヘッドフォン・アンプ部の負電源を生成するチャージ・ポンプの駆動周波数だと思われます。
CS43L22 では、

(64 × fs) / (N + 2)

の周波数でチャージ・ポンプのスイッチングが行われ、この式の「N」の値は「Charge Pump Frequency」レジスタ (アドレス 34h) に設定されており、 I2C 経由で書き換えることが可能です。
リセット後のデフォルト値は N = 5 となっており、値を変更していないので、

(64 × 8 [kHz]) / (5 + 2) = 512 [kHz] / 7 = 73.143 [kHz]

となり、この半分の 36.571 kHz が見えているものと思われます。
FFT で計算した、通過域のゲインと位相特性を下に示します。

位相は、通過域内でほぼゼロになるように調節した相対的な値になっています。
遷移域に入る手前の周波数から直線位相から離れ、位相遅れが多くなっていきます。
おそらく、通常よく使われる、全周波数域で完全な直線位相特性を持ち、インパルス応答が左右対称となるディジタル・フィルタとは違って、CS43L22 のフィルタは、一定遅延 (直線位相) の制約条件を通過域内にのみ適用し、他の領域では制約をなくして設計することで、群遅延の絶対値を小さくしているものと思われます。