1. SAR-ADCの分解能とLSB
逐次比較型AD変換器(SAR-ADC)は二分探索で量子化を行い、分解能 $N$ ビットのときの最小ステップ(LSB)は
$$
\Delta = \frac{V_{FS}}{2^N}
$$
- $V_{FS}$:入力フルスケール電圧
- $N$:ビット数
例: $V_{FS} = 1,\text{V}, N=15$
$$
\Delta = \frac{1}{2^{15}} \approx 30 ,\mu \text{V}
$$
2. 熱雑音(kT/Cノイズ)
サンプル&ホールド回路のコンデンサ $C$ に生じる熱雑音の平均二乗値は
$$
v_{n,\text{rms}}^2 = \frac{kT}{C}
$$
- $k = 1.38 \times 10^{-23}, \text{J/K}$(ボルツマン定数)
- $T \approx 300,\text{K}$(室温)
- $C$:ホールドコンデンサ容量
したがって実効雑音は
$$
v_{n,\text{rms}} = \sqrt{\frac{kT}{C}}
$$
例: $C = 1,\text{pF}$ の場合
$$
v_{n,\text{rms}} \approx 64 ,\mu \text{V}
$$
3. 量子化雑音と比較条件
理想量子化器の雑音は一様分布するため、その標準偏差は
$$
\sigma_q = \frac{\Delta}{\sqrt{12}}
$$
よって、高分解能ADCとして成立する条件は
$$
v_{n,\text{rms}} < \frac{\Delta}{\sqrt{12}}
$$
4. 境界ビット数の導出
上の式に $\Delta = V_{FS} / 2^N$ を代入すると、
$$
\sqrt{\frac{kT}{C}} < \frac{V_{FS}}{2^N \sqrt{12}}
$$
整理して、
$$
2^N < \frac{V_{FS} \cdot \sqrt{12}}{\sqrt{kT/C}}
$$
両辺の $\log_2$ を取ると、
$$
N_{\text{max}} = \log_2 \left( \frac{V_{FS} \cdot \sqrt{12}}{\sqrt{kT/C}} \right)
$$
これが 熱雑音に埋もれない最大ビット数 を与える一般式。
5. 数値例
- $V_{FS} = 1.0 ,\text{V}$
- $C = 1.0 ,\text{pF}$
- $T = 300 ,\text{K}$
の場合:
- 熱雑音
$$
v_{n,\text{rms}} \approx 64 ,\mu \text{V}
$$
- 量子化雑音(15ビット)
$$
\Delta = 30 ,\mu \text{V}, \quad \sigma_q \approx 8.7 ,\mu \text{V}
$$
→ 結果:
$$
64 ,\mu \text{V} \gg 8.7 ,\mu \text{V}
$$
つまり、15ビットではLSBが熱雑音に完全に埋もれる。
この条件から逆算すると、 $N_{\text{max}} \approx 12$ ビット程度が限界。
6. 結論
- SAR-ADCはビット数が増えるとLSBが指数関数的に小さくなる。
- 一方、熱雑音は $\sqrt{kT/C}$ によって下限が決まり、簡単には減らせない。
- よって、ある閾値(約12〜13ビット、容量や条件による)を超えると 物理的にLSBが熱雑音に埋もれてしまう。
- これが「SAR-ADC単独では高分解能化が難しい」と言われる理由。
import numpy as np
# ========================
# Parameters / パラメータ
# ========================
k = 1.38e-23 # Boltzmann constant [J/K]
T = 300 # Temperature [K]
C = 1e-12 # Sampling capacitor [F]
V_FS = 1.0 # Full-scale voltage [V]
# ========================
# Thermal noise / 熱雑音
# ========================
v_n_rms = np.sqrt(k * T / C)
# ========================
# Max bit resolution / 境界ビット数
# ========================
N_max = np.log2(V_FS * np.sqrt(12) / v_n_rms)
# ========================
# Example: N=15
# ========================
N = 15
Delta = V_FS / (2**N)
sigma_q = Delta / np.sqrt(12)
# ========================
# Print results / 結果表示
# ========================
print("=== SAR-ADC Noise Calculation ===")
print(f"Full-scale voltage V_FS = {V_FS} V")
print(f"Sampling capacitor C = {C:.2e} F")
print(f"Temperature T = {T} K")
print(f"Thermal noise (rms) = {v_n_rms*1e6:.2f} µV")
print(f"Boundary bit resolution N_max ≈ {N_max:.2f} bits")
print("--- Check N=15 ---")
print(f"LSB (Δ) = {Delta*1e6:.2f} µV")
print(f"Quantization noise σ_q = {sigma_q*1e6:.2f} µV")
if v_n_rms < sigma_q:
print("→ Thermal noise is below quantization noise (OK).")
else:
print("→ Thermal noise dominates (LSB buried).")