RTL-SDR

Программная реализация VGA-AGC для RTL-SDR

Спасибо Крис Г за то, что написал нам и поделился своим программным контроллером VGA ADC для RTL-SDR. AGC (или ‘автоматическое регулирование усиления’) — это алгоритм, который пытается автоматически регулировать усиление на RTL-SDR, чтобы максимизировать коэффициент сигнал/шум. Встроенные аппаратные AGC на RTL-SDR предназначены для широкополосных телевизионных сигналов и работают хуже с более узкими сигналами, с которыми обычно работают пользователи SDR. Однако возможно использование программной реализации AGC вместо этого.

Изначально я хотел увидеть, насколько хорошо будет работать, если я смогу вручную контролировать VGA усиление, чтобы избежать перегрузки АЦП внутри чипа 2832.

Мне понравилось, как это работает, поэтому я сказал: давайте сделаем всё автоматическим! Я реализовал две вариации своего AGC. Одна вариация (моя любимая) — реализация AGC Харрисом и Смитом. Это LMS-алгоритм, который обеспечивает одинаковую переходную реакцию на резкое увеличение амплитуды входного сигнала и резкое снижение амплитуды сигнала.

Поскольку я делаю это всё в программном обеспечении, я обрабатываю блоки IQ-данных, а не образец за образцом.

Изначально я наблюдал ограниченные циклы по крайней мере по двум причинам:

  1.  Примерно 3.5 дБ шага регулировки VGA-усиления.
  2. Правда в том, что когда я получаю блок IQ-данных, другой блок уже в процессе передачи.

Это приводило к тому, что я регулировал усиление, пока блок данных был в транзите.

Для пункта 1 я разрешаю настраивать мёртвую зону (deadband).

Для пункта 2 я разрешаю настраиваемый «период затирания» (blanking time). В моём случае, если AGC недавно выполнил настройку, я пропускаю настройку, пока следующий блок находится в процессе передачи.

Ниже приведён вывод команды ‘get agcinfo’.

——————————————–
AGC Internal Information
——————————————–
AGC Включён: Да
Тип AGC: Харрис
Счётчик затирания: 0 тиков
Лимит затирания: 1 тиков
Коэффициент низкочастотного фильтра: 0.800
Мёртвая зона: 1 дБ
Установочная точка: -12 дBFs
Усиление ПЧ: 11 дБ
/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Модуль сигнала: 27
RSSI (После Смесителя) : -24 dBFs
/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

Заметьте, что заданная точка и регулировка усиления работают в децибелах. Так я рассматриваю AGC как линейную систему (на самом деле используется алгоритм LMS) для упрощения обработки.

Теперь я применил тот же алгоритм в своём программном обеспечении HackRF.

Стоит отметить, что я реализовал довольно хорошую программную систему squelch для rtl-sdr (и, конечно же, HackRF), если вам интересно.

У меня есть репозиторий на github.com/wizardyesterday/RtlSdrDiags.

Я думал о добавлении DAC I2C, выход которого подключён к линии аналогового управления VGA-усилением, но мне очень не хочется портить мой dongle v3. Всё же было бы неплохо иметь разрешение усиления 1 дБ (или меньше).

Ещё одна вещь, которую я заметил: при записи регистров тюнера включается повторитель I2C, и вы слышите резкий всплеск в демодулированном аудио. Это может произойти (я не проводил этот эксперимент) и при отключении повторителя. Может и нет……

Я составил отчёт по адресу github.com/wizardyesterday/RtlSdrDiags/blob/master/doc/agcResearch/README.txt

Если вам интересно, как я реализовал свой AGC, можно посмотреть файл, github.com/wizardyesterday/RtlSdrDiags/blob/master/radioDiags/src_diags/AutomaticGainControl.cc.

Заголовочный файл находится в radioDiags/hdr_diags/AutomaticGainControl.h.


Источник:

Подбираете SDR под задачу?

Опишите, что и где хотите принимать, — подскажем подходящие модели и где их купить.

Похожие материалы

Весь блог