Шум квантования и эффективное разрешение
Урок про неизбежную ошибку округления при оцифровке и про то, как она ограничивает качество сигнала.
Ошибка квантования — разница между истинным напряжением и ближайшим уровнем АЦП; она не превышает половины шага: $\lvert e \rvert \le \text{LSB}/2$.
Оцифровка всегда округляет. Это округление — источник «шума квантования», который ограничивает отношение сигнал/шум сверху. Понимание этого предела помогает не требовать от АЦП невозможного.
Максимальная ошибка
Любое истинное напряжение округляется к ближайшему уровню, так что максимальная ошибка — полшага:
$$ e_{max} = \frac{\text{LSB}}{2} = \frac{V_{ref}}{2^{N+1}} $$
def quant_error_mv(vref, bits):
lsb = vref / 2**bits
return lsb / 2 * 1000
for bits in (8, 12, 16):
print(bits, "бит: макс. ошибка", round(quant_error_mv(5.0, bits), 4), "мВ")Вывод:
8 бит: макс. ошибка 9.7656 мВ 12 бит: макс. ошибка 0.6104 мВ 16 бит: макс. ошибка 0.0763 мВ
Сигнал/шум и ENOB
Для синусоиды на полную шкалу теоретический предел отношения сигнал/шум, определяемый только квантованием:
$$ \text{SNR} \approx 6{,}02\,N + 1{,}76\ \text{дБ} $$
Каждый бит добавляет около 6 дБ. Обратив формулу для реального измеренного SNR, получают ENOB — эффективное число бит, которое честно «работает» с учётом шума.
def snr_db(bits):
return 6.02 * bits + 1.76
def enob(snr):
return (snr - 1.76) / 6.02
print("12 бит -> SNR", round(snr_db(12), 2), "дБ")
# реальный АЦП дал SNR 68 дБ:
print("SNR 68 дБ -> ENOB", round(enob(68), 2), "бит")Вывод:
12 бит -> SNR 74.0 дБ SNR 68 дБ -> ENOB 10.99 бит
Как работает под капотом
Шум квантования распределён почти равномерно в пределах $\pm \text{LSB}/2$ и ведёт себя как добавленный широкополосный шум. Его можно «размазать» специально добавленным малым шумом (дизеринг) или усреднить несколькими отсчётами — усреднение $M$ отсчётов снижает шум в $\sqrt{M}$ раз и поднимает эффективное разрешение (передискретизация). Поэтому медленный высокоточный измеритель часто берёт много отсчётов и усредняет, выигрывая «лишние» биты у времени.
Частые ошибки
- Считать, что ошибка квантования равна LSB — на самом деле максимум LSB/2.
- Ожидать SNR выше теоретического предела $6{,}02N+1{,}76$ дБ — это потолок для данной разрядности.
- Путать заявленные биты и ENOB — реальная точность обычно ниже.
Итог
- Ошибка квантования не превышает половины шага: $\text{LSB}/2$.
- Предел SNR: примерно $6{,}02N + 1{,}76$ дБ, каждый бит — около 6 дБ.
- ENOB показывает реальное число «честных» бит с учётом шума; усреднение его повышает.