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

前回のプログラムを実行して出力される、周波数 440 Hz の三角波と、のこぎり波の波形写真を下に示します。
DAC のオーバーサンプリングおよびフィルタリングによる帯域制限により、のこぎり波の立下り部分の両側に「リンギング」が生じますが、対称的ではなく、後ろ側に多く表れています。

これは、ディジタル・フィルタ部分ではなく、アナログ部分の遅延特性によるものと思われます。 (2 月 23 日追記: これはディジタル・フィルタ部分の特性であることが分かりました。 2 月 23 日付けの記事で説明しています。)
リンギング部分を拡大した波形を下に示します。

STM32F4-Discovery ボードでは、CS43L22 のヘッドフォン・アンプ出力に 51 Ω + 0.022 μF の「ゾーベル・ネットワーク」 (Zobel network) が接続されています。
このゾーベル・ネットワークは、アンプ出力にスピーカーやヘッドフォンなどのインダクタンス成分が主な負荷をつないだ場合に、高い周波数で負荷インピーダンスが大きくなり、アンプの不安定性の原因となることを防ぐためのものです。
ヘッドフォン出力をライン出力として使う場合には、負荷インピーダンスは周波数によらず、ほぼ一定となるので、インダクタンス負荷のためのゾーベル・ネットワークが余計な影響を及ぼしている可能性があります。
このゾーベル・ネットワークで想定されているインダクタンス成分の値を計算してみると、57.222 μH 程度となります。
手持ちの抵抗およびインダクタで、51 Ω + 10 μH + 47 μH のネットワークを作って接続し、広い周波数で定インピーダンスとなるようにして見ましたが、ほとんど差はなく、効果は現れませんでした。
CS43L22 のアナログ・パススルー入力端子から信号を入力し、ヘッドフォン出力から信号を取り出して計測すれば、アナログ回路部分の特性を測定できるはずですが、それは今後の課題とします。
ディジタル・オーディオの特性の測定に良く使われる 997 Hz の正弦波を発生させて、WaveSpectra で観測してみました。
「997」は素数なので、サンプリング周波数 48 kHz との共通の因子は「1」(Hz) しかなく、48 kHz でサンプリングされる正弦波の位相は、1 秒間かけて、計 48000 種類の値を巡ることになります。
この 997 Hz の正弦波の発生は、あらかじめプログラムで 48000 サンプル点分の値を計算して表にしておき、実行時には演算はせず、単に DMA で DAC への転送を繰り返すだけという方法で実現しています。

  • 録音サンプリング周波数 96 kHz
  • FFT データ点数 128 K (131072)
  • Blackman - Harris 窓

という条件で WaveSpectra で観測した結果を下に示します。

PC のオーディオ・インターフェースへの入力が過大になると、ひずみが増加するので、入力レベルは -3 dB 程度とし、結果のプロット時に 997 Hz の基本波のレベルを 0 dB と表示するように正規化しています。
PC の AD 入力は 16 ビットなので、16 ビット DA の評価をするためには精度が足りませんが、高調波成分のレベルを見ると、16 ビット精度を大きく損なうような問題はないと思われます。
下に、997 Hz の基本波の周辺を拡大したプロットを示します。 アベレージ機能で FFT 300 回の平均を表示しています。

特に電源ハムによる変調や、ジッタの影響で「裾」が拡がる傾向は見られず、ほぼ窓関数のメインローブの形がそのまま見えていると思われます。