comm.RBDSWaveformGenerator

Сгенерируйте RDS/RBDS сигнал

Описание

The comm.RBDSWaveformGenerator Системная object™ генерирует конфигурируемые совместимые со стандартом RDS/RBDS сигналы основной полосы в MATLAB®. RDS/RBDS сигналы дополнить FM-радиостанции дополнительной текстовой информацией, такой как заголовок песни, имя исполнителя и описание станции. Сигнал RDS/RBDS лежит в 57-kHz диапазоне радиосигнала FM основной полосы.

Используйте этот объект, чтобы сгенерировать сигнал, содержащий информацию RadioText Plus (RT +), и зарегистрировать пользовательскую реализацию кодирования для открытого приложения данных (ODA). Можно также задать время, данные и тип программы. Объект поддерживает короткий, прокручивающий 8-символьный текст и более длинный 32-символьный или 64-символьный текст.

Чтобы сгенерировать RDS/RBDS сигналы основной полосы частот:

  1. Создайте comm.RBDSWaveformGenerator и установите свойства объекта.

  2. Функции step чтобы сгенерировать форму волны.

Примечание

Кроме того, вместо использования step метод для выполнения операции, заданной системным объектом, можно вызвать объект с аргументами, как если бы это была функция. Для примера, y = step(obj,x) и y = obj(x) выполнять эквивалентные операции.

Конструкция

rbdsgen = comm.RBDSWaveformGenerator создает объект генератора RDS/RBDS сигналов, rbdsgen, с использованием свойств по умолчанию.

rbdsgen = comm.RBDSWaveformGenerator(Name,Value) задает дополнительные свойства, используя Name,Value пар. Неопределенные свойства имеют значения по умолчанию.

Пример:

rbdsgen = comm.RBDSWaveformGenerator( ...
     'GroupsPerFrame',20,'SamplesPerSymbol',10, ...
     'SendRadioTextPlus',true);

Свойства

расширить все

Если свойство указано как настраиваемое, то можно изменить его значение даже при блокировке объекта.

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

Количество групп в выходной системе координат, заданное как скалярное целое число. Каждая группа имеет длину 104 символа (бита).

Текст на радио, передаваемый группами 2A типа, задается как вектор символов длиной до 64 символов. Объект передает указанный текст по четыре символа за раз, используя группу 2A типа.

Настраиваемый: Да

Метка программного сервиса, заданная как вектор символов длиной до восьми символов. Эта информация передается как краткий текст с группами 0A типов по два символа за раз.

Настраиваемый: Да

Код идентификации программы (PI), заданный как 16-битный вектор-строка. В Северной Америке код PI передает буквы вызова станции. Например, буквы вызова включают 'WABC' и 'KXYZ'.

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

Тип программы, заданный как вектор символов, содержащий одно из 31 значений, допустимых стандартом RDS/RBDS. Список типов программ, разрешенных стандартом RDS/RBDS в Северной Америке, см. в разделе [1].

Настраиваемый: Да

Имя типа программы, заданное как вектор символов длиной до восьми символов. Этот текст далее характеризует тип программы, такой как 'Football' для типа программы 'Sports'. Объект передает имя типа программы, используя группу 10A типа. Если это свойство пусто, 10A группы не генерируются.

Настраиваемый: Да

Опция объявления даты и времени, заданная как false или true. Когда вы устанавливаете это свойство на trueпериодически генерируется одна группа 4A каждые 685 групп (один раз в минуту).

Альтернативные частоты, заданные как вектор-строка в МГц. Эта информация передается с группами 0A типа. Это указывает другие передатчики, транслирующие ту же программу в тех же или смежных областях приема. С помощью этой информации приемники могут переключаться на другую частоту с лучшим приемом.

Опция передачи информации RadioText Plus (RT +), заданная как скалярная логика. Когда вы устанавливаете это свойство на trueинформация RT + ODA рекламируется группами 3A типа. Кроме того, типы содержимого RT +, указанные в RadioTextType1, RadioTextType2и две подстроки RT +, индексируемые RadioTextIndices передаются с группой 11A открытого формата.

Тип содержимого первой подстроки RT +, заданный как вектор символов. Допустимые значения - это имена классов, указанные в стандарте RT +. Для получения дополнительной информации см. раздел [2].

Настраиваемый: Да

Тип содержимого второй подстроки RT +, заданный как вектор символов. Допустимые значения - это имена классов, указанные в стандарте RT +. Для получения дополнительной информации см. раздел [2].

Настраиваемый: Да

Начальный и конечный индексы подстрок RT +, заданные как матрица 2 на 2 положительных целых чисел. Первый столбец индексирует начало каждой подстроки RT +. Второй столбец индексирует конец каждой подстроки.

Настраиваемый: Да

Методы

callLettersToPICodeПреобразуйте североамериканские вызовы буквы в двоичные PI кода
registerODAЗарегистрируйте пользовательскую реализацию кодирования для ODA
шагСгенерируйте RDS/RBDS сигнал
Общий для всех системных объектов
release

Разрешить изменение значения свойства системного объекта

reset

Сброс внутренних состояний Системного объекта

Примеры

свернуть все

Сгенерируйте базовую форму волны RBDS, FM модулируйте форму волны аудиосигналом, а затем демодулируйте форму волны.

Каждая система координат формы волны RBDS содержит 19 групп с длиной группы 104 бита (символы) каждая. Установите количество выборок на символ RBDS равным 10. Поэтому количество выборок в каждой системе координат формы волны RBDS составляет 104 x 10 x 19 = 19 760. Согласно стандарту RBDS, битрейт составляет 1187,5 Гц. Таким образом, скорость дискретизации RBDS = 1187,5 x выборки на символ RBDS. Установите частоту звуковой системы координат 40 x 1187,5 = 47 500.

groupLen = 104;
sps = 10;
groupsPerFrame = 19;
rbdsFrameLen = groupLen*sps*groupsPerFrame;
afrRate = 40*1187.5;
rbdsRate = 1187.5*sps;
outRate = 4*57000;

afr = dsp.AudioFileReader('rbds_capture_47500.wav','SamplesPerFrame',rbdsFrameLen*afrRate/rbdsRate);
rbds = comm.RBDSWaveformGenerator('GroupsPerFrame',groupsPerFrame,'SamplesPerSymbol',sps);

fmMod = comm.FMBroadcastModulator('AudioSampleRate',afr.SampleRate,'SampleRate',outRate,...
    'Stereo',true,'RBDS',true,'RBDSSamplesPerSymbol',sps);
fmDemod = comm.FMBroadcastDemodulator('SampleRate',outRate,...
    'Stereo',true,'RBDS',true,'PlaySound',true);
scope = timescope('SampleRate',outRate,'YLimits',10^-2*[-1 1]);

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

for idx = 1:7
    input = afr();                         % get current audio input
    rbdsWave = rbds();                     % generate RBDS info at the same configured rate
    yFM = fmMod([input input], rbdsWave);  % FM modulate stereo audio with RBDS info
    rcv = awgn(yFM, 40);                   % add noise
    [audioRcv, rbdsRcv] = fmDemod(rcv);    % FM demodulate the audio and RBDS waveforms
    scope(rbdsRcv);
end

Создайте comm.RBDSWaveformGenerator Системный object™ с 20 группами на систему координат и 10 выборками на символ. Добавьте информацию Radio Text plus (RT +), например имя исполнителя и песню, заголовок, к форме волны. Укажите начало и конец подстрок RT + при помощи RadioTextIndices свойство.

rbds = comm.RBDSWaveformGenerator('GroupsPerFrame',20,'SamplesPerSymbol',10,...
    'SendRadioTextPlus', true);
rbds.RadioText = 'MyArtist - MySongTitle';
rbds.RadioTextType1 = 'Item.Artist';
rbds.RadioTextType2 = 'Item.Title';
rbds.RadioTextIndices = [1 8; 12 22]; 
for idx = 1:10
    rbds.step();
end

Зарегистрируйте пользовательскую реализацию кодировки для открытого приложения данных (ODA) при помощи registerODA метод comm.RBDSWaveformGenerator Системные object™. Установите идентификатор ODA на 'CD46', который является идентификатором канала сообщения трафика. Выделенный тип группы - 8A.

rbds = comm.RBDSWaveformGenerator();
odaID = 'CD46';
allocatedGroupType = '8A';

Этот пример использует следующие шаблоны в качестве начальной точки для пользовательской реализации кодирования.

mainProcessingFcn = @CustomODAEncodingMain;
fcn3A             = @CustomODAEncoding3A;
registerODA(rbds,odaID,allocatedGroupType,mainProcessingFcn,fcn3A);
s = info(rbds);
s.ODAMap
ans=2×1 struct array with fields:
    ID
    GroupType
    FunctionMain
    Function3A

Сгенерируйте сигнал RBDS с информацией о дате и времени, типе программы и альтернативных частотах. The comm.RBDSWaveformGenerator объект использует тип 4A группы для информации о дате и времени, введите 10A группы для информации о типе программы и введите 0A группы для альтернативных частот. Просмотрите форму волны в анализаторе спектра.

rbds = comm.RBDSWaveformGenerator('GroupsPerFrame',1000);
scope = dsp.SpectrumAnalyzer('SampleRate',1187.5*rbds.SamplesPerSymbol,'YLimits',[-140 20]);
rbds.SendDateTime = true;          % send type 4A groups
rbds.ProgramType = 'Sports';
rbds.ProgramTypeName = 'Football'; % send type 10A groups
rbds.AlternativeFrequencies = [99.1 102.5]; % info sent in type 0A groups
wave = rbds.step();
scope(wave)

Алгоритмы

расширить все

comm.RBDSWaveformGenerator генерирует формы сигналов согласно стандарту RDS/RBDS [1]. Стандарт RDS/RBDS состоит из трех слоев: физического уровня, уровня канала передачи данных и уровня сеанса и приложения.

Ссылки

[1] Национальный комитет радиосистем. Стандарт RBDS США: Спецификация системы радиовещательных данных (RBDS). Ассоциация электронных индустрий и Национальная ассоциация вещателей. 9 апреля 1998 года.

[2] Westdeutscher Rundfunk WDR, Nokia и Institut für Rundfunktechnik IRT. Спецификация RadioText Plus (RT +), версия 2.1. 2006.

Расширенные возможности

.
Введенный в R2017a