Перейти к содержанию

Передискретизация

Передискретизация — приём, которым из АЦП получают больше разрядов, чем у него есть: сигнал измеряют много раз чаще, чем нужно, и усредняют результаты. Так 12-битный АЦП микроконтроллера может давать 14 или 16 бит разрешения.

Обновлено Редакция GAW

Передискретизация (oversampling) — измерение сигнала с частотой, во много раз превышающей необходимую, с последующим усреднением результатов. Шум квантования идеального АЦП ведёт себя как шум с действующим значением q/√12, где q — младший разряд, и распределён по всей полосе до половины частоты выборки. При усреднении часть шума отсекается, и отношение сигнал/шум растёт (AN4629):

ΔSNR=10lg⁡(OSR) дБ\Delta\text{SNR} = 10 \lg(\text{OSR})\ \text{дБ}

где OSR — коэффициент передискретизации. Каждое учетверение числа измерений даёт 10 · lg 4 ≈ 6 дБ — примерно один разряд.

Правило 4ⁿ

ИзмеренийДополнительных бит12-битный АЦП даёт
4113 бит
16214 бит
256416 бит

Чтобы получить n дополнительных бит, складывают 4n измерений и сдвигают сумму на n разрядов вправо. Многие STM32 умеют суммировать до 1024 измерений аппаратно (AN2834). Частота выборки при этом должна оставаться выше удвоенной полосы сигнала — см. частоту Найквиста.

Условия и ограничения

Метод работает, только если на входе есть шум не меньше 1 LSB, не связанный с частотой выборки. Он увеличивает разрешение, но не точность: смещение, ошибка усиления и погрешность опорного напряжения не усредняются. Плата — время: чтобы получить 16 бит из 12, нужно в 256 раз больше измерений. Как устроен АЦП, его шумы и погрешности — в статье «АЦП», время преобразования и наибольшую частоту выборки STM32 считает калькулятор АЦП STM32.

Частые вопросы

Сколько измерений нужно для дополнительного бита?

Четыре на каждый бит: чтобы получить n дополнительных разрядов, складывают 4^n измерений и сдвигают сумму на n разрядов вправо. Для 12-битного АЦП 16 измерений дают 14 бит, 256 — 16 бит. По AN4629 каждое учетверение числа измерений поднимает отношение сигнал/шум примерно на 6 дБ — один разряд.

Почему передискретизация иногда не работает?

Метод требует, чтобы на входе был шум не меньше 1 младшего разряда и не связанный с частотой выборки. Если сигнал идеально чистый, все измерения дают один и тот же код, и усреднение ничего не добавит.

Повышает ли передискретизация точность АЦП?

Разрешение — да, точность — нет. Систематические погрешности — смещение, ошибка усиления, нелинейность, погрешность опорного напряжения — усреднением не убираются. Становятся различимы изменения меньше одного младшего разряда, но абсолютная ошибка остаётся прежней.

Источники

  1. STMicroelectronics. AN4629: ADC hardware oversampling for microcontrollers of the STM32 L0 and L4 series (DocID027261 Rev 1) — шум квантования q/√12, SNR = 6,02N + 1,76 дБ, выигрыш от передискретизации 10·lg(OSR)
  2. STMicroelectronics. AN2834: How to optimize the ADC accuracy in the STM32 MCUs, Rev 10 — аппаратное усреднение до 1024 измерений

Нашли ошибку?