Спроектируйте многоскоростные фильтры

Примечание

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

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

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

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

Входные параметры к 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.FIRInterpolator и dsp.FIRRateConverter объекты.

Реализуйте КИХ 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.

Похожие темы