RDS/RBDS и приемник FM RadioText Plus (RT +)

В этом примере показано, как использовать MATLAB ® и Communications Toolbox™ для извлечения информации о программе или песне от FM-радиостанций с помощью стандарта RDS или RBDS и, опционально, стандарта RadioText Plus (RT +). Можно использовать записанные сигналы или принимать сигналы в режиме реального времени с помощью Радио RTL-SDR или Радио ADALM-PLUTO.

Необходимое аппаратное и программное обеспечение

Чтобы запустить этот пример с помощью записанных сигналов, вам нужен Communications Toolbox™. Для приема сигналов в режиме реального времени также необходимо одно из следующего оборудования:

Полный список поддерживаемых Communications Toolbox платформ SDR см. в разделе «Поддерживаемые аппаратные средства» Программно определяемого радио (SDR).

Фон

RBDS и RDS являются очень похожими стандартами, определяющими, как дополнить FM-радиосигналы дополнительной информацией. RBDS используется в Северной Америке, в то время как RDS первоначально использовался в Европе и развивался до международного стандарта. RBDS и RDS содержат 3 слоя:

  • Физический слой (слой 1)

  • Слой канала передачи данных (слой 2)

  • Слой сеансов и презентаций (уровень 3)

Физический слой (слой 1)

Декодер PHY RDS/RBDS принимает записанный сигнал из файла или прямой сигнал от радио и выполняет следующие шаги:

  • FM-демодуляция: После демодуляции FM-сигнала сигнал RDS/RBDS находится в полосе 57 кГц +/- 2,4 кГц:

Следует иметь в виду, что сигналы RDS и RBDS передаются с относительно низкой степенью, поэтому они не всегда видны в спектре, как на приведенном выше рисунке.

FM-сигналы содержат пилот-сигнал с частотой 19 кГц, который может использоваться в качестве фазы и опорной частоты для когерентной демодуляции сигнала RDS/RBDS с частотой 57 кГц и стерео-аудио с частотой 38 кГц. Тональные сигналы управления частотой 38 кГц и 57 кГц могут быть сгенерированы путем удвоения и утроения частоты тонального сигнала управления частотой 19 кГц [2].

Этапы обработки для когерентной демодуляции сигнала RDS/RBDS:

  • Полосовая фильтрация: Приемник проводит полосовую фильтрацию на частотах 19 кГц и 57 кГц, чтобы изолировать тональный сигнал управления и сигнал RDS/RBDS, соответственно.

  • Тройное увеличение частоты: Увеличение комплексного представления пилот-тонального сигнала 19 кГц до 3-й степени, чтобы утроить его частоту и получить пилот-тональный сигнал 57 кГц.

  • AM Demodulation: символы RDS и RBDS генерируются со скоростью 1187,5 Гц и модулируются AM на несущей 57 кГц. Сигнал RDS/RBDS 57 кГц может быть когерентно демодулирован с несущей 57 кГц, которая заблокирована в частоте и фазе. Обычно частотно-утроенный пилот-тон 19 кГц достаточен для когерентной демодуляции. Следующие рисунки показывают пилот-тональные сигналы 19 кГц и 57 кГц, сигнал RDS/RBDS 57 кГц и AM-демодулированный сигнал RDS/RBDS основной полосы частот.

В то же время существует несколько FM станций, чей сигнал RDS/RBDS 57 кГц показывает изменяющееся во времени смещение фазы от пилот-тонального сигнала 19 кГц и его трехчастотной версии. Приемник PHY содержит схему Костаса, чтобы компенсировать такие изменяющиеся во времени смещения фазы.

  • Схема Костаса: Цикл Костаса выполняет 2 ортогональные AM демодуляции, одна демодуляция с синусом 57 кГц и другая с косинусом 57 кГц. Частота дискретизации принимаемого сигнала тщательно выбирается равной 228 кГц, что обеспечивает 4 выборки в цикле 57 кГц. Поэтому задержка на одну выборку пилот-тонального сигнала 57 кГц результатов к смещению фазы на одну четверть длины волны и позволяет нам генерировать косинусоидную волну из синусоиды. Синусоидальный демодулированный сигнал соответствует выходу когерентной демодуляции. Сигнал, демодулированный косинусом, используется для обнаружения фазы ошибки. Продукты сигнала RDS/RBDS 57 кГц с синусоидальными/косинусоидальными волнами фильтруют низкочастотным фильтром, указанным в разделе 1.7 [1]. Продукт из двух выходов фильтра является сигналом ошибки. Чем он больше, тем больше тон пилот-сигнала 19 кГц задерживается, чтобы вести себя больше, как демодулятор на основе косинуса.

  • Выделение синхроимпульса: Для выполнения декодирования бифазного символа из пилот-сигнала 19 кГц извлекается синхроимпульс, соответствующий скорости символа RDS/RBDS 1187,5 Гц. Обратите внимание, 1187,5 Гц x 16 = 19 кГц. Для расчета смещений частоты частотное деление используется для извлечения синхроимпульса из пилот-сигнала 19 кГц. Поскольку операция деления обеспечивает несколько правильных ответов, сигнал RDS/RBDS основной полосы частот служит обучающими данными, которые помогают в определении желаемого выхода.

  • Бифазный символьный декодер: RDS и RBDS используют бифазное (bi-$\phi$ -L) кодирование, которое обычно известно как Манчестер-кодирование. За каждый такт символ RDS/RBDS берет два противоположных амплитудных значения, или положительное, сопровождаемое отрицанием, или отрицание, сопровождаемое положительным. Декодер бифазного символа отменяет второй уровень амплитуды, так что каждый символ содержит один и тот же уровень амплитуды в течение всего такта. Новый уровень амплитуды всего синхроимпульса соответствует битовому представлению символа. Следующие два снимка экрана соответствуют формам сигналов # 1-6 на фигуре 2 [1].

Чтобы получить битовое значение каждого символа, форма волны интегрируется в каждом такте, и результат сравнивается с нулем (слайсер).

  • Дифференциальное декодирование: Наконец, биты дифференциально декодируются, чтобы вернуть дифференциальное кодирование в передатчике.

Слой канала передачи данных (слой 2)

Слой 2 реализован с использованием системной object™ RBDSDataLinkDecoder. Этот слой отвечает за синхронизацию и коррекцию ошибок.

Битовый выход слоя PHY логически организован в 104-битовых группах, содержащих четыре 26-битовых блока. Каждый блок содержит 16-битное информационное слово и 10 биты четности (см. фигуру 8 в [1]). Отдельное 10-битовое слово смещения добавлено по модулю-2 к битам четности каждого блока.

  • Синхронизация: Первоначально контуры блоков и групп ищутся исчерпывающе с помощью скользящего окна 104 бит. Для каждого 104-битового окна 4 слова смещения запрашиваются в последних 10 битах каждого 26-битового блока. Слово смещения идентифицируется, если в его блоке не обнаружено битовых ошибок. Когда слова смещения идентифицируются, достигается синхронизация на уровне группы, и исчерпывающая обработка окна скольжения останавливается. Впоследствии следующие 104 бита будут рассматриваться как следующая группа.

Если будущие группы содержат битовые ошибки, и слова смещения не могут быть идентифицированы в их ожидаемом положении, синхронизация может быть потеряна. В этом случае Слой 2 сначала исследует возможность 1-битных пробелов синхронизации, используя тот факт, что первое информационное слово (16 биты) всегда одно и то же для всех битовых групп. Если первое информационное слово найдено дислоцированным на 1 бит (либо влево, либо вправо), синхронизация сохраняется, и контуры группы корректируются соответственно. Если битовые ошибки сохраняются для 25 приемов группы и в то же время синхронизация не может быть восстановлена, используя такие левые/правые 1-битовые сдвиги, то синхронизация теряется, и слой 2 повторно входит в исчерпывающий, основанный на скользящем окне поиск синхронизации.

  • Коррекция ошибок: Код коррекции ошибок RDS/RBDS является (26, 16) циклическим кодом, укороченным от (341, 331). Реализация коррекции ошибок использует схему сдвигового регистра, описанную в Приложении B к [1].

Слой сеансов и презентаций (уровень 3)

Слой 2 удаляет биты четности/смещения, поэтому слой 3 принимает группы 64 битов, содержащие четыре 16-битовых блока. Существует до 32 различных типов групп, каждый из которых помечен числом от 0 до 15 и буквой 'A' или 'B', например, 0B, 2A, 3A. Формат каждой группы может быть фиксированным или абстрактным, если эта группа выделена для открытого приложения данных (ODA, см. список в [3]).

Слой 3 реализован с использованием объекта RBDSSessionDecoder System. Эта расшифровка поддержек объекта 0A, 0B, 2 А, 2B, 3 А, 4 А, типов группы фиксированного формата на 10 А.

  • 0A и 0B передают 8-символьную строку, которая обычно изменяется прокруткой текста.

  • 2A и 2B передают более длинные 64 - или 32-символьные строки.

  • 3A регистрирует ODA и задает их выделенный тип группы абстрактного формата.

  • 4A передает системное время.

  • 10A далее классифицирует тип программы (например, 'Football' для типа программы 'Sports').

Для ODA, RDS/RBDS приемник поддерживает декодирование RadioText Plus (RT +). Эта ОПР может разбить длинную 32- или 64-символьную строку из типов групп 2A или 2B на два конкретных типа содержимого (для примера, исполнителя и песни).

Регистрация реализации ODA: RadioText Plus (RT +

)

Приемник RDS/RBDS расширяется. Реализации ODA могут быть заданы с помощью функции registerODA объекта RBDSSessionDecoder System. Эта функция принимает шестнадцатеричный идентификатор ОПР (идентификаторы ОПР могут быть найдены в [3]), и обрабатывает функции, которые обрабатывают основной тип группы ОПР, а также специфичную для ОПР часть типа группы 3A. Например, объект sessionDecoder RBDSSessionDecoder может быть расширен для RadioText Plus (RT +) с помощью этого кода:

rtID = '4BD7'; % hexadecimal ID of RadioText Plus (RT+)
registerODA(sessionDecoder, rtID, @RadioTextPlusMainGroup, @RadioTextPlus3A);

Запуск кода примера

Введите RBDSExample в Командном окне MATLAB или щелкните эту ссылку, чтобы запустить пример.

% Set RDS/RBDS system parameters
userInput = helperRBDSInit();
userInput.Duration = 10.8;
userInput.SignalSource = 'File';
userInput.SignalFilename = 'rbds_capture.bb';
% userInput.SignalSource = 'RTL-SDR';
% userInput.CenterFrequency = 98.5e6;
% userInput.SignalSource = 'ADALM-PLUTO';
% userInput.CenterFrequency = 98.5e6;


[rbdsParam, sigSrc] = helperRBDSConfig(userInput);

% Create FM broadcast receiver object and configure based on RDS/RBDS parameters
fmBroadcastDemod = comm.FMBroadcastDemodulator(...
    'SampleRate',         rbdsParam.FrontEndSampleRate, ...
    'FrequencyDeviation', rbdsParam.FrequencyDeviation, ...
    'FilterTimeConstant', rbdsParam.FilterTimeConstant, ...
    'AudioSampleRate',    rbdsParam.AudioSampleRate, ...
    'Stereo', true);

% Create audio player
player = audioDeviceWriter('SampleRate', rbdsParam.AudioSampleRate);

% Layer 2 object
datalinkDecoder = RBDSDataLinkDecoder();

% Layer 3 object
sessionDecoder  = RBDSSessionDecoder();
% register processing implementation for RadioText Plus (RT+) ODA:
rtID = '4BD7';
registerODA(sessionDecoder, rtID, @RadioTextPlusMainGroup, @RadioTextPlus3A);

% Create the data viewer object
viewer = helperRBDSViewer();

% Start the viewer and initialize radio time
start(viewer)
radioTime = 0;

% Main loop
while radioTime < rbdsParam.Duration
  % Receive baseband samples (Signal Source)
  rcv = sigSrc();

  % Demodulate FM broadcast signals and play the decoded audio
  audioSig = fmBroadcastDemod(rcv);
  player(audioSig);

  % Process physical layer (Layer 1)
  bitsPHY = RBDSPhyDecoder(rcv, rbdsParam);

  % Process data-link layer (Layer 2)
  [enabled, iw1, iw2, iw3, iw4] = datalinkDecoder(bitsPHY);

  % Process session and presentation layer (Layer 3)
  outStruct = sessionDecoder(enabled, iw1, iw2, iw3, iw4);

  % View results packet contents (Data Viewer)
  update(viewer, outStruct);

  % Update radio time
  radioTime = radioTime + rbdsParam.FrameDuration;
end

% Stop the viewer and release the signal source and audio writer
stop(viewer);
release(sigSrc);
release(player);

Просмотр результатов

Приведенный выше снимок экрана иллюстрирует графическое отображение обработанных данных RDS/RBDS.

  • Базовая информация RDS/RBDS:

  1. Первое поле соответствует типу программы, который передается вторым информационным словом всех типов группы. Если получены 10A типы групп, первое поле также обеспечивает дополнительную характеристику, например, Sports\Football.

  2. Второе поле иллюстрирует 8-символьный текст, передаваемый 0A/0B группами.

  3. Третье поле иллюстрирует более длинный 32/64-символьный текст, передаваемый типами 2A/2B групп.

  • RadioText Plus (RT +): Этот раздел используется, если какие-либо 3A группы указывают, что RadioText Plus (RT +) ODA использует тип группы абстрактного формата, например, 11A. Затем, после приема этого типа абстрактной группы, 32/64-символьный текст, переданный группами 2A/2B, будет разделен на две подстроки. Кроме того, эти две метки будут обновлены, чтобы охарактеризовать подстроки (такие как Artist и Song).

  • Приемы типа группы: Таблицы действуют как гистограмма, иллюстрирующая, какие типы групп были получены от станции и с какой частотой. В результате пользователи могут захотеть просмотреть записанные данные для получения дополнительной информации, которая не изображена в графическом средстве просмотра (в частности, системное время в 4A, альтернативные частоты в 0A и т.д.).

  • Откройте приложения данных (ODA): Если получены какие-либо 3A типы групп, то список встретившихся ODA обновляется с именем ODA и их выделенным типом группы.

Дальнейшие исследования

Можно дополнительно изучить сигналы RDS/RBDS с помощью пользовательского интерфейса RBDSExampleApp. Вы можете запустить его, нажав на эту ссылку или введя RBDSExampleApp в командном окне:

Этот пользовательский интерфейс позволяет:

  • Выберите источник сигнала (файл захвата или RTL-SDR или ADALM-PLUTO)

  • Укажите частоту станции (для RTL-SDR или ADALM-PLUTO)

  • Запустите слои 1 и 2 приемника RDS/RBDS, хотя сгенерированный код C Это наиболее длительные части цепи RDS/RBDS, и генерация кода может помочь вам достичь обработки в реальном времени.

  • Отключить воспроизведение аудио

  • Откройте возможности, такие как Spectrum Analyzer и Time Scopes, которые анализируют принятый сигнал и иллюстрируют процесс декодирования. Включение возможности требует дополнительных вычислительных усилий и может препятствовать декодированию в реальном времени. В этом случае декодирование RDS/RBDS может быть успешным только для записанных сигналов, загруженных из файла.

Кроме того, можно включить флажок 'Журнала данных to файла' в порядок для регистрации дальнейших полей из всех типов групп.

Можно также исследовать реализацию следующих функций и системных объектов:

Избранная библиография

  1. Национальный комитет по радиосистемам, стандарт RBDS Соединенных Штатов, апрель 1998 года

  2. Дер, Лоуренс. «Учебное руководство по частотной модуляции (FM)». Silicon Laboratories Inc.

  3. Национальный комитет по радиосистемам, Список приложений ОПР в РДС

  4. Спецификация RadioText Plus (RT +)

  5. Джозеф П. Хоффбек, «Обучение коммуникационным системам с Simulink ® и USRP», Ежегодная конференция ASEE, Сан-Антонио, Техас, июнь 2012 года