Разработайте многоскоростные фильтры

Примечание

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

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

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

Функция использует КИХ алгоритм проекта фильтра Найквиста, чтобы вычислить коэффициенты фильтра. Чтобы реализовать они просачиваются MATLAB, используйте эти коэффициенты в качестве входных параметров к dsp.FIRDecimator, dsp.FIRInterpolator и Системным объектам dsp.FIRRateConverter. В Simulink вычислите эти коэффициенты с помощью designMultirateFIR в режиме Auto по умолчанию КИХ-Десятикратного уменьшения, КИХ-Интерполяции и КИХ-блоков Преобразования Уровня.

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

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

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

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

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

b = designMultirateFIR(1,3,14);

Обеспечьте содействующий вектор, b, как вход к Системному объекту dsp.FIRDecimator?.

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

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

Отфильтруйте шумный вход синусоиды с помощью объекта FIRDecim. Синусоида имеет частоты на уровне 1 000 Гц и 3 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 30],...
    'Title','Noisy Input signal',...
    'ChannelNames', {'Noisy Input'});
specanaoutput = dsp.SpectrumAnalyzer('SampleRate',Fs/3,...
    'PlotAsTwoSidedSpectrum',false,...
    'ShowLegend',true,'YLimits',[-120 30],...
    'Title','Filtered output',...
    'ChannelNames', {'Filtered output'});

Поток во входе и фильтре сигнал в цикле обработки.

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.FIRRateConverter и dsp.FIRInterpolator.

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

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

Блок выбирает, коэффициенты вычислили использование функции designMultirateFIR.

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

Когда вы устанавливаете Содействующий источник на Автоматический, блок вычисляет коэффициенты с помощью функции designMultirateFIR. Функция использует фактор десятикратного уменьшения, заданный в диалоговом окне блока.

Можно разработать КИХ-Интерполятор и КИХ-Конвертер Уровня с помощью аналогичного подхода в соответствующих блоках.

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

Преобразование частоты дискретизации является процессом преобразования частоты дискретизации сигнала от одного уровня выборки до другого уровня выборки. Многоступенчатые фильтры минимизируют объем вычисления, вовлеченного в преобразование частоты дискретизации. Выполнять эффективное многоступенчатое преобразование уровня, объект 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);

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

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'});

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

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

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

Ссылки

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

Похожие темы