A/D・D/A変換の基礎とサンプリング理論から実装まで
1. はじめに
アナログ信号とデジタル信号の最も本質的な違いは、
時間が連続か離散かにある。
現実世界の物理量は連続時間信号として観測されるが、
デジタル回路や計算機は離散時間・離散値の情報しか扱えない。
この両者を結びつける理論的基盤が サンプリング定理である。
本章では、
アナログ信号を離散時間信号へ変換する操作を数理的に定式化し、
その成立条件と物理的意味、さらに実装上の注意点を整理する。
ADCに必要な数学まとめ
ADCにおける数学の役割は、厳密解を求めることではなく、
性能限界・誤差要因・設計トレードオフを定量的に判断することにある。
以下では、実設計で本当に使う数学だけを、意味と用途付きでまとめる。
- 実数・指数・対数
ADCは「比」を扱う装置である。
dB表記
Power[dB] = 10 * log10(P1 / P0)
Voltage[dB] = 20 * log10(V1 / V0)
用途
・SNR
・SNDR
・ENOB
・Figure of Merit
・ゲイン誤差評価
- 三角関数(入力信号モデル)
ADC評価の基本入力は正弦波である。
正弦波
x(t) = A * sin(2π f t + φ)
高調波を含む信号
x(t) = Σ A_n * sin(2π n f t + φ_n)
用途
・THD評価
・IMD評価
・SNDR測定
・FFT解析
- 微分(時間誤差・ジッタの本質)
微分の定義
dx/dt = lim(Δt→0) [x(t+Δt) - x(t)] / Δt
正弦波の微分
x(t) = A sin(2π f t)
dx/dt = 2π f A cos(2π f t)
サンプリング時刻誤差 Δt による電圧誤差
ΔV ≈ (dx/dt) * Δt
ジッタ制限SNR
SNR_jitter ≈ -20 * log10(2π f_in σ_t)
用途
・クロックジッタ解析
・アパーチャジッタ解析
・高速ADCの分解能限界
- 積分(サンプリングと電荷)
積分の定義
∫ x(t) dt
電流と電荷
Q = ∫ i(t) dt
キャパシタ
V = Q / C
用途
・サンプル&ホールド回路
・ΔΣ ADCの積分器
・kT/Cノイズの理解
- 複素数(振幅と位相)
複素数
z = a + j b
極形式
z = r * exp(jθ)
用途
・位相誤差
・周波数応答
・安定性解析
- 複素指数関数
オイラーの公式
exp(jωt) = cos(ωt) + j sin(ωt)
用途
・フーリエ変換
・LTIシステム解析
・ΔΣのz変換
- フーリエ変換(ADC数学の中核)
定義
F(ω) = ∫ f(t) * exp(-jωt) dt
逆変換
f(t) = (1/2π) ∫ F(ω) * exp(jωt) dω
用途
・サンプリング定理
・エイリアシング解析
・SNDR測定
・スペクトル歪み評価
- デルタ関数とサンプリング
デルタ関数列
s(t) = Σ δ(t - nT)
理想サンプリング
f_s(t) = f(t) * s(t)
周波数領域
F_s(ω) = (1/T) Σ F(ω - kω_s)
用途
・スペクトル複製
・ナイキスト条件理解
- sinc関数(復元とホールド誤差)
sinc(x) = sin(πx) / (πx)
理想復元
f(t) = Σ f(nT) * sinc((t - nT)/T)
ZOH周波数特性
|H_ZOH(jω)| = T * |sinc(ωT/2)|
用途
・ホールドドロップ
・DAC/ADC帯域劣化
- 確率・統計(ノイズ)
平均
μ = E[x]
分散
σ^2 = E[(x - μ)^2]
RMS
x_rms = sqrt(E[x^2])
用途
・ノイズ電力
・SNR計算
・量子化誤差
- 量子化数学
量子化ステップ
q = V_FS / 2^N
量子化誤差範囲
-e/2 ≤ e ≤ q/2
量子化雑音電力
P_q = q^2 / 12
SNR理想値
SNR = 6.02N + 1.76 [dB]
用途
・分解能設計
・ENOB評価
- 熱雑音(kT/C)
キャパシタ熱雑音
v_n^2 = kT / C
量子化雑音以下条件
kT/C < q^2 / 12
用途
・サンプリング容量設計
・高分解能ADC限界
- z変換(離散時間系)
定義
X(z) = Σ x[n] z^(-n)
用途
・ΔΣ ADC解析
・デジタルフィルタ
・ノイズシェーピング
- 線形代数(実装寄り)
ベクトル
y = A x + b
用途
・キャリブレーション
・DEM
・デジタル補正
- 最適化(設計判断)
目的関数
min Power
subject to SNDR ≥ target
用途
・容量配分
・アーキテクチャ選択
2. アナログ信号と時間離散化
連続時間アナログ信号を
f(t)
とする。
この信号をデジタル処理可能な形に変換する最初の操作は、
**時間軸の離散化(サンプリング)**である。
ここでは振幅の離散化(量子化)は考えず、
時間離散化のみを扱う。
3. 理想サンプリングの数理モデル
3.1 デルタ関数列による表現
周期 T での理想的なサンプリングは、
次のデルタ関数列によって表される。
s(t) = Σ_{n=-∞}^{∞} δ(t − nT)
ここで
T : サンプリング周期
fs = 1 / T : サンプリング周波数
である。
3.2 サンプリング操作の定義
信号 f(t) を理想的にサンプリングした信号 f_s(t) は
f_s(t) = f(t) · s(t)
= Σ_{n=-∞}^{∞} f(nT) · δ(t − nT)
と書ける。
すなわち、サンプリングとは
連続時間信号から、一定時間間隔で値を抜き出す操作
である。
4. 周波数領域におけるサンプリングの意味
4.1 デルタ関数列のフーリエ変換
時間領域のデルタ関数列
s(t) = Σ δ(t − nT)
のフーリエ変換は
S(ω) = (2π / T) · Σ δ(ω − kω_s)
となる。
ここで
ω_s = 2π / T = 2π fs
である。
4.2 サンプリング後信号のスペクトル
時間領域での乗算は、周波数領域では畳み込みに対応する。
したがって、サンプリング後信号のスペクトル F_s(ω) は
F_s(ω) = (1 / 2π) · ∫ F(Ω) · S(ω − Ω) dΩ
となる。
S(ω) を代入すると
F_s(ω) = (1 / T) · Σ F(ω − kω_s)
を得る。
4.3 スペクトル複製
この式は、
元の信号スペクトルが、サンプリング角周波数 ω_s ごとに周期的に複製される
ことを意味する。
サンプリングは、
周波数領域においてスペクトルを周期的に並べる操作である。
5. サンプリング定理(ナイキスト条件)
5.1 帯域制限信号の仮定
サンプリング定理は、次の前提に基づく。
F(ω) = 0 (|ω| > ω_B)
すなわち、信号は有限の周波数帯域に完全に収まっていると仮定する。
5.2 ナイキスト条件
このとき、サンプリング角周波数 ω_s が
ω_s > 2ω_B
(fs > 2f_B)
を満たせば、スペクトル複製は互いに重ならない。
その結果、
理論上は元の連続時間信号を完全に復元できる。
これがサンプリング定理である。
6. sinc 関数による理想復元
6.1 理想再構成フィルタ
完全復元には、次の理想低域通過フィルタを用いる。
H(ω) = 1 (|ω| ≤ ω_B)
H(ω) = 0 (|ω| > ω_B)
6.2 時間領域でのインパルス応答
このフィルタのインパルス応答は
h(t) = sin(ω_B t) / (π t)
であり、これは sinc 関数である。
6.3 完全復元式
元の信号 f(t) は
f(t) = Σ f(nT) · sinc((t − nT) / T)
として表される。
各サンプル値は sinc 波形として時間軸上に広がり、
それらの重ね合わせによって連続信号が再構成される。
7. エイリアシング
ナイキスト条件が満たされない場合、
・スペクトル複製が重なる
・高周波成分が低周波領域に折り返される
この現象を エイリアシングという。
エイリアシングによる歪みは、
一度サンプリングされるとデジタル処理では除去できない。
したがって、サンプリング前には
アナログ低域通過フィルタ(アンチエイリアシングフィルタ)が必要となる。
8. 実際の回路におけるサンプリング:Sample-and-Hold
8.1 理想サンプリングとの違い
デルタ関数による瞬時サンプリングは物理的に実現できない。
実際の ADC では、
一定時間信号を保持する Sample-and-Hold(S/H)回路が用いられる。
8.2 ゼロ次ホールド(ZOH)モデル
最も基本的な S/H はゼロ次ホールド(ZOH)であり、
そのインパルス応答は
h_ZOH(t) = 1 (0 ≤ t < T)
h_ZOH(t) = 0 (それ以外)
で表される。
8.3 ラプラス変換
ZOH のラプラス変換は
H_ZOH(s) = ∫_0^T exp(−s t) dt
= (1 − exp(−sT)) / s
となる。
8.4 周波数特性
s = jω とおくと
H_ZOH(jω) = (1 − exp(−jωT)) / (jω)
その振幅特性は
|H_ZOH(jω)| = T · |sinc(ωT / 2)|
となり、
ZOH は周波数が高くなるにつれて振幅が低下する特性を持つ。
これは実際の ADC における周波数特性劣化の一因である。
8. 量子化 ― 振幅の離散化と不可避な誤差
8.1 量子化の定義
サンプリングによって時間が離散化された後、
各サンプル値は有限個のレベルに丸められる。
フルスケール電圧を V_FS、量子化ビット数を N とすると、
量子化ステップ幅 q は
q = V_FS / 2^N
で定義される。
この操作により、入力信号と出力コードの間には必ず誤差が生じる。
8.2 量子化誤差と雑音モデル
理想的な量子化器では、量子化誤差 e_q は
−q/2 ≤ e_q < q/2
の範囲に一様分布すると仮定される。
このとき、量子化雑音の分散は
σ_q^2 = q^2 / 12
となる。
量子化雑音は、回路の工夫では完全に除去できない理論的下限である。
8.3 SNR とビット数の関係
正弦波入力に対する理想 ADC の SNR は
SNR = 6.02 N + 1.76 [dB]
で与えられる。
これは、1 ビット増加するごとに SNR が約 6 dB 向上することを意味する。
9. kT/C ノイズ ― サンプリングの熱力学的限界
9.1 サンプリング回路における熱雑音
実際の ADC では、入力信号はスイッチとキャパシタを用いてサンプリングされる。
キャパシタ C に蓄えられる熱雑音の分散は
v_n^2 = kT / C
で与えられる。
ここで
k : ボルツマン定数
T : 絶対温度
である。
9.2 分解能との関係
高分解能 ADC を実現するためには、
kT/C ノイズが量子化雑音より十分小さい必要がある。
すなわち
kT / C < q^2 / 12
が要求される。
これを C について解くと
C > 12 kT / q^2
となる。
9.3 設計上の意味
この式は、
ビット数を 1 増やすと、必要なキャパシタ容量が約 4 倍になる
ことを示している。
したがって、kT/C ノイズは
・高分解能化
・低電圧化
・低消費電力化
の同時達成を困難にする、根本的な物理制約である。
10. ジッタ ― 時間軸の不完全性
10.1 ジッタの定義
理想的なサンプリングでは、サンプル時刻は正確に nT である。
しかし実際には、クロックの揺らぎにより
サンプリング時刻に誤差が生じる。
この時間誤差を ジッタと呼ぶ。
10.2 ジッタによる誤差電圧
入力信号を
x(t) = A sin(2π f_in t)
とすると、時間誤差 σ_t による電圧誤差の分散は
σ_v^2 ≈ (2π f_in A)^2 · σ_t^2
となる。
10.3 ジッタ制限 SNR
これより、ジッタによって制限される SNR は
SNR_jitter = −20 log10(2π f_in σ_t)
で与えられる。
この式は、
入力周波数が高いほど、時間精度が支配的になる
ことを示している。
10.4 設計上の意味
ジッタは、
・量子化ビット数
・回路精度
とは無関係に、クロック品質そのものによって決まる。
そのため、高速 ADC では
「分解能の限界はクロックで決まる」
という状況がしばしば生じる。
11. ノイズシェーピング ― 雑音分布を設計するという発想
11.1 基本的な考え方
量子化雑音の総量そのものは減らせなくても、
周波数分布を変えることは可能である。
この発想に基づく技術が ノイズシェーピングである。
11.2 オーバーサンプリング
サンプリング周波数を信号帯域より十分高く取ると、
OSR = fs / (2 f_B)
で定義されるオーバーサンプリング比が得られる。
このとき、信号帯域内の量子化雑音電力は
P_q,inband = (q^2 / 12) · (1 / OSR)
に低減される。
11.3 ノイズ伝達関数
ノイズシェーピングでは、帰還構造を用いて
量子化雑音を高周波側へ押し出す。
一次ノイズシェーピングの雑音伝達関数は
H_NTF(z) = 1 − z^(−1)
で表される。
これは、低周波で雑音が抑圧され、高周波で増大する特性を持つ。
11.4 ΔΣ 変調器における SNR 向上
L 次のノイズシェーピングを用いた場合、
インバンド SNR は近似的に
SNR ≈ 6.02 N + 1.76
- 10 log10(OSR)
- (2L + 1) · 10 log10(OSR)
で増加する。
11.5 設計上の意味
ノイズシェーピングは、
・アナログ精度を時間方向の処理に変換する
・回路の不完全性をデジタル処理で吸収する
という考え方に基づいている。
これは、微細化プロセスにおいて
最も有効な高分解能化手法の一つである。
12. 非理想性を含めた ADC の実効性能評価
これまでに述べた量子化雑音、熱雑音、ジッタは、いずれも確率的(ランダム)な誤差要因である。
一方、実際の ADC にはこれとは異なる 決定論的(系統的)な誤差 が存在し、
これらは信号歪みとして観測される。
本節では、これらの非理想性を整理し、
実際に ADC の性能をどのように評価すべきかを明確にする。
12.1 非線形歪み ― DNL と INL
理想的な N ビット ADC では、量子化ステップ幅はすべて等しく
q = V_FS / 2^N
で与えられる。
しかし実際には、回路素子のばらつきやオフセットにより、
量子化特性は理想直線からずれる。
**DNL(差分非直線性)**は、隣り合う量子化ステップ幅のばらつきを表す指標である。
k 番目のステップ幅を ΔV_k とすると、
DNL_k = (ΔV_k − q) / q
で定義される。
DNL < −1 となる場合、そのコードは出現せず、
**欠落コード(missing code)**が発生する。
DNL は主に、
・DAC 素子のミスマッチ
・比較器オフセット
に起因する局所的な誤差である。
**INL(積分非直線性)**は、実際の入出力特性が理想直線からどれだけずれているかを表す。
k 番目のコード遷移点について、
INL_k = (V(k) − V_ideal(k)) / q
で定義される。
INL は DNL の累積結果であり、
低周波歪みやスプリアス成分の主原因となる。
DNL や INL はランダム雑音ではないため、
スペクトル上では
・高調波歪み(THD)
・明確なスプリアス(Spur)
として現れ、SNDR を直接劣化させる。
12.2 ダイナミック性能指標 ― SNDR と ENOB
実際の ADC 性能評価では、
単なる SNR ではなく SNDR が用いられる。
SNDR は、信号成分に対する
・雑音
・歪み
をすべて含めた比であり、
SNDR = 10 log10 (P_signal / P_noise+distortion)
で定義される。
SNDR から逆算される性能指標が **ENOB(実効ビット数)**である。
ENOB = (SNDR − 1.76) / 6.02
ENOB は、
「この ADC が理想 ADC であれば、何ビット相当か」
を表す。
名目上 16 ビットの ADC であっても、
歪みやノイズにより ENOB が 12 ビット程度に留まることは実設計では頻繁に起こる。
設計者が最終的に見るべき指標は ENOB である。
12.3 メタスタビリティ ― 比較器の物理限界
比較器は、アナログ信号を 0 / 1 に確定させる最終要素である。
入力差電圧が判定しきい値に極めて近い場合、
・再生に時間がかかる
・出力が中間電位に留まる
という状態が発生する。
これを メタスタビリティという。
高速 ADC では、比較時間が有限であるため、
・誤判定
・ビットエラー
が生じ、
これが **ビット誤り率(BER)**を支配する要因となる。
特に SAR ADC やパイプライン ADC では、
比較器の再生速度とオフセットが直接性能に影響する。
12.4 ADC アーキテクチャごとの構造的トレードオフ
ADC の非理想性は、アーキテクチャ選択と密接に関係する。
・フラッシュ型
超高速だが、比較器数が 2^N に比例し、
面積・電力・オフセットばらつきが支配的。
・SAR 型
単一比較器を用い、電力効率が高い。
DNL・INL は CDAC のミスマッチに支配される。
・ΔΣ 型
ノイズシェーピングにより高分解能を実現。
非線形性は DEM やデジタル補正で抑圧。
・パイプライン型
高速・高分解能を両立可能だが、
各段の増幅器誤差が累積する。
12.5 ダイナミック・エレメント・マッチング(DEM)
多ビット DAC を内部に持つ ADC では、
素子ミスマッチが歪みの主要因となる。
DEM は、DAC 素子の使用順序を動的に切り替えることで、
・ミスマッチ誤差を平均化
・歪み成分をランダム化
し、雑音として拡散させる技術である。
特に ΔΣ ADC では、DEM は不可欠な要素である。
12.6 入力帯域幅とアパーチャ誤差
サンプリングは有限時間で行われるため、
以下の時間誤差が存在する。
・アパーチャ・ジッタ
サンプリング瞬間の時間ばらつき
・アパーチャ・ディレイ
クロック入力から実際のサンプリングまでの遅延
これらは高周波入力に対して顕著な誤差電圧を生じる。
12.7 相互変調歪み(IMD)
複数の周波数成分が同時に入力された場合、
非線形性により
2f1 − f2
2f2 − f1
などの相互変調成分が発生する。
IMD は通信システム、とくに RF ADC において
SNR 以上に重要な評価指標となる。
12.8 リファレンス電圧の変動
ADC は本質的に、
入力電圧 / リファレンス電圧
を測定する装置である。
したがって、リファレンス電圧 Vref に含まれる雑音は、
そのまま出力コードの雑音として現れる。
高精度 ADC では、
リファレンス生成回路とそのデカップリングが極めて重要となる。
12.9 デジタル・ポスト・フィルタリング
オーバーサンプリングやノイズシェーピングを用いた ADC では、
変換後に
・高域雑音の除去
・データレート低減
を行う デシメーションフィルタが必要となる。
この処理は完全にデジタルで行われ、
微細化プロセスとの親和性が高い。
12.10 Walden Figure of Merit(FoM)
ADC 設計の効率を評価する代表的指標が Walden FoM である。
FoM = P / (2^ENOB · fs) [J/step]
これは、
「1 ステップの変換に必要なエネルギー」
を表し、
アーキテクチャ間・世代間の比較に用いられる。
参考文献
- 和保 孝夫『アナログ/デジタル変換入門 ― 原理と回路実装 ―』コロナ社
- B. Razavi, Principles of Data Conversion System Design, IEEE Press
- J. G. Proakis, Digital Signal Processing, Pearson
Python による挙動シミュレーション
import numpy as np
import matplotlib.pyplot as plt
# 日本語表示対応(フォント設定が困難な場合は英語表記)
plt.rcParams['font.size'] = 10
def simulate_adc_concepts():
# --- 共通パラメータ ---
fs_ideal = 1000 # 高いサンプリングレート(アナログ信号の模倣)
duration = 1.0
t = np.arange(0, duration, 1/fs_ideal)
# 信号波形 (10Hz + 25Hz)
f1, f2 = 10, 25
x = 0.5 * np.sin(2 * np.pi * f1 * t) + 0.3 * np.sin(2 * np.pi * f2 * t)
# 1. サンプリングとエイリアシング
fs_low = 40 # ナイキスト周波数に近いサンプリング
t_sampled = np.arange(0, duration, 1/fs_low)
x_sampled = 0.5 * np.sin(2 * np.pi * f1 * t_sampled) + 0.3 * np.sin(2 * np.pi * f2 * t_sampled)
# 2. 量子化とノイズシェーピング (1次誤差拡散を模した簡略モデル)
bits = 4
levels = 2**bits
def quantize(val):
return np.round(val * (levels/2)) / (levels/2)
x_q = quantize(x) # 通常の量子化
# ノイズシェーピング(ΔΣの簡易表現)
x_ns = np.zeros_like(x)
error = 0
for i in range(len(x)):
input_val = x[i] - error
x_ns[i] = quantize(input_val)
error = x_ns[i] - input_val
# 3. クロック・ジッタの影響
jitter_std = 0.005 # 5msの標準偏差を持つジッタ
t_jittered = t_sampled + np.random.normal(0, jitter_std, len(t_sampled))
x_jittered = 0.5 * np.sin(2 * np.pi * f1 * t_jittered) + 0.3 * np.sin(2 * np.pi * f2 * t_jittered)
# --- 可視化 ---
fig, axes = plt.subplots(3, 1, figsize=(10, 12))
plt.subplots_adjust(hspace=0.4)
# Plot 1: Aliasing
axes[0].plot(t, x, label='Original Analog', alpha=0.5)
axes[0].stem(t_sampled, x_sampled, 'r', markerfmt='ro', label='Sampled (fs=40Hz)', basefmt=" ")
axes[0].set_title("1. Sampling & Aliasing (Time Domain)")
axes[0].legend()
# Plot 2: Quantization vs Noise Shaping (Spectrum)
fft_q = np.abs(np.fft.rfft(x_q))
fft_ns = np.abs(np.fft.rfft(x_ns))
freqs = np.fft.rfftfreq(len(x), 1/fs_ideal)
axes[1].semilogy(freqs, fft_q, label='Standard Quantization (4-bit)', alpha=0.7)
axes[1].semilogy(freqs, fft_ns, label='Noise Shaped', color='green')
axes[1].set_title("2. Quantization Noise vs. Noise Shaping (Frequency Domain)")
axes[1].set_ylim(1e-1, 1e3)
axes[1].legend()
# Plot 3: Jitter Effect
axes[2].plot(t_sampled, x_sampled, 'o--', label='Ideal Sampling', alpha=0.4)
axes[2].plot(t_sampled, x_jittered, 'rx', label='Jittered Sampling')
axes[2].set_title("3. Effect of Clock Jitter on Signal Integrity")
axes[2].legend()
plt.show()
if __name__ == "__main__":
simulate_adc_concepts()
このコードで確認できること
- エイリアシングの視覚化: 赤色のサンプル点が元の信号を捉えられているかを確認できます。サンプリングレートを下げると、元の波形とは異なる周波数(折り返し)に見える様子がシミュレート可能です。
- ノイズシェーピングの威力: 通常の量子化(青)ではノイズフロアが全帯域でフラットですが、ノイズシェーピング(緑)を施すと、低域側のノイズが大幅に削られ、高域に押しやられていることがスペクトル上で一目で分かります。
- ジッタによる振幅誤差: 時間軸の揺らぎ(ジッタ)が、サンプリングされた振幅値にランダムなエラーを与える様子を可視化しています。これは高周波信号になればなるほど、振幅の傾斜()が急なため、より大きなノイズとして現れることを示唆します。
Discussion