デジタルオーディオあれこれ

半田ごての人。紙と鉛筆だけではちょっと。

デジタルフィルターとは。見渡せば LPFもHPFも なかりけり デジタル世界の 輪廻の宿世。

 今のオーディオは完全にデジタル化しているので、特殊な自作機器を除いてほぼ全ての再生系は、DSMとかデジタルフィルターを経由して元のアナログの音になっている。DSMは一言で言ってしまうと、捨てればPCM戻せばDSM。本来はありがたくない量子化ノイズを、PCMでは捨てる。DSMではNFBで入力に戻して再利用する。結果として、捨てる量子化ノイズは1ビットであってもほとんどゼロだから、まともな音になる。

 

 ノイズシェービングだとかオーバーサンプリングとかは、そのための方法論の一つにすぎないので、場合によってはなくてもDSMは動作する。NFBがない場合、入力と出力は同じになるので全く動作しない。量子化ノイズを作ってくれる量子化器が必ず必要になる。そういう説明がされることはほとんどないと思うけど、実際にFPGADSMを実装する場合、北極星のように目的地を照らすのはそういう事実。

 

 デジタルフィルターを一言で言うと、どうなんだろう。周期性の呪縛から如何にして逃れるのか、だろか。窓関数は全く考える必要がない。役に立たないし難し過ぎて理解できない。デジタルフィルターを無限世界から有限世界に引きずり降ろそうとするならば、窓関数が必要になるのかも。コンピューターは有限データしか扱えないので、最初から有限でのみ考えれば窓関数は不要。それが賢い。

 

 一番簡単なデジタルフィルターは移動平均。足して2で割る。2点の移動平均ならば、(x[n]+x[n-1])/2というやつ。最初から有限データなので、窓関数という概念は全く不要。これは単純でありながら、色々な応用が効くしリンギングはしない。インパルス応答が、0,0,0,5,0,5,0,0なので当然。方形波を通すと、基本はLPFなので少しなまる。

f:id:xx3stksm:20190314195937j:plain

 とても立派な線形位相デジタルフィルターで、ややこしい数学は一切不要。特性が些か特殊であるのが難点だけど、これは幾つかの組み合わせで、普通のFIRでは到達不可能なプリとポストのエコーなし特性を作れる。それを設計するソフトはまず存在しないので、エクセルとかscilabとかで自作するしかないだろうけど。

 

 デジタルフィルターの本質的意味合いは、全てこの2点の移動平均フィルターに含まれている。たった2個の足し算なので解析も容易。デジタルフィルターのロゼッタストーンのようなもの。エベレストの無酸素登頂なみに高嶺の花の、オーバーサンプリングの本当の意味合いも、ここから昇って行くならば攻略可能。窓関数には秒速30m/sの風が吹いている。

 

 この移動平均は、サンプリング周波数の1周期分だけ遅れたデータの足し算に相当する。普通のFIRは、1024のタップならば 1023周期分までのデータに係数を付けて足し算する。この移動平均は係数も1なのでとても単純。ちょっと図を描いてみると、足した結果は容易に計算できる。

f:id:xx3stksm:20190314201351j:plain

 

 こんな感じ。任意の位置からθ、つまりは1/fsの時間だけ遅れたデータを足す。fsはサンプリング周波数。この単純な計算にはとても大きな意味がある。もしも元の周波数が100Hzぐらいで、サンプリング周波数が96kHzだとすると、1/fsの時間ではほとんどデータに変化はない。演算で結果に変化は出ない。直流であれば、常に同じ。

 

 もしも48kHzになると、世界は一変する。48kHzを96kHzでサンプリングすると、2点しかない。別の言い方をすると、θはπ。sin(x)とsin(x+π)を足して2で割ると答はゼロ。周波数特性を持っている。これはsinの公式からcos(θ/2)*sin(x+θ/2)なので、θがπならば当然ゼロになる。24kHzならばθがπ/2なので、振幅は0.707になって少しの位相差が出る。

 

f:id:xx3stksm:20190314202415j:plain

f:id:xx3stksm:20190314202444j:plain

f:id:xx3stksm:20190314202500j:plain

 上から24kHz、38.4kHz、43.2kHz。48kHzならばゼロ。つまり2点の移動平均は、LPFのように機能している。アナログと違うのは6dB/octの倍数にはならなくて、サンプリング周波数の半分に向かって奈落の底に落ち込む。ではこれがLPFかというならば、全く違う。そこがデジタルフィルターの基本で一番重要な点で、オーバーサンプリングが必要になる唯一の理由。デジタルフィルターには、BPFしか存在しない。

 

 無限に高いサンプリング周波数を用意するならば、sinc関数を実在できるようにLPFやHPFも可能。でもそれは実現不能なので、LPFやHPFはデジタルフィルターでは作れない。とは言っても、rephaseのようなソフトではクロスオーバー用のLPFやHPFを作っている。氷山は4/5が水に沈んでいるそうだけど、デジタルフィルターは無限に見えない所に隠れている。LPFやHPFと思っているのは、所詮BPF。

 

 この一見するとLPFぽいフィルターの特性は、cos(θ/2)*sin(x+θ/2)。後のsinは位相変化しているだけなので振幅特性に関しては無視できる。前のcos(θ/2)の絶対値が振幅特性。こんな感じ。

f:id:xx3stksm:20190314203813j:plain


 cos(θ/2)はもちろん周期関数なので、同じ特性を繰り返す。なのでBPFにしかならない。アナログのように落ちっ放しの特性は、デジタルフィルターでは実現不能無限を許すのであれば可能であるけれど、実装できないものは考える必要がないし、頭が混乱するだけで有害。もしもfsが無限大ならばfs/2も無限大なので、LPFは可能。でも全くの無意味。

 

 2点の移動平均だから周期的かというならば、そうではない。1024のタップであってもその振幅特性はsinとcosの級数になる。sinとcosは周期的なので同じ結果。ではrephaseの特性が嘘かというならば、fs/2までは正しい。その上は神のみぞ知る。幸運にも、その上は悪さをしない場合が多いので、考慮する必要があまりないというだけ。

 

 問題になるのは、最終的にアナログに戻すreconstruction filterの所。もしもrephaseのLPFが本当のLPFならば、高い周波数は全て落ちているので、高い周波数のイメージというのは無くなっている筈。でもなくなっていないから、reconstruction filterが必要になる。これは多分どうしようもない。 

f:id:xx3stksm:20190314204932j:plain

 

 96kHzのサンプリングで12kHzを作ると、8個のサンプリングなのでこうなる。白い点がサンプリング。FFTでは12kHzの所に一本スペクトルが出るだけ。これは便宜的には良いけれども、正しくはない。本来のDACの出力は、零次ホールド特性なので、こうなっている。

f:id:xx3stksm:20190314205230j:plain

 これも標本化定理としては正しくなくて、それはSSRCで周波数変換をデジタル領域でしようとすると問題になるけれど、reconstruction filterでは問題にならない。ただ見ての通り、こうするしかないのだろうけれど、このFFTは宜しくない。このように階段的な波形は、多くの高調波を含む。この例だと、(n*96-12)kHzと(n*96+12)kHzがある。なので階段になっている。

 

 これは96kHzサンプリングなので、基本的に48kHzまでしか扱えない。だからそれより上の高調波の表示が出来ない。でも出来ないだけであって、ない訳ではない。実際のハードウエアであれば、スペアナで表示できる。こんな感じ。96kHz毎に永遠に並ぶ。

f:id:xx3stksm:20180712203720j:plain

 

 でも一般的には、上の隠れて見えない所に沢山の成分があるとは気が付かない。普通は理想フィルターで補完した綺麗な正弦波の方を出すので、まず分からない。reconstruction filterは、この普段は表示していない成分を落とすためにある。但し、周期性の呪縛があるので、この状態ではどう足掻いてもデジタルフィルターで高調波は取れない。

 

 オーバーサンプリングは、酸素ボンベのように不可能を可能にする。単純な理屈。無限は無理としても、8倍ぐらいにfsを上げるのは難しい話ではない。そうすると実質的なfs/2が8倍になるので、LPF的な領域も8倍になる。reconstruction filterのオーバーサンプリングには、その意味しかない。高調波のイメージをデジタル的に取りたい、そのためにかりそめの高いサンプリング周波数を作っている。こんな具合に随分と高調波をデジタル的に落とせる。

f:id:xx3stksm:20180712204809j:plain

 DSMで使うオーバーサンプリングは、ノイズシェービングが主な理由なので、reconstruction filterとは意味合いが違う。ADCのオーバーサンプリングも、ノイズシェービングでS/Nを上げる事と、音声用であればアナログのフィルターをほぼなくせる事に意味がある。そういう意味では、reconstruction filterのオーバーサンプリングは異質かも。

 

 いずれにしてもデジタルフィルターは必ず周期性を持つので、使う場所次第ではそこを考慮する必要がある。道具としてデジタルフィルターを使うのであれば、窓関数由来の発想は捨てた方が良い。数学としての辻褄は合うとしても、全く実用にはならない。それを言うと、sinc関数が実在しないのだから標本化定理の現実への実装は無理、というような話になってしまう。

 

 工学は単純。まずは基本的なモデルで図を描く。無限の計算はしない。無限にまつわる方法論は取らない。デジタルフィルターとは、2点の移動平均の応用にしか過ぎない。それを解析するならば、話は終わり。現実世界で応用できるようになる。

 

 

 

 

もっと低音を。人の耳に合わせたFFT長は、かなり短い。

 音声信号の厄介な所は、あんまり定常状態というものがない。ビデオ信号の方がまだ定常信号と実際の映像とに相関性がある。良く使われる1kHzでの歪を測ったところで、1kHzの音を大層な金をかけた装置で聞く人なんていない。聞くのは生の人間が演奏している楽器であったり生の声。シンセサイザーならば、少しは定常状態に近いとしても。

 

 定常状態とは、1kHzが同じ振幅でずっと続いている場合。生の楽器で、同じ音の大きさを保つことはまずありえない。音程は同じとしても。なので音声装置の解析に関して1kHzの定常状態は現実と乖離していて、測定結果はあまり当てにならない。聴感と測定結果との間に相関が薄いのは、一つにはこれが原因。

 

 定常状態でない場合、過渡応答と言ったりもするけれど、音声に関しては過渡応答が普通であって、そっちを特別扱いする理由は測定側の都合だけ。過渡応答というぐらいなので、何を基準としたら良いかが分からない。方形波の立ち上がりなんかを過渡応答と言ったりもするけれど、それは定常状態と大差がない。インパルスも似たようなもの。要は、何を見たいのがをハッキリさせる事。

 

f:id:xx3stksm:20190218181354j:plain

 例えばこういう信号がある。750Hzのサイン波を0.7秒ぐらいでonにしたりoffにしたり。これを96kHzサンプリングして、128kのFFTサイズで見るとこうなる。どんなFFTソフトでもこうなる。750Hzの所に山が出来るのはまあ当然。しかしそれ以外に、レベルは落ちていくとしても、全ての周波数を含むことになる。

 

 これはFFT的には正しい。人の耳的には間違っている。何故かと言えば、この信号は無音、インパルスのようなブッ、750Hzのサイン波、インパルスのようなブッ、の繰り返しとして聞こえるので。FFTはそれらを全部いっしょこた、にしてしまっている。でもそれはFFTではなくて設定の問題。

 

 96kHzサンプリングの128kとは、128/96≒1.3秒での周波数解析という意味。それはほぼこのバースト信号の一周期なので、人の耳に聞こえる音をまとめて解析する。なのでその範囲であるならば、結果は正しい。無音からサイン波に変わる所と、サイン波から無音に変わる所は、音からも明らかなようにほぼインパルスに一致する。つまり、全ての周波数成分を含むので、その結果上のようなFFT結果になる。

 

 定常状態であれば、特にFFTの長さは考える必要がない。分解能が変わるだけなので、周波数成分が大きく変わる事はない。しかし現実の音を人の耳に合わせて解析するのであれば、人の耳の特性に近いFFTの長さにしなければ、いっしょくた状態で訳が分からなくなる。どのぐらいが適当なのかは、個人差もあるので何とも。

 

 簡単に調べるのであれば、間隔を短くしていく。0.7秒のバーストでは明らかに無音とサイン波やインパルスの部分が分かる。0.05秒(10Hz)のバーストにすると、そろそろ耳で聞いても、いっしょくたに近くなる。まだ個々の音として聞けるけど。更に三倍ぐらい上げると、そろそろ耳で聞いてもいっしょくたで、8192の結果と同じになる。この信号は、WaveGenで簡単に作れる。

 

f:id:xx3stksm:20190218183011j:plain

 

 という訳で、0.05秒(10Hz)のバーストを個々の音として解析できるFFTの長さはというと、4096。黄色の縦線の前後が解析データ。

f:id:xx3stksm:20190218183511j:plain

 見ての通り、同じ信号に対してFFTの長さだけを変えると、8192ではいっしょくた。4096では個々の音を分離できる。時間にすると、4096/96000≒40mS。音の大きさが変わる所では、全く違うスペクトルになる。この場合は、小さ目の750Hz、インパルスのブッ、大きめ750Hz、インパルスのブッ、の繰り返しが辛うじて聞き取れる。その限界値が、4096のFFT長さ。

f:id:xx3stksm:20190218183748j:plain


 勿論2048も可だけど、4096の分解能の約25Hzは普通の人の音感に近そうなので、ひとまず4096。これはあくまでも周期の話なので、48kHzのサンプリングであれば、2048になる。約25Hzの分解能になるためのFFT長という意味。96kHzであれば4096ぐらいであろうと推測できる。つまり、普通の音声信号(定常状態ではない)を耳の特性に近い形で解析するのであれば、96kHzサンプリングならば4096ぐらいが適当。窓関数はハンでよい。この例は、ソフト解析との整合性もあって750=96000/128を使っているので、レクタンギュラー(窓関数なし)も可能。

 

 普通の音声信号は、定常状態とは大きく違っていて、低い方は底なし。定常状態の750Hzの基本波であれば、その倍音成分のみが存在するけれど、大きさが一定の音は現実には存在しない。ピアノにしろバイオリンにしろ。ピチカートならば、大きさの変化にこそ意味がある。その場合は、基本波の周波数とは無関係に、低い方は直流まで底なし。どうしてそうなるかは、簡単な例で直感的に分かる。

 

f:id:xx3stksm:20190218185518j:plain

 

 16Hzのサイン波と1Hzの矩形波を考える。茶色がサイン、赤が矩形波。二つを掛け算したのが水色。8サイクルが無音で、8サイクルが16Hzになる。極端な振幅の変化。水色の周波数成分は、計算するまでもなく見当がつく。矩形波は、1Hz、3Hz、5Hz・・・で出来ているので、1Hzとの掛け算で16±1、3Hzとの掛け算で16±3、5Hzとの掛け算で16±5、・・・。それぞれのレベルは1/nで落ちるので、16±1が一番大きくて16±3がその次。以下はその繰り返し。16±15、の時に1Hzが出る。

 

 下はFFTでの解析結果。直感での計算とほぼ同じ。16Hzだからその倍数しか出ないというのは幻想。それは現実では全く有り得ない定常状態での話。振幅が変わってしまえば、基本波に相当するのはその一周期となり、元の16Hzとは無関係。それは最も高い山の位置に関与するのみ。水色のようなバースト波形の再現には、1Hzまでが必要という事。元が160Hzになると、1Hzのレベルは1/10になるだろうけれど、それでも結構高いレベル。

 

 この振幅の変化とは、別の見方をすると窓関数そのもの。慣例的にFFTというけれど正しくはDFFTで、FFTとDFFTは全くの別物。コンピューターでFFTは扱えない。FFTは無限の数を扱うのでコンピューターにそれは無理。工学で使うのはDFFTしかないと思う。FFTは数学でのみ存在。DFFTは有限の数を扱うので、測定対象には周期性が必須。FFTなら基本的に必要ない。

 

 ところが一般の測定対象は、周期性を持たない。定常状態のサイン波でも、特殊な細工をしない限りは持たない。その非周期信号を、周期信号に変えるためにDFFTでは窓関数が必要になる。窓関数は、周期の始まりと終わりを強制的に0にする。それでもって周期性を確保する。測定対象に某かの数値を掛けるので、当然誤差が出る。本来の成分は分からないという事。

 

 しかし上手い具合にその誤差をかなり小さくする窓関数がある。ハンが最も宜しい。他は基本的に考えなくと良いと思う。一番誤差の小さいのがハンだから。赤がハン。周期の初めと終わりがゼロなので、測定対象が何であっても周期性が確保される。しかし元々の茶色の信号の代わりに、水色を解析するのでかなりの誤差が予想される。

f:id:xx3stksm:20190218191708j:plain

 でも、ところがどっこいで、元々の16Hzの他には16±1Hzが出るだけ。実際のFFTはレベルを補正しているので、誤差としては余計な15Hzと17Hzのみになる。これは分解能で決まる話なので、FFT長を大きくすれば、この余計な2つは元の16Hzに限りなく近づいて無視できる。水色の波形で代用してもほとんど問題はない。矩形波を掛けてしまうと、最初の例のように余計なスペクトルの山になる。

 

 なので、もしも実際の楽器での振幅変化がハンのようなコサインであれば、下に広がる事はほとんどない。それは現実にありえないけど、弾き方次第で下の広がりを大きくしたり小さくしたりは可能という話。窓関数ハンの超絶技巧とか。一般論としては、楽器の基本波は目安にしかならない。実際の演奏では、その下に底なしで広がる。電子レンジのチンとか、玄関のチャイムが無機的に聞こえるのは、普通の音はほぼ全て下に広がるのに対して、下に広がる事がないためと思う。

 

 パイプオルガンは、構造的に風の入り切りしかしないので、振幅の変化はほとんどない。そのためか、自然の楽器の中ではシンセサイザーの音に近い感じがする。エスプレシーボというのは、倍音成分は当然として、弾き方次第で決まる下への広がりにも大きく依存すると思う。一時期、神尾真由子のコーチしていた旧ソビエト人のシュトレーゼマンのように怪しい日本語を話す男が、エスプレシーボとは胸を締め付けられる、だと言ってた。

 

 同じコサインでも、2Hzにしてしまうと事情は大きく変わる。こんな感じ。こんな波形は現実にもあって不思議はない。矩形波での振幅変化はまずありえないけど。でも結果は、矩形波と似たようなもの。とても特殊な場合(ハン)を除いて、大抵の窓関数というのか振幅変化はかなりの低い成分を含む。低い方の落ち方がかなり急になるだけ。

 

f:id:xx3stksm:20190218193254j:plain

 

 現実の問題として、仮にこんな信号が記録されていた場合、15Hz以下が無くなるとどうなるかは簡単にシミュレーションできる。単純に上のFFT結果で15Hz以下をゼロにして、逆FFTで時間軸の信号に戻せば良い。

 

f:id:xx3stksm:20190218193850j:plain

 

 こんな感じの寸胴になる。もしも17Hzから上もなくすと、元の16Hzだけの完全な寸胴になるので、下だけならばこんなもんかも。寸胴になると変化が乏しくなるので、やっぱり迫力というようなものは消えるはず。現実の音声信号とは、いわゆる過渡現象の連続で出来ているので、定常状態での解析にはほとんど意味がない。

 

 定常状態での解析でも、ある程度は低い方のスペクトルが分かるとしても、かなり短い時間で出たり消えたりするものだから、本来の耳で聞いた時と同じような結果を出すのは難しい。そして寸胴の音にしないために必要なのは、とにかく底なしで低い方までの再生能力。イコライザーでは意味がないので、広い空間が必要。

 

 それは狭い都会では到底無理な話なので、分かっていても言わないのか、定常状態での解析しかしていないのか。高い方は音源からの距離ですぐになくなるので、なくても実害なし。生での臨場感を決めているのは、底なしに広がる低音だと思う。実感としても、再生が難しいのはパイプオルガンよりもピアノの低音での連打とか、オーケストラの中のコントラバスのピチカート。大きな振幅変化を持つ低音は難しい。
 

 

 

ブラームスのバイオリン協奏曲。エリカ・モリーニのウエストミンスター録音(1956)。

 オーディオ趣味とういうものは、今ではレッドリストにでも載りそうで、いずれ据え置きのステレオはホーローの看板だとかオート三輪とか七輪のような、過去の遺物になって博物館にでも展示されるのかと思う。でもその一つ前の世代のアマチュア無線などは、誰にも知られる事無く安楽死状態だから、昭和の遺物として語られる日があるならば、望外の幸せかもしれない。

 

 一つには場所を専有するし音が近所迷惑にもなるので、都会では難しい。装置自体はデシタル化して格段に進歩しているので、クラシックのオーケストラであっても部屋の広ささえ確保するならば、かなりの質が望める。過去の演奏家のコンサートを聴くことは不可能なので、その意味ではオーディオも捨てたものでない。

 

 改めてそう思ったのがブラームスのバイオリン協奏曲。エリカ・モリーニ(1904)とロジンスキーウエストミンスターでの録音。発売は1959でステレオ音源も出ているので、録音もその頃かなと思う。モノラルとしては最晩年で、最後の一花といった風情。

f:id:xx3stksm:20190111193657j:plain

 こういう過去の録音の多くは、CDでの復刻盤が出ている。これも探せばあるはず。でもそれにはほとんど意味がない。過去に沢山の辛酸をなめて、CDのみならずSACDでも同じ過ちを繰り返して、レコード会社にかなりの額を貢いでしまった。今はeBAYで中古レコードを買って、自作のADCでデジタル化して最新の音声編集ソフトで自分ちの再生装置に合わせて復刻したのを聞いている。

 

 市販品の復刻盤は、標準的な再生環境に合わせて編集している。CDとSACDでは若干の違いがあって、SACDはCDよりも少し古めの装置に合わせてある。昔風のデカいスピーカーを少し意識した編集。なのでオーディオに金をかけている場合は、SACD版の方が良く聞こえる事が多い。間違っても、44kだとかDSDだとかは関係しない。中身が違うので当然音も違うよ、という話。

 

 更に昔風のステレオとなると、もう完全な圏外なので市販品ではとても無理。自分で作るしかない。実際の所、音源を自作しないならば、クラシックのオーケストラを当時のまともな音で聞くのは無理。当時のミキシングは、当然ながら当時の主流の装置に合わせて作られているのだから。昔の音源は昔の装置で聞くのが良いという話は、そういう意味で筋が通っている。

 

 

f:id:xx3stksm:20190111194856j:plain

 

 こういう環境で聞く場合、最近のマイクが乱立したオンマイク録音は耐えられない。個々の楽器は鮮明に聞こえるので、今風の小さなスピーカーでならば良く聞こえる。そのためのオンマイク録音なのだから。アナログ録音かデシタルかには、やはり意味がない。お客さんの再生装置に合わせて録音方法も変わる。それと共にデジタル化したのは事実 であるけれど。

 

 このブラームスは、おそらく指揮者の頭上5mにマイクを置くような、伝統的手法かと思う。個々の楽器の鮮明度は劣るけれど、実際にコンサートホールで聞いている音に近いのはこっち。でもまあバイオリン協奏曲というのは鬼門ではある。ピアノならともかく、バイオリンの音量でホール全体に音は届かない。録音では一種の音響的キュビズムのお蔭で、ソロバイオリンをかなりの音で聞ける。

 

 初めて録音でバイオリン協奏曲を聞いた時、お客さんはたまげた筈。なんとまあハッキリと、バイオリンが響くことよのうと。どっちが良いのか何とも言えない。当時はきっと、その鮮明さが受けただろうなとは思う。コンサートの生と、キュビズムの録音とは全くの別物として捉えていたいたのかなと。

 

 ウエストミンスターというレーベルは、少なくともうちの環境ではモノラルの白眉。ステレオになるとかつての栄光は消えて、RCAの後塵を拝するのみの感があるけど、1950年代前半のモノラル録音に関しては、これ以上のものはない。自分で復刻するのであれば、中古レコードで十分にその真髄が聞ける。大抵の中古レコードは、送料の$20前後と同じぐらいで買える。これも確かその位。

 

 この人はハイフェッツと同じぐらいの時代に、華々しくアメリカでデビューして、天才少女と言われた。多くの他の音楽家と同じように、戦争の影響で故国を離れてアメリカへ。RCAの看板になったハイフェッツと比べると、弱小レーベルのウエストミンスターで、これまたなんとなく理由に想像がつく大手に縁のないロジンスキーとの組み合わせ。名前では些か劣るとしても、中身では全く負けないどころか50年代の録音(1956)としてはピカイチ。

 

 ブラームスの曲はバイオリニストを魅了するようで、多くの名演が残っている。あんまり詳しくないのだけれど、これを聞いていて素人にもアレッと思わせたのがカデンツァ。バイオリン協奏曲には、カデンツァという演奏家の即興に任せるような所が第一楽章の後半にあるそうで、ブラームス本人はここを書いていないので、今は初演したヨアヒム版が多く弾かれるらしい。

 

 一回り位後の世代で、これまた数奇な一生のジネット・ヌヴーもライブを含めて三回ぐらい録音している。彼女のは弾き方以外で特に気にならなかったから、ヨアヒム版だったのかも知れない。エリカ・モリーニは共演者をかなり厳密に選ぶ人だったらしい。カデンツァも相当吟味して選んだろうなと思う。

 

 ブラームスは、師匠のシューマンの未亡人のクララとの経緯や、重くるっしい鉛色の冬空を思い起こさせる作風からして、踏ん切りが悪い。吹っ切れてしまうベートーベンとは、同じドイツ男でもまるで違う。ベルリンフィルのような重々しさはドイツ気質なんだろうけど。うじうじした重苦しさと、ぶっ飛んでる重々しさ。なのでどうもブラームスは好きになれない。

 

 その鬱々とした曇り空から差し込んでくる明るい日差しのように、バイオリンが色彩を付けてくれるならば、ブラームスの重さにも意味は出て来る。彼女のカデンツァは(フーゴ・ヘルマン)、少しハンガリーぽくてロマの響きが何となくある。ヨアヒム版はブラームスが書きそうな旋律で、今一つ面白くない。ブラームスのケツをひっぱたいて活を入れるようなフーゴ版の方がふさわしい。

 

 因みにハイフェッツも書いているらしく、RCAの録音は自作版なのだろうか。聞いてみたけれど、さてヨアヒム版なのかそうでないのかは分からない。この人のRCA録音はどれを聞いても、はよう終わらせて一杯飲みに行こかといった按配で、情緒はない。シベリウスだけは好きだけど。

 

 オーディオ装置にそこそこの金をかけるのであれば、最近の録音は物足りない。江戸時代の絵師に曽我蕭白というバサラ者がいた。彼が言うには、画が欲しいならばワシに頼め、図が欲しいならば円山主水(応挙)が良いと。昔の録音は機材の性能の制約で、写真のような図は得られない。仕方なく人の感性に合わせて少しデフォルメした絵にしてしまう。写実的な図が欲しいのか、些か実物とは違うけれども真に迫った絵が良いのか。

 

 演奏家も昔は絵的だったと思う。絵的な演奏を絵的な録音で。モノラルかステレオかには意味がない。実際のコンサートは多分モノラルだし。デジタルかアナログかも同じく。良質のデジタルは空気のように何の色付けもしない。絵的な録音ならば絵的に、マルチマイクの最新録音ならば高精細の写真のように。それはドキュメンタリーではあっても、絵画とは別のもの。結局の所、再生音に何を求めるのか。画なのか図なのか。

 

DSMの実際の周波数特性を、NTFから計算する。そこそこ実際の値に近い。

 今はもうDSMの計算には幾つかのライブラリーが用意されている筈で、これを一から自分で作る人はまずいない。アルゴリズム自体はほぼ完成されていて、初期のSACDで使っているのに比べると、随分と良くなっている。良いというのは、入力がゼロの時に変なアイドリングパターンを出さないとか、同じ次数やOSRでノイズレベルが低いという意味。SACDはあんまり良くない。

 

 しかしFPGAに実装する場合は少し違う。ソフトウエアと違ってリソースが限られているので、用途に合わせて限りなく特化する必要がある。金に糸目を付けないのならば、大きなサイズのFPGAで解決する手もあるが。デジタルフィルターにしろDSMにしろ、ハードウエア化にはそんな問題が常にある。

 

 参考書籍はあるけれど、中々自分に必要な所を見つけ出すのは難しい。ネット情報も当たり外れが大きい。ここはとても凄い。

PlayPcmWin / Wiki / PCMtoSDM

必要な情報は全てある。MATLABでの計算結果も出ている。本にはそこまで出ていない。結果が欲しければ、MATLABは高いのでpythonで計算するしかない。でも最終的な定数に辿り着くまでには些かの計算が必要。

 

 自分で計算して履歴も残っているけれど、暫くしてから見直すとサッパリ意味が分からない。一日位考えてやっと思いだす。という訳で、備忘録の積りの覚書。

f:id:xx3stksm:20181016194033j:plain

 これがDSMの基本の基本。定数の計算もこれが元になっている。入力信号はそのまま出力に出るようにして、量子化誤差に対するNTFというのを音声帯域で小さくなるようにする。NTF=1/(1-L1(z))

MATLABはsynthesizeNTFで、この関数の零と極を計算してくれる。ここにある。

PlayPcmWin / Code / [r740] /PlayPcmWin/WWOfflineResampler/NTFHzcoeffs.cs

どちらも複素数になる。

 

 この零と極をもつ関数と、実際の回路の係数を一致させれば良い。一番簡単な二次の場合はこうなる。

f:id:xx3stksm:20181213212028j:plain

%o126がL0(z)で、%o131がL1(z)。

f:id:xx3stksm:20181213213045j:plain

 z0,r0,j0,が、MATLABが計算してくれる零と極。次数が上がるとこれが増えてくる。

という按配で最終的に必要なg0,a0,a1が出て来る。ここまで自分でしなくても、g0,a0,a1も出ているので、そのまま有難く使わせて貰って問題はない。

 

 但し、gとaが出ているのは五次までなので、それ以上の七次が欲しければこの計算が必要。七次ともなると、とんでもない数式になるが、maximaが計算するので、二次の延長で数式をほり込んでやればよい。そのために、二次で流れ作業の手順を覚える必要がある。

 

 これを計算するのにはもう一つ意味がある。このNTFの周波数特性を確認したい。これが所謂ノイズシェービングというものなので、どの程度にノイズが抑えられるのかを確かめる。NTFは共にzの二次の分母と分子で出来ている。このzにe^(jωT)を代入すると、その複素数の絶対値が周波数特性となる。

f:id:xx3stksm:20181213214752j:plain

分母の実数が%o3で虚数が%o4。分子の実数が%o13で虚数が%o14。これの絶対値をエクセルで計算させてグラフ化するとこうなる。

f:id:xx3stksm:20181213215015j:plain

 横軸はサンプリング周波数を1として表示。x64のOSRだと、1が3.072MHzで0.1が307.2KHz、0.001が3.072kHzになる。二次の場合、0.1ぐらいまでノイズは上がり続ける。g0で出来る共振点が、0.005(15kHz)あたり。g0という局部帰還を入れると、ない場合の赤に較べると、ノイズシェービングの効きが良くなる。なので入ってる。

 

 けれどもこれは、グラフにあるように直流分に対しての減衰量がゼロにはならない。g0=0の赤ならば、そんな問題は起きない。偶数次の場合にはこの問題があるので、四次であれば二つの局部帰還のうち一つはゼロにした方が良い。それでも十分にノイズは落とせるので。赤の傾きは、二次の理論通り40db/decとなっている。

 

 実際に使う場合、二次ではノイズレベルが高すぎる。計算方法は同じなので、maximaを使って五次で計算させる。昔はこれを手計算でしていたので大変。間違える可能性はあるし、グラフ化するのも大仕事。今は簡単に出来る。これが五次の時の分母。

f:id:xx3stksm:20181214145718j:plain

こっちが分子。

f:id:xx3stksm:20181214145745j:plain

五次なので係数は分母にr0,j0,r1,j1,r2。分子にg0,g1。これを代入してグラフにするとこう。

f:id:xx3stksm:20181214145921j:plain

 五次の場合は、傾きが30dB/octになる。g0とg1で共振点を作ると、共振点なしの緑よりも落ち具合は良くなる。但し、零をDCに持つ項が一次となるので、共振点から上がってきた後は、緑よりも落ちが悪い。FPGAで実装する場合、リソースに余裕がないならば緑の方が遥かに簡単。現実論として、十分なノイズ特性は稼げるので、共振点の必要もない。

 

 シミュレーションは所詮仮説に過ぎないので、実物で確かめる必要がある。これは一ビットの出力なので、実際のデジタルデータをそのままFFTしてしまえば、その特性が分かる。一ビット以外であれば、DACのアナログ出力をアナログフィルター無しで入れるしかない。測れなくはないが、50Ωのプローブが使えないのでS/Nが悪化する。一ビットは楽。

f:id:xx3stksm:20181214151111j:plain

 これはg0とg1がゼロなので緑の特性。下の5MHzスパンが全体像で上が拡大図。シミュレーションでのNTFは、100kHzぐらいで平坦な特性になる。実物もそのあたりで少し飽和し始め、そこに至る間は理論通りに30dB(6dBx5)/octで上がってる。元のデジタル信号は3Vppぐらい。これを50Ωの関係で16dBぐらい落としている。

 

  3Vppは1Vrmsで120dBuVだから、この時に出している12kHzはアッテネーターなしだと120-16-6=98dBuV。実物との差は主にDAC側でのアッテネーター。一ビットは、100%の変調を掛けると必ず発振するので、幾らかのアッテネーターが必ず入る。-6で50%に落とすのは必須。普通は更に2dBぐらい落とす。残りはDAC内のフィルターでの減衰とか誤差。

 

  シミュレーションとの違いは、誤差のEかと思う。これが定数ではないので差が出るのでは。1Mから2Mにかけての成分もそこら辺りから来るのだと思う。でもL0(z)とL1(z)での解析は、相当に正確で十分に実用的。

 

 これは5MHzのスパンになっているけれど、その周期性は明らか。分母と分子の複素数がサインとコサインなので、言うまでもない話ではあるけれど、実物を見ないとこの周期性には気が付かないもの。分数の形になっているIIRであっても、言うまでもなく周期性を持つ。デジタルのシステムは離散システムと言うが、周期性システムと言った方が思い込みは防げる。

 

 アナログのような落ちっ放しのLPFなんてものは、決して実在しない。無限に高いサンプリング周波数を使わない限り。sinc関数はこれを暗黙の裡に想定している。なので現実世界で使おうとすると、思いもよらない所で足をすくわれる。デジタルとは、因果応報の輪廻の如く、必ず繰り返す周期性システム。

 

 おまけにSACDFFT。傾きからして五次ではないと思う。でも少し五次よりも上がり始めが早い感じ。もうずいぶんと昔の規格なので、変調のかけ方がまだ完璧でなかったんだと思う。

f:id:xx3stksm:20181214153441j:plain

 

  

 

 

RpiのIISで、DSMの脆弱性に気が付く。確かに彼等はジッタに弱い。

Linuxに手を出すのは、ちょっと敷居が高い。でもRpiのIISは実験用の信号源としては役に立ちそうなので、今回のDAC基板はIISのピン配置をRpiに合わせてある。大きさが少し違うのでHATとは言えないけれど、そのままRpiにはつながる。ドライバーはなくても、generic IISで信号さえ出してもらえば大丈夫。こんな具合。

f:id:xx3stksm:20181205204204j:plain

普通のHATだとこんな感じ。

f:id:xx3stksm:20181205204321j:plain

RpiのIISはジッタがテンコモリであるとは周知の事実。では数字的にどの位なのかを確かめたくて、Rpiにもつながるようにした。測ってみると、確かに問題あり。バチモンのpifiberryで調べたら、対策なしではCD並の16bitぐらいの精度しか出ない。勿論、これはRpiの問題なので、どんなDACをつないでもDSMでは同じ結果になる。

f:id:xx3stksm:20181205205053j:plain


16bitのファイルでも24bitのファイルでも、同じぐらいのS/Nになってしまう。歪の-90dB前後はまあこんなもの。現実の問題として、96dB程度のS/NはCDがそうであるように、ノイズが聞こえる事はない。問題になるのは、デジタルのクロスオーバーを使う時で、中音はスピーカーの能率が高く尚且つ耳の感度も高いので、ここでは実害が出る可能性あり。

 

どうしてこれがジッタの影響かというならば、話は簡単。ジッタ対策をしたクロックに入れ替えると、24bitファイルの劣化がほとんどなくなるので。pifiberryでは、後付けのリクロッカーというHATを間にかますしか手はないと思う。そこまで拘る必要はないけど。

 

こういう時は、市販品ではなくてDIYが真価を発揮する。自作ものであればクロックの補償は簡単に出来るので、befpreとafterを比べるならば一件落着。こういう結果になる。

f:id:xx3stksm:20181205210043j:plain

クロック補償なしで、そのままつないだ状態が上。OSRの関係か、更に悪化してS/Nは88dB程度になっている。補償してやると、20dB近くも改善する。歪もそれに連れて良くなる。x256のOSRにして5bitのDSMにすれば、S/NはSDカードからの読み出しとほぼ同じで110dBぐらいになる。これが本来の特性。

 

但しこれには少し裏がある。というか表であれば、こんな事は起きない。今までずっと表一本で来たので、ここまでジッタが影響するとは初めての経験。表というのは、マルチビットの事。マルチビットとDSMというのはかなり境界が曖昧で、ここでは元のDACチップが14bit以上をマルチビット、6bit以下をDSMと言っている。NFBはどちらも入っている。

 

その間はどうなのかというならば、考えない。普通のオーディオ関連でそこを使う事はないので、ない事にする。敢えて使うとするならば、両者の中間的特性になると思うけど。ハッキリしているのは、マルチビットは圧倒的にジッタ耐性が高い。なのでRpi程度のジッタであれば、ほとんど特性に劣化はない。こんな具合。

f:id:xx3stksm:20181205211336j:plain

補償なしだと、30kHzを少し超えた所に変な成分が出ているけれど、歪やS/Nはほとんど劣化しない。-100dBに少し欠ける程度の歪はかなり良い部類。スピーカーではどんなに良くても-60dB程度の歪はあるので、-100dBで特に問題はない。

 

何故マルチビットがジッタに強いかは、出している出力の問題。基本的にマルチビット(PCM)は1kHzであればそのまま1kHzを出力する。x512のOSRでサンプリング周波数が上がっていても、出力は低周波のまま。DSMでは、x512のOSRなら10MHz近い周波数を出して、そこから低周波分のみを使っている。

 

クロックジッタの影響に関しては、多くの誤解がある。サンプリング周波数とDACの出力周波数の比が関係する。昔のデータシートには必ずそういう事が書いてあった(pcm1702の頃)。今はオーディオメーカーがジッタで商売する様になっているので、そんな不都合な事実は書かないようになっているみたい。高速ADCやRF用のDAC関連にしかそんな記述はない。詳しくは、こういうの。

https://www.analog.com/jp/analog-dialogue/articles/analyzing-and-managing-the-impact-of-supply-noise-and-clock-jitter-on-high-speed-dac-phase-noise.html

出力が1kHzと10MHzでは、ジッタ耐性が80dBも違うよという話。

 

x64のOSRでも1MHzぐらいを出すので、マルチビットの10kHzと比べるならば、40dBも耐性が違ってくる。DSMがジッタに弱いという話は時々目にする。但し、サンプリング周波数が高いのでそうなる、という方向で言っている事が多いと思う。正しくは、出力周波数が高いのでそうなる。つまり一番のジッタ対策とは、マルチビットを使う事。

 

実際のRpiのクロックを調べるとこうなっている。

f:id:xx3stksm:20181205213041j:plain

RpiにはデータサンプリングのBCLKしかなくて、MCLKというのは出ていない。これは192kのファイルの時のBCLK。2nSぐらいのジッタがある。下はヒストグラム。前の濃いめの波形と後ろの少し薄めの波形は、頻度の違いでそうなっている。茶色の四角内で頻度を比べると、四対一ぐらいと分かる。五回のうち四回が前の波形で、一回が後といった按配。80nSぐらいの周期で2nSのジッタはかなり大きい。

 

でもまあ今一つ分からないので、FFTでみるとハッキリする。テクトロの3000シリーズは、おまけで少し本格的なスペアナがついている。オシロの他にスペアナはちょっと負担だけと、一体物ならば使って損はなし。おまけとは言え、かなりの精度が出る。

f:id:xx3stksm:20181205213853j:plain

本来の周波数に対してワサワサと、余計なのが沢山ついている。ノイズ電力という見方をするならば、40dBもS/Nがない事になる。時間軸波形からの類推として、まあこんなもんかと思う。本来はこんな具合になるのが普通。

f:id:xx3stksm:20181205214209j:plain

ほとんど測定限界で、本来のクロックのみしか観測できない。これが正しい。但し、市販チップの場合、これはほとんど意味を持たない。普通はこれを元にして内部のPLLで必要なクロックを作り出す。それは基板の実装状態であるとか、電源の質に大きく依存する。現実のクロックが如何なものかは外部からは分からない。出力の信号から判断するしか手はない。

 

自作品の場合は、DACチップに入っているそのままのクロックを見れる。これもそう。勿論、最終判断は実際の1kHzなどの信号で測る。Rpiの場合はこんだけ悪いので、ハイエンドとして使うのであれば、クロック補償は必須。或いは、マルチビットを使う。

 

リクロッカーと言っているのは、大きめのバッファメモリー(512k)を用意して、FIFOとして使うHAT。なのでいずれはオーバーフローするけれど、10時間程度は持つだろうから実質これで問題ない。うちの基板は単純にPLLで補償する。LRCKはジッタがないので、ここからクリスタルのPLLで再生用のクロックを作るのが簡単。

 

16ワード程度のFIFOを用意してRpiからのBCLKで書き込んで、PLLで作ったクロックで読みだすだけ。勿論、オーバーフローはしない。クリスタルのPLLは安定なので、ジッタに弱いDSMであっても差し支えなく動作する。

f:id:xx3stksm:20181205215421j:plain

ほんの少しだけ余計な成分が出ているようだけど、DSMでも問題なく使える。これは光入力の信号に対してロックした時のスペクトル。IISよりはずっと条件が悪い。光はフォトカプラーのジッタが大きいので、TOSLINKの場合こんな特性は望めない。CS8416だとこうなる。他のレシーバーでもTOSLINKならば似たような特性にしかならないはず。

f:id:xx3stksm:20181205215912j:plain

 

48kHzの倍数になるのは、元が48kHzの信号だから。時間軸だとこう。

f:id:xx3stksm:20181205220025j:plain

RpiのIISとほぼ同じく2nSのジッタ。カプラーでのジッタなので、綺麗な正規分布になる。今までこれをそのままクロックとして使っていたけれど、マルチビットしか使っていないためか、出力にジッタの痕跡が出る事はない。DSMだと出る可能性はある。同軸で入れるならば、こんなに悪くはない筈。

 

しかし現実問題として、光で完全な分離をしないと他に致命的な問題が出るので、導体でつながる同軸はダメ。アイソレーターなんてのは気休めにしかならない。あれは元々アースグランドの電位差でICが壊れないようにするもので、スイッチング電源から出るような高周波ノイズは素通しと思った方が良い。プラスチックに勝る絶縁体はない。なのでDSMを使うのであれば、光に対してのジッタフリーなクロックの再生が必須。

 

TOSLINKを使わなければカプラーのジッタは正規分布なので、これを平均化すると相当に正確な基準信号が作れる。それを元にしてクリスタルのPLLを使うならば、光入力に対しても上に挙げたように安定なクロックが作れる。クリスタルのPLLは引き込み範囲が狭いので、市販品で使うものはないと思う。大きく外れた周波数で出してくる装置があったりするので。

 

昔風のHC-49型は大抵は在庫品で比較的引き込み範囲が広い。多分24.576MHzに対して、+1kHzから-1kHzぐらいは引き込める。500Hz外れるものはあまりないので、大抵はこれで間に合う。特に自分用であれば全く問題はない。

 

どうして光が必須であるかは、コモンモード電流の問題。コモンモード電流とは、一本つないだだけなのに、何故か電流が流れるという不思議。例えるならば、雀は感電しないが、大型の鷲や梟は感電する。電子機器も、オーディオ製品のような微小電圧を扱う場合、発電機とは些か様相が異なる。アースグランドに対する対策が正反対。強電では、電流を流して感電防止、弱電では流さないようにして感電防止。

 

電柱にとまった鷲の翼が電線に触れると、感電する。この事故はとても多い。電柱は接地されているのでアースグランドと等電位。電線は高電位。故に感電。鷲は知らないだろうが、お前は既に触れている。アースグランドに既に触れているので、電線に触れるだけで閉回路が出来て感電。雀は電柱と電線の両方に触れる事はない。電柱のみか電線のみか。故に感電しない。

 

電子機器も同じ。商用電源を使う限り、お前は既に触れている。そして光などで絶縁されない限り、浮遊容量などを介して必ずノイズ源につながってしまう。結果として閉回路が出来て、知らない間にコモンモード電流が流れている。それは多くの場合、普通のノーマルモードに変換されるので、不可思議なノイズとなって現れる。或いは、聞こえる。電線で音が変わるのは、嘘ではないと思う。導体の電線はコモンモード電流の経路になっている。材質に意味はなく何処を這っているかがキモ。実際、空中に吊ると良いと言っている人もいる。

 

閉回路が出来ない限り電流は流れない。微小電圧を扱う場合は、アースグランドから分離する事。コモンモード電流は二本つなぐ必要はない。なので知らない間に流れている。アースの場所を変えると大きく音が変わるとは、誰もが経験している事実。そしてその対策は皆違っている。状況依存なのでそうなってしまう。強電的に流す方向で考えるならばそうなる。

 

元を辿るならば話は簡単。流さない事。雀になれば感電はしない。アースグランドから分離するならば、一本は外れる。感電の可能性はずっと減る。そして対策も簡単。微小電圧は、アースグランドにつながない。

 

 

DSMだって勿論-90dBFSの出力は出来る。こけちゃうのもあるにはあるが。

 pcm1704の代替品はRF用の高速DACに落ち着いて、結果としてx512(24.576MHz)までのサンプリングが出来るようになり、アナログLPFなしでもほぼ完全な元信号の再現が可能になる。そしてx512まで行っているので、FPGA次第でDSMとの二刀流も可能になった。期せずして、PCM(マルチビット)とDSMの奇妙な同居。

 

  市販のチップの場合、両者は水と油のようで共存は無理。製造プロセスが違う。高速DACとFPGAというのであれば、神仏混淆のように融通無碍で、寺なら松で神社なら杉かという程度の差。原理的にも両者を分けるのはNFBの有無なので、これはデジタル的にどうにでもなる。マルチビットも16bitを超える精度は無理なので、どこかでDSM的発想に切り替わる。

 

 真正のマルチビットがA級でDSMに変わるとB級動作になるようなもの。無帰還の

 A級がマルチビットで、B級のNFB付きがDSMと言ってもそんなに的外れではない。DSDを、信号を疎と密で表すとか、PWMの一種とするよりはずっと正確。x512ぐらいまでの高速サンプリングさえできれば、あとは何とかなる。微小電圧で若干の違いはあるとしても。

 

 DSMで-90dBFS(0dBFS=6Vpp)を出すとこんな感じ。1bitの量子化器で、x256OSR。FPGA(spartan6)の容量の関係でDSMは五次。Artixならば七次に出来るので、x128OSRでもほとんど高調波ノイズは出ない。但し1bitというのは中々の曲者で、少しばかりの工夫が必要。そのまま1bitで出すと、こんな特性にはならない。20dB近くは悪くなる。

f:id:xx3stksm:20181127185331j:plain

 1bitDSMに相対誤差がないというのは机の上での話で、現実世界では通用しない。パルスの立ち上がりと立下りの時間がゼロでないとこの仮定は成り立たなくて、それは不可能であるので実際はかなりの誤差を持ってしまう。結果として、5bitぐらいにして相対誤差を減らす方法論に較べると、圧倒的に不利になる。試してみれば分かる事。

 

 なので1bitは特に必要ないのだけれど、例えばpcm1792にDSDデータを渡したりとか、DSMなのにデジタルフィルターという完全な二律背反が出来たり(これは童顔なのに巨乳なんてのとは些か次元を異にする)、量子化器の1bitと5bitの変更は簡単なので、おまけとして付いてる。

 

 変調器自体は1bitなので五次のDSDとして機能するし、デジタルフィルターを通して5bitまで拡張してからAD9717に出力するので、ノイズシェービングで取り切れない高調波ノイズもデジタルの領域でかなり落ちている。5bitであっても、パルスに対する要求は立ち上がりと立下りともにゼロ、で変わりない。但し、振幅が1/32になっているので誤差もその分小さくなっているというだけの事。

 

 完全な1biであれば、仮に-90dBFSの信号であっても出力は常に最大振幅(約1Vpp)で振れている。DACのレイルトゥレイルという言い方が相応しいかも。そこから200μVppの信号を引っ張り出そうというのは、少し話がうますぎる。これを5bitにしてしまえば、30mV(1/32≒30mV)ぐらいの中から200μVなので、ずっと自然な感じになって数字も良くなるという当たり前の話。

 

 但しやっぱり、一番下の30mVを使うしかないのは事実。30mVよりも下は、全部このLSBの30mVで賄っている。1bitのDSMならば、最初からすべてを最大振幅の1Vで賄う。16bitあるのなら、1/65536までは1bit動作にならないという事。現実論として、相対誤差の補正が出来るのは6bit程度までだから、1/64までというのが最大値。

 

 そんな訳で、x256ぐらいが特性としては良さそう。それより下は高調波ノイズが少し残る。x512はやはりパルスの正確性に難が出て来るのか、x256よりは少し悪い感じ。調整次第かも知れないけれど。1bitでここまで出れば上出来と思う。

 

 この信号をpcm1792のDSDモードに入れるとこう。左の小さいのがpcm1792の基板。表示のDSM_5bitというのは所謂フェイクニュース。これは実際の測定時ではなくて、写真撮影のために出した表示だと思う。DSM_1bitというモードにしないとDSDは出ない。

f:id:xx3stksm:20181127192718j:plain

 これが測定結果。pcm1792はデータシートではx256まで入る。実際には、x512でも動作した。但しIV変換の関係か、或いはpcm1792自体の問題か、x512はあまり良くない。AD9717と同じ傾向。この数字だけからするとあんまり良くないが、pcm1792は0dBFSまで振幅を上げてもあまりノイズが増えない。

 

 これはとても珍しい特性で、総合的には相当に高い能力を持っている。二個或いは四個のパラで使うならば、SNでは他を圧倒しそう。AD9717よりも良い。しかしTHDはそんなに良くはない。両方が良いものは中々ないので、やっぱりトレードオフという所に落ち着く。

 f:id:xx3stksm:20181127193133j:plain

 

 これがAD9717の5bit。これはあんまり良くない。

f:id:xx3stksm:20181127192226j:plain

 これは0dBFSのような大振幅の時とのトレードオフでこうなっている。0dBFSを優先すると、皺寄せがどうも-90dBFSに出て来る。0dBFSの時のTHDを少しだけ犠牲にすると、1bitと同じぐらいの特性になる。1bitの場合は、あんまりそんなトレードオフが出ない。理由は不明。微小電圧での特性は、マルチビットに少し分があるのかなと思う。DSMが求める理想条件が崩れて来るので、まあ仕方ない事かも。

 

 少し蛇足を。まずはRpiのHATでpifiberryとかいうやつ。$50ぐらいの中国製。DACはpcm5122。pcmの96bit/24bitのファイル。 値段と手頃な大きさからして悪くない。volumio2でデジタルボリュームも使える。ここでは振幅が小さいので、クロックジッタの影響はない。RpiのIISは言うまでもなく不完全なので、無補償で0dBFSにするとDACとは無関係に16bit程度のSNしか出ない。f:id:xx3stksm:20181127194356j:plain

volumio2の場合LRCKにはジッタがないので、DACマスターにするまでもなく、読み出しのクロックをLRCKから作るのが簡単。FIFOは最小の16ワードぐらいで間に合う。512kバイトぐらいのSRAMで非同期読み出しするようなHATもあるけど、volumio2限定、或いはドライバー限定ならば、クリスタルのPLLが簡単。

 

 うちのDACは寸法としてHATにならないけれど、IISのコネクターはRpiと同じ並びなのでそのままつながる。ドライバーはgeneric IIS。クリスタルのPLLで完全にジッタは取れて、SDカードからの読み出しなどと同じ特性になる。実験用以外でIISの必要はない。SDカード若しくはTOSLINKが実用。TOSLINKは非同期取り込みなので、オプトカプラーのジッタは影響せず、SDカードと同じく完全にアースグランドから絶縁できる。IISではこれが不可能。

 

 最後はこういうの。中国製のES9038だったか。$50ぐらいの。これはちゃんとDSM_1bitの表示になっている。IVは電流モードに変えてある。こっちの方がメーカーの推奨で特性も良い

f:id:xx3stksm:20181127200228j:plain

 

 これがx128(6.144MHz)のDSD。pifiberryとほぼ同じ。

f:id:xx3stksm:20181127200506j:plain

 

 x256にすると、こうなってしまう。これは詰る所、軽トラで100km/hを超えると、車内はがたつくしエンジンはうるさいし、になるのと同じ。と言っても、チップ自体の責任ではないと思う。写真では分からないけれど、値段から推測できるようにこれは普通の両面基板。

f:id:xx3stksm:20181127200718j:plain

  チップ自体が悪いのでないと言いつつも、これは100MHzのクロックを外から入れている。両面基板でそれを実装すると、物理法則は嘘をつかないのでこうなってしまう。高速動作をさせる場合、普通こういう事はしない。グランドプレーンを持った多層基板にするのも常識ながら、外からこんな高い周波数は入れない。

 

 最近のFPGAだと内部では500MHz近くでの動作もある。spartan6でも、200MHzぐらいはある。でも外からそんなのは入れない。うまく動かないので。外からはせいぜい50MHz。25MHzぐらいが無難。内部で必要な所まで上げる。そうしないと到底高速動作は無理。両面の基板に100MHzのクロックは常識として無理。そこに持ってきてIVのパラレル動作というのは、ちょっと現実から遊離している。

 

 実装次第で何とかなるかもだけど、大抵はこんな具合にこける。こうなると何をしても音が変わるという状態になって、お客さんはそれをむしろ喜ぶので双方の利害が一致ではあるけれど、こういうものに手を出す必要はないというのが結論。pcm1792の方がずっと素性が良いし、高速DACFPGAという組み合わせもある。pifiberry のpcm5122は両面基板でもこけない。好みの問題であるけれど、無意味に実装の難しいものに手を出す必要性は感じない。

 

 

pcm1704の替りを見つける積りが、DSMとの同棲関係に。

 最初に自作したDACは、もう20年近く前の事でpcm1704だった。その後は暫くそっち方向にはご無沙汰で、再び始めたのは部屋を建て始めた頃で今は死語となりつつある南ア大会のブブゼラの音が鳴り響いていた。時代は既にDSMに変わっていたけれど、pcm1792と比べてみたら、どうもやっぱしpcm1704が良くて、以来今までマルチビット専門。クラシックに必須の濃いい低音がDSMでは出なかった。

 

 とはいえpcm1704は段々と廃版に近付いていたから、替りを模索しつつデジタルのクロスオーバーとSDカードからの読み出しも。今年はもう完全にpcm1704の絶滅宣言。自分で使う分は昔の在庫で賄えるけど、なんとか後釜は見つけられたような感じ。

 

 pcm1704の最大の特徴は、グリッチが出ないこと。マルチビット系のチップは、TDAxxxxとかADxxxxがフェイクも含めてまだまだ手に入るし、産業用のLTC2642とかも含めるとそこそこある。でもグリッチフリーはpcm1704だけと思う。pcm1702は、はてどうなのか寡聞にして知らないが。

 

 中でも素性が良さそうだったLTC2642は、暫く使ってみて悪くはなかったけれど意外な事にpcm1704とは少し音質に差があった。LTC2642は、ビデオ映像のように鮮やかで陽性。pcm1704は、フィルム映像のようで些か解像度は落ちるものの味がある。結局の所、やっぱり元のpcm1704に戻ってしまった。グリッチのあるなしが原因か、定かではないにしろ。

 

 LTC2642は16bitのモノトニシティを保証しているので、THDを測るとpcm1704よりも良い。16bit精度であることは、軽いDSMでそれ以上の解像度に出来るので問題にはならない。精度は残留ノイズで決まる。SNが若干pcm1704よりも悪いのは、グリッチの影響もあるのでないかと思う。悪くはないが置き換えは無理かなあ、との結論。

 

 DACに関してはここで頓挫。レコードのデジタル化にADCが必要で、精度の高いものが用意できるならば、DACのノイズ解析にも使えて一石二鳥となるので、暫しADCに寄り道。そのADCが去年ぐらいには完成したので、捲土重来で再びpcm1704の代替品探し。そのためには歪の小さい発振器が必要となるので、ちょっと手を出したDSMにはまってしまい、一年ぐらいかかった末に何とかマルチビットも終着駅。

f:id:xx3stksm:20181127141340j:plain

f:id:xx3stksm:20181127141621j:plain

 ADCはSAR型のAD7960。ADCも最近はほとんどがDSMになっているけれど、SNに関しては圧倒的にSARだと思う。THDは似たようなもの。SARは自前でアンチエイリアシングのFIRフィルターであるとか、IISの変換などを作る必要があるので、産業用が多いかも。市販品で音声用に使っているのは稀と思う。

 

 AD7960を最大の5MHzサンプリングで使い、個体間の違いがほとんどないのでLとRをインターリーブして10MHzにするならば、125dBのSNが確保できる。DSMのADCは、結構LとRの差があるのでこういう使い方は出来ない。多分、DSMで120dBを超えるのは現実論として無理。レコードのデシタル化にこんな性能は意味ないけれど、測定用も兼ねるので去年作った最新版ADC。

 

 これで色々なDACチップの微小電圧特性を見る。THDは、スピーカーや録音時のマイクの性能で制限されるので参考程度。SNは、デジタルのクロスオーバーを使う場合、かなり問題になる。人の耳の一番感度の高い2kHzから4kHzぐらいは、通常高能率のホーンを使う。低音との感度差の関係で、ここでは信号レベルがかなり落ちるので、結果として実際のSNは悪くなる。現実的に必要なSNをCDよりも悪い90dBとしても、元のSNは110dB程度確保しておくべき。

 

 これが今使っているpcm1704。下がADCの出力で、上がそこから基本波の1kHzを取った残留ノイズ。-90dBFS(0dBFS=6Vpp)での結果。26dBのSNだとこんな感じの波形。これはパラレルなしの一個だけの特性なので、かなり良い。今はもうアラブの金持ちぐらいしかできない贅沢で、四個パラにするならばあと6dB良くなるという按配。白い点が実際のサンプリングデータ。

f:id:xx3stksm:20181127143437j:plain

 こちらがちょっと鮮やか過ぎた感のあるLTC2642。3dBほど悪い。グリッチの影響があると思う。

f:id:xx3stksm:20181127144048j:plain

 とはいえ、LTC2642のグリッチは0.5nVsecという事で、産業用や音声用の中では一番良い。実測値もそれに近い。ただ問題なのは、これが全ての1/64の境界で出てしまう事。一番大きいのは所謂このゼロクロスの時みたいだけど。その影響は数字的に否定できない。音質面での違いと関連するかは分からないが。一番のとびっきりをもってきても、このぐらいは出てしまうのが現実。

 

 ディスクリートで作っているマルチビットDACがどの程度かは、言わずもがな。知らぬは亭主ばかりなりで、世の中には知らない方が幸せな事がいろいろある。これもその一つ。知らなくていい事を、それを知る前に分かるのであれば、それは賢者というもの。the wisest とは、そんな人。

f:id:xx3stksm:20181127144231j:plain

 このグリッチ問題は、「ゴルディアスの結び目」のようで視点を変えないと解けない。アレキサンダー大王の剣は、何のことはないRF用の高速DAC。例えば、少し古めのDAC2904は0.002nVsec。これは当然と言えば当然。こんな100MHzを超える高速DACの場合、200nsのグリッチが出てしまうと全く話にならない。

2mV*1ns=0.002nVsecだけど、実際はほとんどゼロ。 

 

 最新の物になると、もうグリッチのデータは出ていない。どっちみちゼロなので書く意味がない。但し元々が広帯域用なので、狭い帯域の音声用に使えるものは限られる。狭帯域では、多分内部の電流源の特性でSNが良くない。AD9717(14bit)が今の所一番良い。この手のRFの旗艦チップAD9747(16bit)は、狭帯域には全く向かない。

 

 AD9717はデュアルなので最低でも二個パラ。でもまあそんなに高いものでもないので(¥2000)、四個パラにするとこう。パラにすると、勿論SNは単純に良くなる。最新型らなると、更にその上におまけがついてくる。この手は内部に自己校正の機能がある。これは512*32=16384で、32バンクの512DACで出来ている。

f:id:xx3stksm:20181127152033j:plain

 誤差が出るのは次のバンクに移る時で、LTC2642は多分64*1024=65536。バンクが変わる時、AD9717はグリッチは出ないけれど、誤差は大きくなる。その誤差を内部的に校正できるようになっている。スロットマシンのようで、何時当りが出るかは分からない。何度か試して良いのを使う。

 

 四個パラの場合、それぞれが別個の校正をするので、時々大当りが出る。この校正値は保存可能なデジタルデータなので、当りが出るまでくじを引けば良い。二夫にまみえず、なんて禁欲は必要ない。何度でも何度でも望むがまま。この大当りはTHDに関するものなので、SNにはあんまり関係しないけど。

 

 昔ならば、奮発して20個ぐらいのチップを用意して、その中から選りすぐりの4個を選ぶのと同じ。だいたい20回も籤を引けば、そこそこの当りは出る。勿論、何回引いても初期費用のみで追加料金はゼロ。温度特性も大きく改善するので、四個パラはかなり強力。八個もソフト的には試せる。単純にADCのデジタル出力を足し合わせるだけ。

 

 ハードウエア的に加算しても、劣化なしで同じ結果になる。何故かと言えば、IV変換は抵抗一本のパッシブ型。ほとんど電位差のない信号同士をつなぐだけなので、劣化はない。pcm1792や音声用のDACの場合、基本的にパッシブ型は無理。コンプライアンス電圧が低いので、SNが悪化する。頑張ってパッシブやってる人もなくはないけど。

 

 RF用はトランスでのIVが標準。高周波なのでSMDの小さなトランスで間に合う。音声用のごつい出力トランスは不要。しかし1Vぐらいのコンプライアンス電圧は許容範囲なので、音声用にはパッシブが最善。単純につなぐだけ。NDAは論外だし興味もないけど、ESxxxxも基本的には並列化で性能を上げる。でもバッシブは無理だから、現実論として劣化なしの高電流はあり得ない。それを使いこなしの問題とするならば、オーディオメーカーが喜ぶだけで、ユーザーはやらずぼったくりの憂きめ。簡単に実装できるのが優れた製品というもの。

 

 うちの環境で使うためには八台必要。来年の春までにはどうにかしたい。違和感なく乗り換えられるはずなんだけど。