STM8S-Discovery (11)

今回からは、TSP (Time Stretched Pulse) 法による DAC 出力の周波数特性の測定を話題にしたいと思います。 今回は PCM1716E について測定します。
私が TSP 法を知ったのは、他の目的で検索をしていて、たどり着いた、一庵さんの Web サイト「http://homepage3.nifty.com/ichian/index.htm」の中のベージ

http://homepage3.nifty.com/ichian/analog/spectrum/wavespectra.htm

を見てからです。
上記ベージは、ページ内で完結して詳しく説明してあると言うよりも、多数の外部リンクを紹介してあると言ったスタイルになっています。
TSP 法の詳しい説明については、各リンク先を読んでいただくと良いのですが、efu さんの簡潔な説明を上記ベージから引用します。

  • 2009年 5月10日(日)23時08分21秒にefuさんから教えてもらった非常に簡明でわかりやすい説明。

しくみを簡単に説明すると、要はインパルス応答を連続的に見ているということです。
普通にインパルスを1波だけ加えて、その応答をフーリエ変換すると周波数特性が得られますね。
それをサンプル長で繰り返すと連続的に描画できます。
ただインパルスではパワーが小さいので、TSPの手法でスイープやノイズにして使っているということです。
インパルスをフーリエ変換して逆変換すると、当然ですが元のインパルスへ戻ります。
逆変換の前に、スペクトルの位相だけを連続的に(周波数の2乗で)変化させてから逆変換するとスイープになります。
<以下省略>

http://homepage3.nifty.com/ichian/analog/spectrum/wavespectra.htm

TSP 法については項を改めて別の記事としたいと思っていますが、TSP 法を利用した測定については、WaveGene Ver 1.40 付属の文書を良く読めば、特に難しくもなく実現できます。
簡単に説明すると

  • Ver 1.40 から加わった、ユーザ定義波形の再生機能を利用し、efu さんがあらかじめ作成しておいてくれた TSP 波形をロードしておく
  • WaveGene で連続ループ再生したオーディオ信号を被測定回路に入力する
  • その出力を、矩形窓に設定した WaveSpectra で観測する

だけのことです。
PC 側のオーディオ入力/出力デバイスは同じクロックで駆動され、同期が取れている必要があります。 (片方がオンボードのコーデックで、もう片方が USB オーディオ・インターフェースのような組み合わせはダメ)
さらに、入出力のサンプリング周波数は同一にし、使用する TSP 波形のサンプルデータ数と、WaveSpectra の FFT のサンプルデータ数も揃える必要があります。
本来は、そのような制限がありますが、ここでは、マイコンに接続した DAC 出力の周波数特性を見るために、TSP 波形の再生デバイスと、WaveSpectra の録音デバイスが全く別の装置である構成で測定を行います。
別々のデバイスなので、位相まできっちりと合わせるのは困難ですが、せめて周波数を合わせるために、STM8S-Discovery の水晶発振回路にトリマ・コンデンサを付加し、手動で合わせこむことにしました。
といっても、直接に周波数を測るのではなく、WaveSpectra での観測波形を見ながらセットする方法です。
周波数が合っていないと、スペクトルの波形が時間的に変動しますから、変動の量が一番小さくなるようにトリマ・コンデンサを調節します。
DAC 出力の、ナイキスト周波数以上の帯域での特性を見たいので、DAC の fs に比べてオーバーサンプリングになる条件で PC 側の WaveSpectra を動作させます。
私の PC のコーデックでは、96 kHz サンプリングが上限なので、マイコン側のサンプリング周波数を 24 kHz (768fs モード) に落として、4x オーバーサンプリングとし、DAC の fs の 2 倍の 48 kHz までを観測します。
この場合、WaveGene は TSP 波形の再生ではなく、SD カードに書き込む WAVE ファイルを作成するためのツールとして使います。
具体的には、

  • 32768 サンプルの TSP 波形をユーザ波形としてロードする (ファイル名「FLATSWEEP032768.WAV」)
  • 再生デバイスの設定を「24 kHz サンプリング、16 ビット、ステレオ」にする
  • 適当な再生秒数 (たとえば 60秒) に設定し、「WAVE ファイルに出力」する

ここで、サンプリング周波数 24000 はドロップ・ダウン・リストにないので、数値を直接書き込みます。 実際には、STM8SDP プログラムではサンプリング周波数の設定を無視するので、他の値でも実用上の問題はありません。
この WAVE ファイルを納めた SD カードを STM8SDP で再生させ、DAC 出力を PC ライン入力に直結して、

  • 96 kHz サンプリング、16 ビット、ステレオ、FFT サンプルデータ数 131072、矩形窓

に設定した WaveSpectra で観測します。
周波数軸をリニアスケールとし、48 kHz までの帯域を表示させた結果を下に示します。

約 1 分間のピーク値を表示しています。
16 〜 40 kHz 付近の線状のスペクトル成分は主に外来ノイズによるもので、信号成分ではありません。
通過帯域内はフラットな特性であり、DACナイキスト周波数 12 kHz 以上の成分については、オーバーサンプリング・ディジタル・フィルタにより十分な減衰が与えられていることが分かります。
PCM1716E のデータシートでは、ディジタル・フィルタの特性として、0.5fs 〜 1.5fs の帯域ではレベルが -100 dB 程度、1.5fs 〜 2.5 fs の帯域では -80 dB 程度になっているグラフが掲載されています。
WaveSpectra の結果を見ると、約 30 kHz 以上の帯域が持ち上がっていて、ディジタル・フィルタの特性を表しているように見えますが、レベルが約 -60 dB と大きすぎるので、別の原因によるものかも知れません。
通過帯域内の細かな特性を見るために、WaveSpectra の設定を

  • サンプリング周波数 48 kHz、FFT サンプルデータ数 65536、+-1 dB レンジ

に変更して観測したのが次のグラフです。

平均化機能を使い、300 回の平均を取ったもので、「Ave」を表す青色のプロットになっています。
0.1 dB 以下の幅のリプルが見えていますが、これは PC 側の ADC の特性が見えているものと思われます。
PCM1716E のデータシートでは、通過帯域内の特性として、0.001 dB 程度のリプルのグラフが掲載されていますから、DAC のリプルは、このスケールでは見えないはずです。
高域に向かってゲインが下がっているのは、次回で触れますが、0 次ホールドによるアパーチャ効果によるものです。
オーディオ入力データは 8xオーバーサンプリング・ディジタル・フィルタによりアップ・サンプルされ、DAC は 8 倍のレートで更新されますが、次の更新までは同じ値を保持し続けるので、0 次ホールドされることに変わりはありません。
その影響は、ナイキスト周波数 (0.5fs) で

sinc(0.5/8) = sin(π/16)/(π/16) = 0.9936 = -0.056 [dB]

の程度です。
測定結果は、この値より大きいようですが、過剰分は PC 側の ADC の特性によるものかも知れません。
次回は BU9480F の特性に触れます。