Цифровой вверх и вниз по преобразованию для сервиса радио семейства

Этот пример показывает, как использовать Системные объекты цифрового конвертера (DUC) и цифрового вниз конвертера (DDC), чтобы разработать передатчик Сервиса радио семейства (FRS) и получатель. Эти объекты обеспечивают инструменты, чтобы разработать интерполяцию/децимирующие фильтры и упростить шаги, требуемые реализовывать/вниз процесс преобразования. Этот пример иллюстрирует и MATLAB® и реализации Simulink®. Версия MATLAB использует Системные объекты для DUC и DDC, тогда как версия Simulink использует блоки для DUC и DDC. В обеих версиях речевой сигнал используется в качестве входа и сигнала после того, как передача будет воспроизведена.

FRS является улучшенной рацией система радиосвязи FM, авторизованная в Соединенных Штатах с тех пор 1996. Этот персональный радио-сервис использует канализируемые частоты в полосе крайней высокой частоты (UHF). Устройства, действующие в полосе FRS, должны быть авторизованы под Подразделением Части 95 B "Сервис Радио Семейства" (Разделы 95.191 до 95,194) правил FCC. Авторизованная пропускная способность каналов FRS составляет 12,5 кГц, и центральное разделение частоты между каналами составляет 25 кГц.

Введение

Этот пример обсуждает цифровое преобразование сигнала, который будет передан через канал FRS, и вниз преобразование сигнала, прибывающего из радио-передатчика FRS.

Речь на 8 кГц сначала передискретизируется к 50 кГц. DUC в передатчике преобразовывает сигнал от 50 кГц до 2 МГц и переключает сигнал к частоте IF 455 кГц.

Получатель имеет аналоговый фронтэнд, который приносит полученный сигнал к частоте IF 455 кГц. Сигнал затем выбирается на уровне 2 МГц. DDC в получателе возвращает сигнал основной полосе с частотой дискретизации 50 кГц. Это возвращено речевой области значений на 8 кГц.

Цифровой проект конвертера

Вы разрабатываете цифровое конвертер путем создания Системного объекта DUC. Объект DUC состоит из каскада трех фильтров интерполяции и осциллятора, который преобразовывает интерполированный сигнал в заданную частоту полосы пропускания. Блок-схему объекта DUC показывают затем.

Объект DUC предоставляет возможности задавать фильтры интерполяции. Например, можно разработать осциллятор с помощью или генератора синусоиды или осциллятора с программным управлением. Следующий раздел демонстрирует различные варианты, доступные, чтобы разработать фильтры интерполяции для передатчика FRS.

Разработка фильтров интерполяции

Объект DUC реализует фильтр интерполяции с помощью трех этапов фильтра. Когда объект DUC разрабатывает фильтры внутренне, первая стадия состоит из полуполосы или фильтра lowpass, второй этап состоит из компенсатора CIC, и третья стадия состоит из фильтра интерполяции CIC. Объект DUC позволяет вам задавать несколько характеристик, которые задают ответ каскада для трех фильтров, включая полосу пропускания и частоты полосы задерживания, пульсацию полосы пропускания и затухание полосы задерживания.

Проекты фильтра минимального заказа

По умолчанию (когда свойство MinimumOrderDesign установлено в истину) объект DUC получает проекты фильтра интерполяции минимального заказа с помощью полосы пропускания и спецификаций полосы задерживания, которые вы обеспечиваете.

Для этого примера FRS необходимо выбрать переданный сигнал от 50 кГц до 2 МГц. Это приводит к коэффициенту интерполяции 40. Объект DUC автоматически учитывает значение интерполяции так, чтобы первый этап фильтра интерполировал 2, второй этап фильтра интерполирует 2, и CIC-фильтр интерполирует 10.

Канал FRS двухсторонняя пропускная способность составляет 12,5 кГц. Установите свойство Bandwidth объекта DUC к 12,5 кГц так, чтобы частота полосы пропускания каскадного ответа фильтров интерполяции была 12.5e3/2 = 6,25 кГц.

Установите пульсацию полосы пропускания на маленькое значение 0,05 дБ избегать искажения сигнала FRS. Установите затухание полосы задерживания на 60 дБ.

По умолчанию (когда свойство StopbandFrequencySource установлено в 'Auto') объект DUC устанавливает частоту среза каскадного ответа приблизительно во входе уровень Найквиста 25 кГц. Объект также устанавливает частоту полосы задерживания в 2Fc-Fpass = 2*25e3 - 12.5e3/2 = 43,75 кГц, где ФК является частотой среза, и Fpass является частотой полосы пропускания. В этом сценарии объект DUC ослабляет частоту полосы задерживания как можно больше, получая самые низкие порядки фильтра за счет разрешения некоторой энергии копий интерполяции в полосе перехода каскадного ответа. Этот компромисс проекта удобен, когда ваш приоритет состоит в том, чтобы минимизировать порядки фильтра.

DUC = dsp.DigitalUpConverter(...
  'SampleRate',50e3,...
  'InterpolationFactor',40,...
  'Bandwidth',12.5e3,...
  'PassbandRipple',0.05,...
  'StopbandAttenuation',60);

Визуализируйте каскадный ответ децимирующих фильтров с помощью fvtool или методов visualizeFilterStages объекта DUC. Задайте арифметику как 'double' так, чтобы коэффициенты фильтра и операции были с двойной точностью.

fvt = fvtool(DUC,'Arithmetic','double');

close(fvt)
fvt = visualizeFilterStages(DUC,'Arithmetic','double');

Получите порядки разработанных фильтров с помощью метода getFilterOrders.

s = getFilterOrders(DUC);
s.FirstFilterOrder
ans =

    10

s.SecondFilterOrder
ans =

    12

Разделение каналов FRS составляет 25 кГц. Большинство коммерческих радио FRS предлагает 50 дБ или более высокое смежное отклонение канала (ACR). Безусловно, каскадный ответ децимирующих фильтров, разработанных выше, не достигает затухания на 50 дБ на уровне 25 кГц. Одно возможное решение этой проблемы состоит в том, чтобы отфильтровать основополосный сигнал FRS с фильтром lowpass с необходимой шириной перехода и затуханием полосы задерживания прежде, чем передать сигнал через объект DUC. Другое решение состоит в том, чтобы установить объект DUC так, чтобы это разработало каскадный ответ с более узкой пропускной способностью перехода, которая соответствует необходимой спектральной маске. Чтобы разработать полный ответ фильтра с более узкой пропускной способностью перехода, установите свойство StopbandFrequencySource на 'Property' и свойство StopbandFrequency к требуемому значению.

Разработайте фильтры так, чтобы каскадный ответ имел частоту полосы задерживания в ребре полосы пропускания смежного канала FRS, т.е. в 25e3-12.5e3/2 = 18,75 кГц. Установите свойство StopbandAttenuation на 60 дБ достигать ACR на 60 дБ.

DUC.StopbandFrequencySource = 'Property';
DUC.StopbandFrequency = 18.75e3;
DUC.StopbandAttenuation = 60;
close(fvt)
fvt = fvtool(DUC,'Arithmetic','double');

Получите порядки фильтра

s = getFilterOrders(DUC);
s.FirstFilterOrder
ans =

    23

s.SecondFilterOrder
ans =

     7

Новый каскадный ответ достигает затухания на 60 дБ на уровне 25 кГц, т.е. в центре смежного канала FRS. Порядок фильтра первой стадии (lowpass интерполятор) увеличивается от 10 до 23. Обратите внимание однако, что порядок второго фильтра этапа (компенсатор CIC) уменьшается с 12 до 7. Поскольку ответ первой стадии имеет более узкую пропускную способность, вторая полоса задерживания этапа может быть ослаблена еще больше к ребру левой полосы задерживания первой копии фильтра первой стадии. Поскольку второй этап фильтра действует на более высоком уровне, это - очень удобное сокращение порядка.

Управление порядками фильтра

Существуют случаи, когда порядки фильтра являются основным конструктивным ограничением. Установите свойство MinimumOrderDesign на ложь разрабатывать фильтры интерполяции с определенным порядком. В этой настройке можно все еще задать необходимую полосу пропускания и частоты полосы задерживания. Порядки фильтров управляют затуханием полосы задерживания и пульсацией каскадного ответа.

Чтобы соответствовать ограничению максимума 20 коэффициентов на первом этапе фильтра, установите свойство FirstFilterOrder на 20. Установите свойство SecondFilterOrder на 7, и количество разделов CIC к 4.

% Keep a copy of the minimum order design so that we can use it later on
% this example.
DUCMinOrder = clone(DUC);

% Specify the filter orders and visualize the cascade response.
DUC.MinimumOrderDesign = false;
DUC.FirstFilterOrder = 20;
DUC.SecondFilterOrder = 7;
DUC.NumCICSections = 4;

close(fvt)
fvt = fvtool(DUC,'Arithmetic','double');

Новый проект имеет более низкое затухание полосы задерживания и большую пульсацию полосы пропускания из-за уменьшаемого первого порядка фильтра.

Проект осциллятора

Используйте свойство Oscillator выбрать тип осциллятора объектное использование, чтобы выполнить частоту преобразование. Установите свойство на 'Sine wave' получать сигнал осциллятора из синусоидального вычисленного использования выборки тригонометрической функции. Также установите свойство на 'NCO', таким образом, объект разрабатывает осциллятор с программным управлением. Установите центральную частоту осциллятора к частоте IF 455 кГц.

DUC.Oscillator = 'Sine wave';
DUC.CenterFrequency = 455e3;

Цифровой вниз проект конвертера

Вы разрабатываете цифровой вниз конвертер (DDC) путем создания Системного объекта DDC. Системный объект DDC состоит из осциллятора, который вниз преобразовывает входной сигнал от определенной частоты полосы пропускания до 0 Гц. Объект вниз выбирает вниз конвертированный сигнал с помощью каскада трех децимирующих фильтров. Следующая блок-схема показывает объект DDC.

Как в случае DUC, объект DDC предлагает различные варианты для определения децимирующих фильтров. Например, можно разработать осциллятор с помощью или генератора синусоиды или осциллятора с программным управлением. Также можно обеспечить сигнал осциллятора как вход.

Разработка децимирующих фильтров

Объект DDC реализует десятикратное уменьшение с помощью трех этапов фильтра. Когда объект разрабатывает фильтры внутренне, первая стадия состоит из CIC decimator, второй этап состоит из компенсатора CIC, и третья стадия состоит из полуполосы, или lowpass, децимирующего фильтра. Как в случае DUC, объект DDC позволяет вам задавать характеристики, которые задают ответ каскада трех фильтров, включая полосу пропускания и частоты полосы задерживания, пульсацию полосы пропускания и затухание полосы задерживания.

Разработайте децимирующие фильтры минимального заказа, чтобы получить сигнал FRS, сосредоточенный на частоте IF 455 кГц. Десятикратно уменьшите сигнал 40, чтобы субдискретизировать его от 2 МГц до 50 кГц. Установите свойство StopbandFrequencySource на 'Property' и затухание полосы задерживания к 60 дБ разрабатывать каскадный ответ, который достигает ACR 60 дБ.

DDCMinOrder = dsp.DigitalDownConverter(...
  'SampleRate',2e6,...
  'DecimationFactor',40,...
  'Bandwidth',12.5e3,...
  'PassbandRipple',0.05,...
  'StopbandAttenuation',60,...
  'StopbandFrequencySource', 'Property',...
  'StopbandFrequency',18.75e3,...
  'CenterFrequency',455e3);

Анализируйте ответы фильтров decimator и проверьте, что каскадный ответ достигает затухания 60 дБ на уровне 25 кГц. Отметьте, как DDC ослабляет ответ второго этапа (компенсатор CIC) к ребру левой полосы задерживания первого псевдонима третьей стадии (lowpass decimator), чтобы минимизировать порядок.

close(fvt)
fvt = visualizeFilterStages(DDCMinOrder,'Arithmetic','double');

Подобно случаю DUC можно задать порядки фильтра путем установки свойства MinimumOrderDesign на ложь.

MATLAB, обрабатывающий цикл

Часть 95 FCC задает модуляцию FM с максимальным отклонением частоты 2,5 кГц и максимальной звуковой частотой 3,125 кГц. Частота - модулирует звуковой сигнал получить основополосный сигнал FRS (сигнал не включает бесшумный тон). Преобразуйте и вниз преобразуйте основополосный сигнал FRS использование DUC и объектов DDC, которые были разработаны в предыдущих разделах с помощью фильтров минимального заказа. Демодулируйте сигнал и проигрывайте его с помощью аудиоплеера.

% Initialize simulation parameters
close(fvt)
Fs = 50e3;
frameLength = 1000;
maxAudioFrequency = 3.125e3; % Maximum allowed audio frequency for FRS radios
deltaF = 2.5e3; % Maximum allowed frequency deviation for FRS radios
freqSensitivityGain = deltaF*2*pi/Fs;    % K=FD/A*(2*pi*Ts)

ModulationFilter = dsp.IIRFilter('Numerator',1,'Denominator',[1, -1]);
DemodulationDelay = dsp.Delay(1);

audioReader = dsp.AudioFileReader('speech_dft_8kHz.wav', ...
    'PlayCount', 3, 'SamplesPerFrame', frameLength);

SRCTx = dsp.SampleRateConverter('InputSampleRate', audioReader.SampleRate, ...
    'OutputSampleRate', Fs, 'Bandwidth', 6.25e3);

SRCRx = dsp.SampleRateConverter('InputSampleRate', Fs, ...
    'OutputSampleRate', audioReader.SampleRate, 'Bandwidth', 6.25e3);

audioWriter = audioDeviceWriter('SampleRate', 8e3);

DUCMinOrder.CenterFrequency = 455e3;

basebandSignalSpectrum = dsp.SpectrumAnalyzer(...
        'SampleRate', Fs, 'ShowLegend', true, ...
        'ChannelNames', {'Baseband input', 'Down-converted output'}, ...
        'SpectralAverages', 10, 'Title', 'Power spectrum of baseband signal');

upConvertedSignalSpectrum = dsp.SpectrumAnalyzer(...
        'SampleRate', Fs*DUCMinOrder.InterpolationFactor, ...
        'SpectralAverages', 10, 'Title', 'Power spectrum of signal after DUC');

Потоковые данные

while ~isDone(audioReader)
  % Input speech signal
  audioIn = audioReader();

  % Resample
  audioIn_200kHz = SRCTx(audioIn);

  % FM Modulation
  xFMBaseband = exp(1j * freqSensitivityGain * ModulationFilter(audioIn_200kHz));

  % Up conversion
  xUp = DUCMinOrder(xFMBaseband);
  upConvertedSignalSpectrum(xUp);

  % Down conversion
  xDown = DDCMinOrder(xUp);
  basebandSignalSpectrum([xFMBaseband, xDown]);

  % FM Demodulation
  audioOut_200kHz = angle(DemodulationDelay(xDown) .* conj(xDown));

  % Resample
  audioOut = SRCRx(audioOut_200kHz);

  % Play audio
  audioWriter(audioOut);
end

% Cleanup
release(audioReader);
release(SRCTx);
release(ModulationFilter);
release(DUCMinOrder);
release(DDCMinOrder);
release(DemodulationDelay);
release(SRCRx);
release(basebandSignalSpectrum);
release(upConvertedSignalSpectrum);

Версия Simulink

Настройка для Сервиса Радио Семейства, показанного выше, может быть смоделирована в Simulink с помощью Цифрового Понижающего преобразователя и Цифровых блоков Повышающего преобразователя. Это реализовано в модели familyRadioServiceExample.slx. В то время как симуляция запускается, можно слушать или входной речевой сигнал или сигнал после обработки использования переключателя в модели.

open_system('familyRadioServiceExample');
open_system('familyRadioServiceExample/Dataflow Subsystem');

Используя поток данных в Simulink

Можно сконфигурировать этот пример, чтобы использовать управляемое данными выполнение путем установки Доменного параметра на поток данных для Подсистемы Потока данных. С потоком данных блоки в области выполняются на основе доступности данных в противоположность шагу расчета Simulink. Simulink автоматически делит систему в параллельные потоки. Это авторазделение ускоряет симуляцию и увеличивает пропускную способность. Чтобы узнать больше о потоке данных и как запустить этот пример с помощью нескольких потоков, смотрите Введение Потока данных.

Заключения

В этом примере вы разработали цифровое вверх и вниз по конвертеру для передатчика FRS и получателя с помощью Системных объектов DUC/DDC. Пример исследовал различные варианты, предлагаемые объектами DUC/DDC разработать интерполяцию и децимирующие фильтры. Пример также исследовал аналитические инструменты фильтра, доступные в объектах DDC/DUC, таких как visualizeFilterStages, fvtool и методы getFilterOrders. Реализация Simulink для настройки была также смоделирована.

Объекты DUC/DDC, разработанные в этом примере, действуют с коэффициентами фильтра с двойной точностью и арифметикой с двойной точностью. См. Проект и Анализ Цифрового Вниз пример Конвертера, если вы интересуетесь разработкой DUC или DDC, который действует с входными параметрами фиксированной точки.

close_system('familyRadioServiceExample', 0);