« カメラのファインダーについて考える | トップページ | ヤマハルーターのL2TP/IPsecが遅い »

2016年8月 1日 (月)

DSDはピアノ・ピアニッシモを奏でられるのか?

きっかけは20年ほど前の論文を読んだこと。
小型電気炉の温度をPID制御するのに、出力をΔ-Σ変調したオン・オフ信号にしても全然問題なく制御できる、と言った内容。

Δ-Σ変調器 (DSM: Delta-Sigma Modulator) は少ないオーバーサンプリング率の1ビットADCから十分な分解能が得られる技術と理解していた。これは主に周波数領域で考えた場合の理解である。これを時系列領域に読み替えると「同じ分解能を得るために必要な遅れが少ない」になる。なるほど。またADCだけでなくDACにも使える。確かに。

数百円以内で入手できるマイクロコントローラーでDACが用意されているものは稀である。アナログ出力が必要な場合PWMが使われる場合が多い。これをソフトウエアで実装したDSMで置き換えることが有効な場合がありそうだ。

電話音声品質程度ならオーディオ出力用にも使えるかもしれないと思い、容易に実装できる一次DSMについて調べたのだが意外とダイナミックレンジが狭い。同じ技術に基づくDSDやSACDは大丈夫だろうか、と少し詳しく調べてみた。

今回調べたのはデジタル信号処理方式としての特性である。ダイナミックレンジやS/N比は、計算で好きなだけビット幅の大きな信号を生成できるような、全くノイズを含まない信号源を想定した場合の議論だ。実際のオーディオソースのようにもともとノイズを含んでいたり、アナログ部分でノイズを発生したりすることは考慮していない。

/*-----------  -----------*/

一次 DSM

一次DSMはノイズシェーピングが弱いのでオーディオ信号用に使われることはまず無いが、動作を直感的に理解しやすいので手始めには好適である。また構成にバリエーションの余地がほとんど無いのも都合が良い。

fig.1はz変換で表した一次DSMだ。

Fig1

実は私があまりなじみないのでz変換形式だけだとやや心許ない。fig.1のzで表した箱の内訳を書き直したのがfig.2である。

Fig2

上段が一次DSMで使っているもので、積分器の後ろに遅れ要素が一つ入った形だ。下段は若干結線を変えると遅れ要素の無い積分器になる、と言うもの。これは後程二次および三次DSMで登場する。

 

一次DSMのシミュレーション

非常に簡単な仕組みなので中核を成す部分は数行で書き表せる。これは使うプログラミング言語にあまり関係ないだろう。しかしシミュレーションとなると入力データを準備したり結果を表示したりする部分が馬鹿にならない。

DSDやSACDを念頭に、以下の条件でシミュレーションを行った。

  • DSM動作周波数: 44.1kHz x 64 = 2.8224MHz
  • 入力信号: 1kHz, -6dbFS
  • シミュレーション時間: 0.1秒 (FFT分解能10Hz)

DSDやSACDの場合、歪を避けるため最大信号レベルが-6db になっているという記述があったため、このシミュレーションでもそれに合わせた。

Fig3a

ノイズフロアが約-90dbと読み取れる。この時の入出力波形は以下のとおりである。

Fig3b

上段のグラフではほとんどベタ塗になってしまったが、青がDSM出力、赤は隣接するサンプル2つずつの移動平均で、こうすると正味のパルス密度変調波形が得られる。正味パルス密度変調波形は、元の波形と同じ極性だけに出ているのが特徴的だ。

以上の結果に特に不思議なところはない。しかしノイズフロアから1kHz付近のダイナミックレンジは約84db (= -6db - (-90db) ) だと考えたのだが、これが違っていた。

入力信号レベルを-90dbFSにするとマトモな信号が出てこない。少しずつレベルを変えて探った、ぎりぎりマトモそうな信号が得られる限界は約-56dbFSだった。ダイナミックレンジとして50dbである。

Fig4a

Fig4b

なぜノイズフロアより34db (50倍) も高いレベルなのかはさておき、これが限界なのは割と簡単に説明できる。

fig.3bの赤のグラフのようなパルス密度変調で表現できるアナログ信号レベルは、ゼロの次に絶対値が小さいのは元の波形半分当たり正味のパルス1個の場合である。動作周波数2.8224MHzで1kHzの信号を表現しようとしているので、元の波形半分当たりのパルス数は最大1,411.2個である。個数に端数があるのは十分長い時間の平均値と言う意味だ。元の波形が矩形波なら表現可能な最低レベルは1/1411.2だが実際は正弦波なので、矩形波と正弦波の面積の比2/πを掛けて約1/898が得られる。

1/898は-59dbFSだ。これは理論値であり、安定に動作させるため3db余計に高いレベルにする必要があった、と考えれば良さそうである。

fig.4bから、この場合の出力には高調波が盛大に含まれていることが分かる。奇数次・偶数次両方の高調波が出ていたり、20kHzより上の周波数でレベルが下がっていたりしているので、完全に0.5ms毎に正負のインパルスが交互に出ているのではなく、若干バラついているのだと考えられる。いずれにせよ歪率 (THD) は100%を超えている。

なお「ノイズフロア」と呼んでいるものの実体は通常「量子化雑音」と呼ばれるものである。振る舞いが雑音的なのでそう呼ぶのにあまり違和感がないが、「量子化誤差」と呼ぶ方がより正確ではないかと思う。無音、つまり入力信号が継続してゼロの場合誤差の発生する余地がなく、ノイズフロアは観察できない。アナログ回路と対比した場合「雑音」よりも「歪」と言った方がより近いはずだが、慣例的に「雑音・ノイズ」と言う場合が多いので、この記事でもその呼び方を使うことにした。

 

二次及び三次DSMの場合

二次以上のDSMは様々なバリエーションがあり得る。これは次数が上がるほど顕著だ。今回はなるべくシンプルな構成を探し、以下の情報を参考にした。
http://classes.engr.oregonstate.edu/eecs/spring2016/ece627/lecturenotes.html (このページの#22)
http://www.eetimes.com/document.asp?doc_id=1207238

Fig5

Fig6

fig.6のa23を通るフィードバック経路はノイズシェーピング特性にゼロを作り目的帯域内のノイズパワーを減らすためのようだ。a23のゲインを大きくするほどゼロの周波数が上昇する。図示した最大値1/9は参考資料に記載されていた値である。今回はこれを使わず、基本的な特性を調べた。条件は一次DSMの場合と同じである。

なおこの三次DSMは入力信号が-6dbFSを超えて0dbFSに近づくと動作が破たんする。前に触れた「歪を避けるため最大信号レベルが-6db になっている」と言う記述はこのような現象を指していたのかもしれない。

Fig7a

グラフから読み取ったノイズフロアは、二次が-148dbFS、三次が-185dbFSである。

Fig7b

二次DSMの場合、正味のパルス密度変調波形を得るためには4区間の移動平均をとる必要がある。絶対値が0.5のパルスが見られること、および正負のパルスが混在する区間があることが一次DSMと比べた際の大きな違いである。

Fig7c

三次DSMの場合4区間の移動平均が正味のパルス密度変調波形を正確に表しているかどうか確信はないが、それに関連した波形を示しているものと考えられ、一応の目安になるはずだ。一次DSMとは明らかに違うが、二次DSMとの違いはこのグラフからはよくわからない。

一次DSM同様にぎりぎりマトモそうな波形の得られる最小信号レベルを探った結果、二次は-120dbFS (ダイナミックレンジ114db)、三次は-180dbFS (ダイナミックレンジ174db) だった。どちらも十分小さなレベルまで再現できているので詳細な波形は省略する。ただし二次DSMではノイズフロアより28db高い値にとどまっている。これは一次DSMが34dbだったのと有意差があると言えるかどうか怪しい。その一方三次DSMではノイズフロアとあまり違わない信号レベルまで再現できている。これはこれで後の議論に謎を残す原因となる。

 

ノイズフロアとダイナミックレンジ、分解能 (有効ビット数)

そもそもノイズフロアって何だろうと問うた時、結構怪しいものであることに考え至った。このことが一番よくわかりそうなのがCD品質のLPCM信号のノイズフロアである。今回一連のDSMと同じ条件でノイズフロアを調べた結果が以下の図である。

Fig8

図からノイズフロアは-120db前後と読み取れる。LPCMだと最大信号レベルは0dbFSまでOKなので、ノイズフロアが基準になると考えるとダイナミックレンジは120dbと言う事になる。しかしその一方で16ビットLPCMのダイナミックレンジは概ね96db (= 16 x 6db) だと言う事実がある。この食い違いは重大な違いを無視したことに原因がある。

LPCMの分解能やダイナミックレンジを考える場合、量子化雑音 (量子化誤差) 全体の電力を考えなくてはならない。しかし FFTの結果では量子化雑音は狭い周波数範囲 (上の例では10Hz) 毎に分割されてしまうので概ね分割数だけ小さくなる。これは量子化雑音が周波数全体にわたって概ね均一に分布していると考えられるからである。その一方目的信号は周波数的な広がりがないので、個々のFFT結果の周波数範囲がいくら小さくてもレベルは小さくならない。

必要帯域の上限周波数を20kHzとし、FFT分解能が10Hzだと、ノイズフロアは全量子化ノイズ電力よりも約33db低く見えることになる。これをfig.8に当てはめるとノイズフロアは-129dbに見えるはずである。先ほどの数値は9dbほど高いが、目見当なので必要以上にグラフのピーク部分に注目してしまっていた可能性が考えられる。

つまりFFT結果を目で見て得たノイズフロアはダイナミックレンジの基準には使えない値である (そもそも「目で見て」の時点で相当怪しい)。またADC分解能 (ビット数) もこのノイズフロアから計算するのは不適当だ。

ここまでの議論を踏まえると三次DSMで1kHzの信号がノイズフロア近くのレベルまで再現できたのがうまく説明できない。次数が3以上のDSMだと何か特別な事情があるのかもしれないが、それが何なのか含め謎である。

それはさておき、

SDMのダイナミックレンジや有効ビット数を求めるには必要周波数帯域内の全量子化雑音電力を基準にする必要がある、と言うことである。具体的な方法を考えると、

  • FFT結果からパワースペクトラムを求め、必要帯域内の合計を得る (合計電力: Pt、合計したFFTスペクトルの数: Nt)
  • 目的信号を含むスペクトラムの合計電力を計算する (ここで得た合計電力: Ps、合計に使ったスペクトル数: Ns)
  • ノイズ電力 Pn の計算: Pn = Nt x (Pt – Ps) / (Nt – Ns)
  • S/N比: SNR = 10 x log10(Ps/Pn) [db]
  • 有効ビット数: ENOB = (SNR – 1.76) / 6.02 [bit]

今回調べた条件で、DSMとLPCMについて必要周波数帯域の上限を20kHzとした場合の有効ビット数を計算した結果は以下のとおりである。

  • DSM1:  7.2 [bit]
  • DSM2: 11.2 [bit]
  • DSM3: 13.2 [bit]
  • LPCM: 14.6 [bit]

DSMはこれが実力だが、LPCMは信号レベルが最大値の半分なので1ビット少ない結果になっている。これを見る限りオーディオ信号を扱うには、DSMの次数は3では足りない、と言う事になる。三次DSMで係数を変えてゼロを持たせると1ビット強分解能が向上するがまだ足りない。

ただしこの結論と若干矛盾する興味深い事実があった。二次または三次DSMは1kHz の信号を16ビットLPCMよりはるかに低いレベルまで再現できることが分かっている。もしかするとDSDやSACDが「情報量が多い」と評価される原因はこのことにあるのかもしれない。

 

比較対象はCD品質で良いのか

今回試したDSDやSACDの毎秒2,822,100ビット (1チャンネル当たり) は通常のCD: 44.1kHz x 16bit = 毎秒705,600ビットに比べて4倍の情報量になる。これだけ情報量の違うもの同士を比べるのはどう考えてもフェアでない。

また毎秒2,822,100ビットは96kHz/24bit LPCMの毎秒2,30,400ビットよりもまだ大きいが、かなり近いので、比較対象とするのはこちらだろう。と言う事で96kHz/24bit LPCMについて調べてみた。比較のため44.1kHz/16bit LPCMおよび三次DSMも一緒にプロットしている。

Fig9

ダイナミックレンジの非常に広い範囲を見ているので、目的信号周辺は窓関数の特性 (サイドローブ) が顕著に見えてしまっていることにご留意されたい。

三次DSMは可聴領域上端およびそれより高い周波数のノイズフロアが44.1kHz/16bit LPCMよりも高くなっている。DSDなどで利用されるであろうもっと次数が高く最適化されたDSMは今問題にしている部分のノイズフロアがもっと低くなっているものと考えられるが、96kHz/24bit LPCMのナイキスとバンド内でそれに匹敵する水準になっているとは考えにくい。現実の音楽ソースなどを考えると無意味に低いレベルだと考えられるからだ。

DSDやSACDの信号は可聴域上端付近から96kHz/24bit LPCMの上限周波数までの範囲で、本来の波形にない信号を96kHz/24bit LPCMと比較してより多く含んでいる可能性があり、これは本来の波形に忠実ではないと言う事である。つまりHiFiではい、と言う事。ただしこの事がDSDやSACDにとって聴感上プラスに働く場合があるかもしれない。

また96kHz/24bit LPCMが再現できるもっとも小さな信号レベルは-145dbFS程度だが、三次DSMでも-180dbFS程度のレベルの信号を再現できる可能性がある。

ただどちらもCD品質信号のダイナミックレンジの下限をはるかに下回る信号レベルの領域の現象だ。これらの違いを耳で聴き分けられるようにするには、色々な装置に相当お金をつぎ込まないと到達できないような気もする。たぶん私には無縁の世界だろう。

 

今回のまとめ

今回の表題「DSDはピアノ・ピアニッシモを奏でられるのか?」の答えは「安心してください。ちゃんと奏でられてますよ」だろうか。陳腐なギャグはさておき、

DSDやSACDの技術を直接調べていない。それらと同じ原理で動いていてより性能が低いと考えられる三次DSMを調べて、可聴周波数範囲の重要な領域で通常のCDのダイナミックレンジ下限を下回る信号が再現可能であることが確認できたと思う。

そもそものきっかけだったフィードバック制御系の操作信号に使うのは、残念ながら具体的な用途が簡単には思いつかないが、数百円のマイクロコントローラーで加熱炉よりもっと速い応答が必要な制御対象にも使えるPIDコントローラーが組めそうな感触がある。

また音声信号出力に使うことを考えた場合、この用途にはデジタル音声信号をDSMの動作周波数までオーバーサンプリングするための補間器も必要なので、数百円のマイクロコントローラーで実現するのは厳しいかもしれないが、200MHzのクロックで動作しているBBBのPRUなら何とかなりそうな気もする。

|

« カメラのファインダーについて考える | トップページ | ヤマハルーターのL2TP/IPsecが遅い »

BeagleBone Black」カテゴリの記事

IT」カテゴリの記事

音楽」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/543745/63998546

この記事へのトラックバック一覧です: DSDはピアノ・ピアニッシモを奏でられるのか?:

« カメラのファインダーについて考える | トップページ | ヤマハルーターのL2TP/IPsecが遅い »