Как децимация связана с динамическим диапазоном
Одним из основных источников шума в SDR-приемнике (RTL-SDR, HackRF, LimeSDR, ...) является шум квантования. Попробуем разобраться, откуда он берется, какими свойствами обладает, и можем ли мы что-нибудь предпринять для его уменьшения.
Примечание: В данном контексте вас может заинтересовать статья Шпаргалка по работе DSP фильтров, если вдруг вы ее пропустили.
Шум квантования возникает по той причине, что АЦП имеет конечную разрядность:
Пусть АЦП имеет диапазон входных напряжений Vpp. Тогда значение каждого сэпла округляется с точностью до шага квантования:
... где n представляет собой разрядность АЦП. Это равносильно внесению шума, который и называется шумом квантования.
Обычно предполагается, что ошибка квантования распределена равномерно в пределах от −q/2 до q/2. Помимо прочего, это позволяет оценить мощность источника шума (через Urms и предполагая R). Точное значение нам сейчас не сильно интересно. Важно лишь то, что мощность шума зависит только от разрядности АЦП.
Также предполагается, что ошибки квантования являются случайными и независимыми друг от друга. В реальных условиях оцифровываемый сигнал сложен и зашумлен, в связи с чем данное предположение вполне правдоподобно. В сочетании с теми фактами, что 1) среднее значение шума равно нулю и 2) мощность шума постоянна, приходим к выводу, что шум является белым. Важное свойство белого шума заключается в том, что его мощность распределена равномерно в полосе пропускания рассматриваемой системы.
Оказывается, что шум квантования может быть уменьшен. Суть идеи состоит в следующем. Будем использовать частоту дискретизации выше той, что нужна для задачи. За счет этого мы растянем шум квантования по большей полосе. Ведь мы установили, что его мощность фиксирована и распределена в полосе равномерно:
Здесь мы смотрим на сигналы в частной области. Шум квантования изображен в виде заштрихованных трапеций. Левая и правая трапеции имеют разную высоту, но одинаковую площадь. Полезный сигнал с частотой F обозначен вертикальной стрелкой.
Далее применяем децимацию. Вспомним, что она из себя представляет. Сначала сигнал пропускается через ФНЧ, для борьбы с алиасингом. Затем из каждых N последовательно идущих сэплов остается только один, где N – это коэффициент децимации.
Полезный сигнал попадает в полосу ФНЧ целиком, а шум квантования обрезается. Как результат, мощность шума становится меньше в N раз. В децибелах выигрываем:
В английском языке описанный прием называется oversampling. Обычно его переводят, как «передискретизация». Следует однако учитывать, что последний термин имеет и второе значение: изменение частоты дискретизации в целом, как в меньшую, так и в большую сторону.
Перейдем к практике. С генератора сигналов подадим -73 dBm на частоте 145 МГц. Данный сигнал будем принимать при помощи LimeSDR и программы Gqrx. В первом случае воспользуемся 156250 sps без децимации, а во втором – 10 Msps с коэффициентом децимации 64. Итоговая частота дискретизации одинакова:
>>> 10_000_000/64
156250.0
... однако в первом случае децимация не используется, а во втором – используется.
Сравним результаты:
На глаз выигрыш в динамическом диапазоне составил ~12 dB. Вспомним, что каждый бит разрядности АЦП улучшает динамический диапазон на 6 dB. Таким образом, 12-битный SDR превратился по меньшей мере в 14-битный.
Fun fact! Если зафиксировать частоту дискретизации и сравнивать уровень шума с децимацией и без, то также будет видно улучшение. Однако данное улучшение лишь визуальное. Оно вызвано сужением полосы при фиксированном числе точек FFT. Для корректного сравнения необходим постоянный RBW.
Теоретически, ожидался выигрыш в 18 dB. Тот факт, что на практике получилось меньше, говорит о том, что сделанные ранее предположения не вполне верны. Ошибка квантования распределена не равномерно. Настоящего белого шума в природе не существует. АЧХ цифровых фильтров не является идеальной. Неточность представления чисел с плавающей запятой и ошибки округления не учтены в модели. Наконец, помимо шума квантования имеются и другие источники шума.