「サンプリング定理」のひみつ

16/01/04初稿

 (PCMデジタルオーディオにおける)サンプリング定理のリクツは一応納得したつもりです。
 でも、なかなかスッキリ腑に落ちるカンジにはならないですよね。きっと具体的にイメージできないからでしょう。

 そこで、PCMデジタルデータがどのようにDACチップでアナログ波形に「再構築=リコンストラクション」されるのか、サンプリング定理に基づいたシミュレーションによる“見える化”で追ってみたいと思います。
 CDフォーマットである44.1kHzを例にします。

 波形表示には≪Wavosaur x64 1.1.0.0≫を用いましたが、説明に適した波形を描くためデータはいろいろ弄っています。ファイル名などは無視してください。
 また、「サンプリング周波数44.1kHzでは実際には22.05kHzは記録再生できない」といった実事情は説明簡素化のため無視しています。


■1周期に数個のサンプルから連続波形を再現するプロセスを体験する

 たとえ1周期に2~3点ほどしかサンプルがなかったとしても、サンプリング定理によれば「完全に復元される」ハズです。
 その具体例を44.1kHzサンプリングにおける14.7Hzのサイン波で見てみたいと思います。44.1kHzの1/3の周波数ですので、1周期にちょうど3個のサンプルがあるPCMデータになっています。レベルはドンツキを避けるため-3dBにて。
 マイナスピークにサンプルポイントを合わせるため(極端な例にするため)、開始を30°ズラして≪WaveGene 1.50≫で生成したものです。

 以下にふたつの図を並べます。
 上図は、14.7kHz/-3dBサイン波を示すデジタルデータです。デジタルですので当然情報は“点”しかありません。
 が、サンプリング定理上「ナイキスト以上の周波数成分はない」という条件が必ず付きますので、その具体的イメージを添えたのが下図です。22.05kHz/0dBのサイン波=サンプリング周波数44.1kHzで表現できる最高の周波数の図となります。

14700Hzの点と220500サイン波

 DACチップは上図の離散サンプル間をつないで波形を復元します。「自然界に存在し得るなめらかな波として」なのは言うまでもありません。
 そのままだとどんな線でも引けてしまいますが、「下図以上に急峻な変化はできない」という条件が付くワケです。
 さらに、最大振幅が0dB以下という条件もあります。

 その条件で上図の点を線で結ぶとどうなるでしょう?


 どんなに工夫しても「1周期に3個のサンプルがある14.7kHzのサイン波」になっちゃうハズです。
 ピークもサンプル値に拘ってはいられません。プラス側はサンプル値としては最大-9dBしかないのに-3dBに頂点を持っていかざるを得ないですよね(TruePeak)。

14700Hzの点・サイン波重ね

 ということで、1周期に3個しかないサンプルからサイン波が再現できました。3サンプルポイントが時間軸上ズレている場合や1周期のサンプルが整数個ではない場合は、応用編としてイメージできると思います。
 そして、サイン波が復元できるということはいろんな波形が復元できるということです。
 なお、本例は人工の単独サイン波ですが、自然音の場合も、「AD変換する前にナイキスト以上の周波数はLPFでカット」がPCMの前提ですから、「22.05kHzサイン波以上に急峻な成分なし」という条件はやはり成立します。

 これが「サンプリング定理」によるリコンストラクションです。


■DACチップでは44.1kHzの離散データを如何に連続アナログ値に復元するか

 要するに、上で“脳内シミュレーション”したのと同じことがDACチップ内ではデジタル演算で行われているのです(正確に言えばDACチップ外のアナログポストフィルタも含めてですが)。

 PCMデジタルデータをサンプリング定理に基づいてアナログ値に戻す作業=リコンストラクションフィルタの前段(というか大半)を担うのが「オーバーサンプリングデジタルフィルタ(以下OSDFと略)」です。PCでやる時はアップサンプリングと呼ばれる動作です。
 これは、あるサンプルの周辺サンプルを参照することによって、あるべき中間サンプル値を算出していくものです。上で点を繋ぐ線を想像した時、きっと周りのサンプルを参照しましたよね。DACチップ内ではそれを同じことをデジタル回路がOSDFとしてやっているのです。参照する周辺サンプル数が多い(Tap数が多い)ほど再現性が高くなることもイメージできると思います。

 ということで、次に、DACチップ内でどのようにリコンストラクションが行われているか、PCのアップサンプリングによるシミュレーションで可視化してみます。

 例は上と同じサンプルレート44.1kHzの14.7kHzサイン波の復元です。
 1周期に3個しかない点(サンプル)から14.7kHzのサイン波が再現されるプロセス、となります。

・何もしない(NOS-DAC状態)
 ところで、3個しかないサンプルを何もしないでアナログ化するとどうなるでしょう?
 あるサンプル値から次のサンプル値まではデータがない状態であり、未来のサンプル値がどうなるかは判らないのですから、DACチップとしてはサンプル値が変化するまで同じ電圧(電流)値を出力キープするしかありません。
 これを「零次ホールド(Zero Order Hold)」といいます(*)。

*:http://ednjapan.com/edn/articles/0607/01/news010.html

 再現すべきサイン波と重なったところが上でも示したサンプルポイントです(1周期に3個)。

14700Hz-3dB:零次ホールド:サイン波重ね

 全然サイン波じゃないですよね(笑)。
 マジかよ~と思いますが、OSDFかけないと実際こうなります。
 OSDFじゃなかった時代は、DACチップからのこういう出力波形をアナログフィルタでリコンストラクションしてたってことですよね? 確かに音質よくするのは大変そうです。

・OSDF(一般的なDACスペックの8倍まで)
 OSDFを≪foobar2000 1.3.8≫のアップサンプリングでシミュレートしてみます。リサンプラには≪SoX Resamlper 0.8.3≫を用いました。
 「Phase response(位相応答)」パラメータを変えると結果は大きく変わりますが、本稿ではその事情は無視し、主旨説明のために解りやすい50%(linear)としています。左記を含め、デフォルト設定のままです。

 上図が2倍、中図が4倍、下図が8倍です。

14700Hz-3dB:x2x4x8:サイン波重ね

 8倍でだいぶサイン波っぽくなりましたね。オリジナルサンプルは(一番最初の図の通り)3個しかないのに大したものです(笑)。
 8倍でもまだカクカクしていますが、これは、ざっくり「8倍(44.1x8=352.8kHz)のナイキストである176.4kHz以上のイメージングノイズ」と言えます。ので、たとえDACチップからそのまま出力されても、アナログポストフィルタ(おおむね100kHz以上はカットされるハズ)でならされちゃう帯域ですから、ここまでやっとけば充分ってことだと思います。

 なお、上記はあくまでも“見える化”しただけであり、DACチップのOSDFでこれと同じようなリコンストラクションが出来ているという意味ではありません(できてないという意味でもありません)。

・OSDF後(ΔΣ変換)
 実際には、8倍されたのちΔΣ変換するためさらに16倍(128fs)や32倍(256fs)されます。ここではOSDFのような凝ったサンプル生成(オーバーサンプリング)は行いません(行えません。できるくらいならやってる(笑))。
 DACチップにおけるその処理がどんなものなのかは解っていません。ハードウェア資源を割いていないハズなので、零次ホールドか、やっててもリニア補間程度ではないかと思っているのですが…

 一方、PC処理の代表として≪foobar2000≫を調べてみたところ、DSD変換する際ひと仕事しているようです。零次ホールドではなく「Linear Interpolation(リニア補間)」、つまりサンプル間平均値を生成することでオーバーサンプルしているようです。波形編集ソフトでサンプル間を線で結んだようなデータにしているということですね。
 それを見える化してみます。以下は、上記8倍のデータをさらにLinear Interpolationで結んだものです。

14700Hz-3dB:x8のちリニア補完8倍

 ≪Sox Resampler≫で8倍したデータを同じく≪foobar2000≫のプラグイン≪MultiResamlper 1.1.0≫で「Linear Interpolation」して作りました。あくまで説明のための波形です。8倍OSDFからさらに16倍とか32倍になるワケですが、直線で結ぶだけですし、もはや最後のカクカクは無視できますから、リニア補間の倍率は気にしないでください(笑)。

 ピーク付近がやや角張っているようですが、全体的には充分なめらかに見えます。≪foobar2000≫でDSD変換する場合は、このようになったPCMを対象にしているということです(あくまで“説明のための図”におけるイメージですが)。
 ていうか、DACチップのOSDFが8倍だからとアップサンプリングを8倍で止める必要は実はないので、8倍以上に設定すれば上記よりさらになめらかになったPCMデータをDSD変換できるということになります。

 このあたりは≪foobar2000≫(*)によるDSD変換のメリットではないかと思えるのですが、上述の通りAK4490やPCM1795などのDACチップは8倍した後どのようにオーバーサンプリングして128fsや256fsにしているのか解らないのでなんとも言えないです。

*:正確には「そういう設定ができるPCシステム」です。


■ハイレゾデータはどう処理されるか

 本稿は44.1kHzデータについて記していますが、表題についてもカンタンに記しておこうと思います。
 ただし、本項はデータシートなどから個人的に推察したものです。ですので合ってる保証はありません(苦笑)。
 「ハイレゾ」と記していますが、パラメータとしてはハイサンプリングのみが対象です。

・AK4490(AKM社の主力)
 OSDFは倍率可変で出力レートを8fs(1fsは44.1または48kHz)に固定しているようです。96kHzが来たら4倍の384kHz(8fs)にしてΔΣブロックに渡すと理解しています。ΔΣブロックはそれを固定倍率の32倍でオーバーサンプリングして256fsを得ています。
 ハイレゾを入れてもΔΣブロックにおける「デジタルフィルタリングではないオーバーサンプリング処理」倍率は変わらないということです。

・PCM1795(TI社の主力)
 OSDFは8倍固定で出力レートが可変になります。96kHzが来たら8倍の784kHzにしてΔΣブロックに渡すと理解しています。そのかわりΔΣブロックの倍率は可変で、どんな周波数でも最終128fsにすることを推奨しているようです。つまり、44.1kHzソースの場合はOSDF8倍xΔΣ16倍で128fs、96kHzの場合はソースで2倍xOSDF8倍xΔΣ8倍=128fsだと推定しています。
 ハイレゾを入れるとOSDF処理結果のfsが上がり、その分ΔΣブロックにおける「デジタルフィルタリングではないオーバーサンプリング処理」倍率が下げられるということですね。ΔΣ部処理はOSDFより低精度でしょうから、それが下がった分の倍率は前段のデジタルフィルタ処理になるので、ハイサンプリングはDAC処理プロセスとしてもメリットありそうです。


メインメニューへ

テーマ : オーディオ
ジャンル : 趣味・実用

最新記事
ERIへようこそ

Author:らかせ
「最新記事」または
「メインメニュー」からどうぞ

・ファイルへの直接リンク以外はリンクフリー(連絡不要)です

・一応、拍手にコメント(非公開)付けられるようにしてあります

・DB的に利用しており、過去記事もガシガシ書き換えています。特に「最新記事」は初稿から一週間くらいは直してることが多く、大幅に変わっちゃうことも。ご了承ください

・ということもありますし、記すまでもないですが無断転載(ファイル含む)はご遠慮ください

・引用の考え方については「007:諸事」をご参照ください

・アフィリエイトはAmazonのみです

・ハイパーリンクは当Blog記事のみです(054:節電記事のみ例外)

カテゴリ
検索フォーム
FC2カウンター