exponenta event banner

Цифровое преобразование вверх и вниз для семейной службы радиосвязи

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

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

Введение

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

Речь 8 кГц сначала повторно дискретизируется в 50KHz. ДК на передатчике преобразует сигнал с 50 кГц в 2 МГц и переключает сигнал на частоту ПЧ 455 кГц.

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

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

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

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

Проектирование фильтров интерполяции

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

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

По умолчанию (когда MinimumOrderDesign свойство имеет значение true) объект 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 кГц, где Fc - частота отсечки, а 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

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

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

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. Порядок фильтра первой ступени (интерполятор нижних частот) увеличивается с 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' так что объект проектирует генератор с числовым управлением. Установите центральную частоту генератора на частоту ПЧ 455 кГц.

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

Проектирование цифрового понижающего преобразователя

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

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

Проектирование фильтров прореживания

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

Проектирование прореживающих фильтров минимального порядка для приема сигнала ВСК с центром на частоте ПЧ 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);

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

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

Аналогично случаю DUC, можно определить заказы фильтров, установив MinimumOrderDesign свойству false.

Цикл обработки MATLAB

FCC Part 95 определяет ЧМ-модуляцию с максимальным отклонением частоты 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

Показанная выше настройка для услуги Family Radio Service может быть смоделирована в Simulink с использованием блоков Digital Down-Converter и Digital Up-Converter. Это реализовано в модели familyRadioServiceExample.slx. Во время моделирования можно прослушать входной речевой сигнал или сигнал после обработки с помощью переключателя в модели.

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

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

В этом примере можно настроить выполнение на основе данных, установив для параметра Domain значение dataflow для подсистемы Dataflow. При использовании потока данных блоки внутри домена выполняются на основе доступности данных в отличие от времени выборки Simulink. Simulink автоматически разделяет систему на параллельные потоки. Такая автопартизация ускоряет моделирование и увеличивает пропускную способность данных. Дополнительные сведения о потоке данных и выполнении этого примера с использованием нескольких потоков см. в разделе Многоядерное выполнение с использованием домена потока данных.

Заключения

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

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

close_system('familyRadioServiceExample', 0);