世の中のオーディオの機械では DA のビット数と、サンプリング周波数が話題になっていますので、そこのところをちょっとおさらいしておきます。
なお、デジタイズするチップ自体が持っているエラー(Integral nonlinearity と Differential nonlinearity)は話題にしません。
まずビット数の話 (電圧の量子化)
これはダイナミックレンジに直接関係することです。 ダイナミックレンジは小さい方がノイズレベル、大きい方が最大出力として、その開きがどれほどか、、、という目安です。
昔の真空管時代はどう頑張っても 126dB ぐらいでした。 今はノイズの少ない素子が出回っていますからもっとよくなります。
私の好きな TI の LME49720 を取り上げてみます。 ノイズは 2.7nV/sqrt(Hz) という少なさで、出力は +-14V となっています。
これは単位の換算が必要です。
IHF-C で測定するとしたら帯域は 10kHz ですから、ノイズは 0.27uV ですが、これは実は rms です。
で、p-p にすると、ノイズですからサインの 3 倍ほどを取って 2uV ほどになります。
これと 28Vp-p の開きは、14e6 倍、実に 143dB ということです。
デジタイズの時のヘッドマージンを 6dB 確保すると 28e6、149dB です。
では、これは何ビットに相当するでしょうか?
25 ビットになります。 2^25≒33e6 =150dB
ですから、25ビットほしいのですが、ちょっと中途半端で、32 ビットの ADC はスピードとの勝負になります。
24 ビットを使うのは「我慢しながら」という感じでしょう。
サンプリング周期 (時間の量子化)
右の図はサンプリングに伴う誤差の概念を表したものです。
クロックの瞬間にサンプリングしてデジタイズしますが、最下位のビットのどちらに振り分けるかによる「丸めの誤差」があります。
これはビット数を増やすと緩和されます。
また、信号が変化しているにもかかわらず、次回のサンプリングが遅すぎると信号との差が開いてしまいます。
サンプル遅れによる誤差です。 実際には、この「遅れによる誤差」はフィルターによって少なくできますが、それも併せて説明します。
下の図は、8bit と 16bit、サイン波の 1/4 区間を 100 分割と 1000 分割するという 4 つのケースで誤差を計算したものです。
まだフィルターは入れていません。
ビット数が増えると丸めの誤差によるばたつきが無くなります。 また、サンプルが多くなると遅れによる誤差が逆比例的に少なくなります。
フィルターをかけるとこの遅れによる誤差は軽減できます。
その様子を見ますが、分かりやすくするために単純化します。 信号は直線で1秒に1V 上がります。 サンプリングは正確に毎秒です。
ビットは十分にあるとします。
ですから、丸めの誤差はありません。 下の図です。

左側の図で赤の細い線がデジタイズした値で、右側の図の赤い線がそのエラー量を表します。
この赤い線に1次のフィルターを掛けます。 カットオフ(-3dB)の周波数はクロック周波数の 1/4兀 (0.08) 倍です。
分かりやすく言うと、RC の一次のフィルターで、RC 積(時定数)がクロックの2倍の2秒ということです。
その結果が青い線です。 フィルターですから群遅延がありますので、信号を適度に遅らせた線との差を見たのが右の図の青い線です。
0.08 倍の周波数ですので 20dB を超える減衰が得られます。
大雑把に言うと、クロックを減衰させればいいのです。 しかし、信号は減衰させてはいけません。
フィルターの性質は、クロックのところと、その調波(特に3倍)のところにヌルのある逆チェビシェフがいいような気がします。
取り扱う信号の一番高い周波数とクロック周波数との間を十分開けて、急峻なフィルターを使うということ。
エリアス
エリアス(Alias)はサイン波発生器に関してはほとんど関係ないことなのですが、DAC や ADC の話にはつきものですので、ついでに触れておきます。
エリアスという言葉は電気信号でよく使われます。 光学の世界ではモアレと言います(Kodac の副社長は光学でもエリアスと言っていました)。 また音の世界ではビートとか唸りとも言います。
どれも同じことで、近接した周波数(空間周波数)の間の干渉でそれらの差(あるいは和)の周波数の信号が現れるときに、その現れた信号をエリアスと呼びます。
特に差の信号が話題になります。
右の図ですべてが語られています。
音楽などの信号が赤色のスペクトルを持っているとします。 人には聞こえない 30kHz といった高域の信号も入っています。
これを 40kHz でサンプリングした場合は源信号に折り重なってきます。 30kHz のスペクトルは 10kHz になって現れ、人の耳に届きます。(私は 10k は聞こえないけど)
以後、どんな加工をしても取り去ることはできません。
エリアスを避けるには:
1.信号に含まれている最高周波数スペクトルの2倍以上でサンプリングを行う。
2.事前にサンプリング周波数の半分以上の信号が ADC に入らないようにフィルターでカットしておく。
の両方を行います。
なお、この「サンプリング周波数の半分の周波数」のことをナイキスト周波数といいます。
サイン波信号発生器

以上の議論で 24 ビットを使ったら何とかものになるサイン波発生器ができそうです。 右の図です。
歪率は(ノイズを除いて)3e-8、0.000003% 位が見込めそう。
実際にはもう一桁悪くなるでしょうが。
それで、DAC にサインのデータを刻々与えないといけません。 データはどこかに予め溜て置いて引き出すか、その都度計算するかです。
どこかに置いておく(テーブル)方法には可変周波数にしたときにちょっと問題があります。
上記のフィルターは最高周波数のちょっと上に設定します。
今仮に DAC への供給を角度1度ごとに行おうとすると、一番低い周波数を発生させたときに上で述べたサンプル遅れによる誤差が消せなくなります。
フィルターがずっと上のほうにあって、クロックがそこよりも低くなる可能性があるからです。

まあこれはデジタルフィルターにすれば解決はします。
1度ごとに行うのではなく一定時間ごとに行おうとするとテーブルのサイズがばかでかい物になります。
それで、ここでは DSP(Digital Signal Processor) を使って計算で出す方法について考えます。
計算した結果が 24bit の精度以上でないといけませんので、計算方法を工夫する話です。(ここでやっと話がつながりました)
サインカーブを計算するのはどの教科書をみても Taylor 展開の式しか出てきません。
サイン波は角度 0 で何回でも微分できますから Maclaurin(マクローリン)展開になります。
1 1 1 1 1
Sin x = - x - - x^3 + - x^5 - - x^7 + - x^9 ...
1! 3! 5! 7! 9!
(x: ラジアンで表した角度)
という無限に続く式です。
これを何項目で打ち切るかによって誤差が異なりますし、無限にやるわけにもいかないので、早く打ち切りたい(計算スピード)という事情もあります。
右上のグラフの中で、緑の線は最初の 5 項で打ち切った時の誤差です。 60 度で 24 ビットの限界を超えています。 90度では 3500 ppb まで悪化します。
もっと項数を増やすと、 6 でもぎりぎり足らなくて 7 項が必要というのがわかります(7項で誤差は最大 0.7ppb)。
この緑のカーブですが、なんかバタワースのカーブに似ていませんか? 40度ぐらいまではやたら誤差が少なくて、45度を超えると途端に大きくなる。
数学者の方がそこに気がついて、40度までに少しの誤差を許して、50度以上のところにおすそ分けしてやろう、と考えました。
フィルターと同じように、チェビシェフのリップルを入れるわけです。 そのため、1/3! といった係数に若干の変更を入れます。
フィルターのチェビシェフの係数がバタワースから少し変更されているのと同じです。
5項の場合は次の係数です。
Sin(兀x/2) = 1.5707962899 x - 0.64596335827 x^3 + 0.07968847480 x^5 - 0.00467222026 x^7 + 0.00015081716 x^9
(x: 角度をラジアンで表してそれを 2/兀 倍したもの)
こうやって計算して誤差を求めたのがグラフの中の茶色の線です。
5項で十分 24 ビットの精度をクリアしているのがわかり、27 ビットに迫っています。 Maclaurin に比べて約 1000 倍の精度。
この方法を Meahly(ミーリー)の方法と呼びます。 何かの時に使ってください。
参考文献: 宇野利雄編 計算機のための函数近似公式集 数理科学研究第IV班第5分科会、1-3 巻のうち第1巻 (1961-1963)
16 ビットでも歪を少なくできるか
クロックの周波数やイメージを消すフィルターをかけると誤差が小さくなるのでした。
これをうまく使って、16 ビットでも 24 ビット程度の歪率(誤差量)を達成できるかもしれません。 誰か考えてくれませんか?
16 ビットならテーブルが小さくなりますのでテーブル・ルックアップが使えます。 せっかく計算法を考えたのですけど。
Ⓒ Copyright 2020 T. Fujiwara All rights reserved.
Archiving or copying this article without the author's permission is prohibited.