Многоскоростной просачивающийся MATLAB и Simulink

Многоскоростные фильтры являются цифровыми фильтрами, которые изменяют частоту дискретизации произведенного входного сигнала. Процесс преобразования уровня включает upsampler, downsampler и фильтр lowpass, чтобы обработать сигнал.

Самые основные многоскоростные фильтры являются интерполяторами, decimators, и конвертерами частоты дискретизации нецелого числа. Эти фильтры являются составными частями здания более усовершенствованных технологий фильтра, такими как channelizers, синтезаторы канала, двухканальные наборы фильтров и Квадратурный фильтр зеркала (QMF). Можно спроектировать, они просачиваются MATLAB® и Simulink® использование designMultirateFIR функция.

designMultirateFIR функционируйте автоматически проектирует сглаживающийся КИХ-фильтр на основе коэффициента преобразования уровня, который вы задаете. Входные параметры к designMultirateFIR функция является коэффициентом интерполяции и фактором децимации. Опционально, можно обеспечить полумногофазную длину или ширину перехода и затухание в полосе задерживания. Чтобы спроектировать decimator, установите коэффициент интерполяции на 1. Точно так же, чтобы спроектировать интерполятор, установитесь коэффициент децимации на 1.

Чтобы реализовать многоскоростные фильтры в MATLAB, используйте коэффициенты, возвращенные designMultirateFIR функционируйте как входные параметры к dsp.FIRDecimator, dsp.FIRInterpolator, и dsp.FIRRateConverter Системные объекты.

b = designMultirateFIR(1,4);
firDecim = dsp.FIRDecimator(4,b)
firDecim = 

  dsp.FIRDecimator with properties:

    DecimationFactor: 4
     NumeratorSource: 'Property'
           Numerator: [0 -2.2355e-05 -5.0269e-05 -5.2794e-05 0 1.0256e-04 1.9352e-04 … ]
           Structure: 'Direct form'

В качестве альтернативы можно установить SystemObject флаг designMultirateFIR функционируйте к true. Функциональные проекты и автоматически создают соответствующий объект преобразования уровня.

firDecim = designMultirateFIR(1,4,'SystemObject',true)
firDecim = 

  dsp.FIRDecimator with properties:

    DecimationFactor: 4
     NumeratorSource: 'Property'
           Numerator: [0 -2.2355e-05 -5.0269e-05 -5.2794e-05 0 1.0256e-04 1.9352e-04 … ]
           Structure: 'Direct form'

В Simulink вычислите эти коэффициенты с помощью designMultirateFIR функция в режиме Auto по умолчанию FIR Decimation, FIR Interpolation и блоков FIR Rate Conversion. Можно также задать эти коэффициенты как параметры или передать их через входной порт.

Эти примеры показывают, как реализовать КИХ decimator в MATLAB и Simulink. Можно применить этот рабочий процесс к КИХ-интерполятору и КИХ-конвертеру уровня также.

Реализуйте КИХ Decimator в MATLAB

Чтобы реализовать КИХ Decimator, необходимо сначала спроектировать его при помощи designMultirateFIR функция. Задайте фактор децимации интереса (обычно больше, чем 1) и коэффициент интерполяции, равный 1. Можно использовать полумногофазную длину по умолчанию 12 и затухание в полосе задерживания по умолчанию 80 дБ. В качестве альтернативы можно также задать полумногофазную длину, ширину перехода и значения затухания в полосе задерживания.

Спроектируйте КИХ decimator с набором фактора децимации к 3 и полумногофазным набором длины к 14. Используйте затухание в полосе задерживания по умолчанию 80 дБ.

b = designMultirateFIR(1,3,14);

Предоставьте содействующему вектору b как вход к dsp.FIRDecimator Система object™.

firDecim = dsp.FIRDecimator(3,b);
fvtool(firDecim)

По умолчанию, fvtool функция показывает ответ величины. Перейдите через панель инструментов Filter Visualization Tool, чтобы видеть фазовый отклик, импульсную характеристику, групповую задержку и другую информацию об анализе фильтра.

Отфильтруйте шумный вход синусоиды с помощью firDecim объект. Синусоида имеет частоты на уровне 1 000 Гц и 3 000 Гц. Шум является белым Гауссовым шумом с нулевым средним значением и стандартным отклонением 1e-5. Подкошенный выход будет иметь одну треть частотой дискретизации как вход. Инициализируйте два dsp.SpectrumAnalyzer Системные объекты, один для входа и другого для выхода.

f1 = 1000;
f2 = 3000;
Fs = 8000;
source = dsp.SineWave('Frequency',[f1,f2],'SampleRate',Fs,...
    'SamplesPerFrame',1026);

specanainput = dsp.SpectrumAnalyzer('SampleRate',Fs,...
    'PlotAsTwoSidedSpectrum',false,...
    'ShowLegend',true,'YLimits',[-120 40],...
    'Title','Noisy Input signal',...
    'ChannelNames', {'Noisy Input'});
specanaoutput = dsp.SpectrumAnalyzer('SampleRate',Fs/3,...
    'PlotAsTwoSidedSpectrum',false,...
    'ShowLegend',true,'YLimits',[-120 40],...
    'Title','Filtered output',...
    'ChannelNames', {'Filtered output'});

Передайте вход потоком и отфильтруйте его в цикле обработки.

Примечание: Если вы используете R2016a или более ранний релиз, заменяете каждый вызов объекта с эквивалентным step синтаксис. Например, obj(x) становится step(obj,x).

for Iter = 1:100
    input = sum(source(),2);
    noisyInput = input + (10^-5)*randn(1026,1);
    output = firDecim(noisyInput);
    specanainput(noisyInput)
    specanaoutput(output)
end

Вход имеет два peaks: один на уровне 1 000 Гц и другой на уровне 3 000 Гц. Фильтр имеет ответ lowpass с частотой полосы пропускания$0.3\pi$ рад/отсчета. С частотой дискретизации 8 000 Гц то значение является частотой полосы пропускания 1 200 Гц. Тон на уровне 1 000 Гц не ослабляется, потому что он падает в полосе пропускания фильтра. Тон на уровне 3 000 Гц отфильтрован.

Точно так же можно спроектировать КИХ-интерполятор и КИХ-Конвертер уровня путем обеспечения соответствующих входных параметров designMultirateFIR функция. Чтобы реализовать фильтры, передайте спроектированные коэффициенты dsp.FIRInterpolator и dsp.FIRRateConverter объекты.

Реализуйте КИХ Decimator в Simulink

Вы можете разработка и реализация КИХ-многоскоростные фильтры в Simulink™ с помощью КИХ-Децимации, КИХ-Интерполяции и КИХ-блоков Преобразования Уровня.

Откройте модель 'multiratefiltering.slx'.

Входной сигнал является шумным синусоидальным сигналом с двумя частотами: один на уровне 1 000 Гц и другой на уровне 3 000 Гц. Частота дискретизации сигнала составляет 8 000 Гц, и Выборки на параметр системы координат блоков Sine wave установлен в 1 026. Шум, добавленный к сигналу, является белым Гауссовым шумом с нулевым средним значением и отклонением 1e-10.

Содействующий исходный параметр блока FIR Decimation устанавливается на Диалоговые параметры, и КИХ-содействующий параметр фильтра устанавливается на designMultirateFIR(1,2). Функция использует полумногофазную длину по умолчанию 12 и затухание в полосе задерживания по умолчанию 80 дБ. Ответ величины спроектированного фильтра похож можно следующим образом:

Запустите модель.

Первый анализатор спектра показывает спектр исходного сигнала, в то время как второй спектр анализатор показывает спектр подкошенного сигнала. Поскольку параметр опций Уровня в блоке FIR Decimation устанавливается на Allow multirate processing, формат кадра сигнала является тем же самым при вводе и выводе блока FIR Decimation, в то время как частота дискретизации изменяется. Для получения дополнительной информации об этом режиме смотрите Преобразование Уровня Корректировкой Частоты кадров.

Преобразование частоты дискретизации

Преобразование частоты дискретизации является процессом преобразования частоты дискретизации сигнала от одной частоты дискретизации до другой частоты дискретизации. Многоступенчатые фильтры минимизируют объем расчета, вовлеченного в преобразование частоты дискретизации. Чтобы выполнить эффективное многоступенчатое преобразование уровня, используйте dsp.SampleRateConverter возразите что:

  1. Принимает входную частоту дискретизации и выходную частоту дискретизации как входные параметры.

  2. Делит проблему проектирования в оптимальные этапы.

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

  4. Реализует проект.

Проект убеждается, что искажение не происходит на промежуточных шагах.

В этом примере измените частоту дискретизации шумного синусоидального сигнала от входного уровня 192 кГц к норме выработки 44,1 кГц.

Инициализируйте объект конвертера частоты дискретизации.

SRC = dsp.SampleRateConverter;

Отобразите информацию о фильтре.

info(SRC)
ans =

    'Overall Interpolation Factor    : 147
     Overall Decimation Factor       : 640
     Number of Filters               : 3
     Multiplications per Input Sample: 27.667188
     Number of Coefficients          : 8631
     Filters:                         
        Filter 1:
        dsp.FIRDecimator     - Decimation Factor   : 2 
        Filter 2:
        dsp.FIRDecimator     - Decimation Factor   : 2 
        Filter 3:
        dsp.FIRRateConverter - Interpolation Factor: 147
                             - Decimation Factor   : 160 
     '

SRC является трехэтапным фильтром: два КИХ decimators сопровождаемый КИХ-конвертером уровня.

Инициализируйте источник синусоиды. Синусоида имеет два тона: один на уровне 2 000 Гц и другой на уровне 5 000 Гц.

source = dsp.SineWave ('Frequency',[2000 5000],'SampleRate',192000,...
    'SamplesPerFrame',1280);

Инициализируйте два спектра анализаторы, один, чтобы видеть спектр входного сигнала и другого, чтобы видеть, что спектр уровня преобразовал выходной сигнал. 'PlotAsTwoSidedSpectrum' свойство dsp.SpectrumAnalyzer объекты установлены в 'false', указание, что показанный спектр является односторонним в области значений [0 Фс/2], где Фс является частотой дискретизации сигнала.

Fsin = SRC.InputSampleRate;
Fsout = SRC.OutputSampleRate;
specanainput = dsp.SpectrumAnalyzer('SampleRate',Fsin,...
    'PlotAsTwoSidedSpectrum',false,...
    'ShowLegend',true,'YLimits',[-120 30],...
    'Title','Input signal',...
    'ChannelNames', {'Input'});
specanaoutput = dsp.SpectrumAnalyzer('SampleRate',Fsout,...
    'PlotAsTwoSidedSpectrum',false,...
    'ShowLegend',true,'YLimits',[-120 30],...
    'Title','Rate Converted output',...
    'ChannelNames', {'Rate Converted output'});

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

Спектр анализаторы показывает спектр в области значений [0 Фс/2]. Для спектра анализатор, показывающий вход, Фс/2 является 192000/2. Для спектра анализатор, показывающий выход, Фс/2 является 44100/2. Следовательно, частота дискретизации сигнала изменяется с 192 кГц до 44,1 кГц.

for Iter = 1 : 5000
    input = sum(source(),2);
    noisyinput = input + (10^-5)*randn(1280,1);
    output = SRC(noisyinput);
    specanainput(noisyinput);
    specanaoutput(output);
end

Ссылки

[1] Харрис, Фред. Многоскоростная обработка сигналов для систем связи. PTR Prentice Hall, 2004.

Похожие темы