RDS/RBDS и RadioText Плюс (RT +) Получатель FM

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

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

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

Для полного списка Communications Toolbox поддерживаемые платформы SDR обратитесь к разделу Supported Hardware Программно определяемого радио (SDR).

Фон

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

  • Физический уровень (слой 1)

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

  • Сеансовый уровень и уровень представления (Слой 3)

Физический уровень (слой 1)

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

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

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

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

Обрабатывающие шаги для когерентной демодуляции сигнала RDS/RBDS:

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

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

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

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

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

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

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

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

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

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

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

Битный выход слоя 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 и буква или 'B', например, 0B, 2 А, 3 А. Формат каждой группы может быть зафиксирован, или это может быть абстрактно, если эта группа выделяется для Открытого Применения данных (ODA, см. список в [3]).

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

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

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

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

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

  • На 10 А далее категоризирует тип программы (например, 'Футбол' для 'Спортивного' типа программы).

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

Регистрация реализаций ODA: RadioText плюс (RT +)

Получатель RDS/RBDS расширяем. Реализации ODA могут быть заданы с помощью registerODA функции Системного объекта RBDSSessionDecoder. Эта функция принимает шестнадцатеричный ID ODA (идентификаторы ODA могут быть найдены в [3]), и указатели на функции, которые обрабатывают основной тип группы ODA, а также специфичную для ODA часть типа группы на 3 А. Например, объект sessionDecoder RBDSSessionDecoder может быть расширен для RadioText Плюс (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. Первое поле соответствует типу программы, который передается вторым информационным словом всех типов группы. Если типы группы на 10 А получены, первое поле также обеспечивает дальнейшую характеристику, такой как, Спорт \Футбол.

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

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

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

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

  • Открытые применения данных (ODA): Если какие-либо типы группы на 3 А получены, то список ODAs, с которым сталкиваются, обновляется с именем ODA и их специализированным типом группы.

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

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

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

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

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

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

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

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

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

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

Выбранная библиография

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

  2. Der, Лоуренс. "Пример по частотной модуляции (FM)". Silicon Laboratories Inc.

  3. Национальный комитет по системам радиосвязи, список приложений ODA в RDS

  4. RadioText плюс (RT +) спецификация

  5. Джозеф П. Хоффбек, "Преподавая системы связи с Simulink® и USRP", ежегодная конференция ASEE, Сан-Антонио, TX, июнь 2012