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

В этом примере показано, как использовать Системные объекты цифрового конвертера (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 кГц, i.e., в центре смежного канала 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);