exponenta event banner

Проектирование многоскоростных фильтров

Примечание

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

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

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

Функция использует алгоритм построения фильтра Найквиста (FIR Nyquist) для вычисления коэффициентов фильтра. Чтобы реализовать эти фильтры в MATLAB, используйте эти коэффициенты в качестве входных данных для dsp.FIRDecimator, dsp.FIRInterpolator, и dsp.FIRRateConverter Системные объекты. В Simulink вычислите эти коэффициенты с помощью designMultirateFIR в автоматическом режиме по умолчанию для блоков децимации FIR, интерполяции FIR и преобразования скорости FIR.

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

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

Внедрение дециматора FIR в MATLAB

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

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

b = designMultirateFIR(1,3,14);

Предоставьте вектор коэффициентов, b, в качестве входных данных для dsp.FIRDecimator Системный объект?.

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

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

Фильтрация шумного синусоидального входного сигнала с помощью FIRDecim объект. Синусоидальная волна имеет частоты 1000 Гц и 3000 Гц 3000 Гц. Шум представляет собой белый гауссов шум со средним нулем и стандартным отклонением 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

Вход имеет два пика: один на 1000 Гц, а другой на 3000 Гц. Фильтр имеет отклик нижних частот с частотой полосы пропускания 0,3 * пи рад/образец. С частотой дискретизации 8000 Гц, то есть частотой полосы пропускания 1200 Гц. Тональный сигнал на частоте 1000 Гц является ненапряженным, поскольку падает в полосе пропускания фильтра. Тональный сигнал на частоте 3000 Гц отфильтровывается.

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

Внедрение дециматора FIR в Simulink

Можно проектировать и внедрять многоскоростные фильтры FIR в Simulink с помощью блоков децимации FIR, интерполяции FIR и преобразования скорости FIR. Если для параметра «Источник коэффициентов» заданы параметры диалогового окна, можно указать designMultirateFIR(1,2) в качестве параметра для задания коэффициентов фильтра. Конструирование дециматора с помощью designMultirateFIR необходимо указать интересующий коэффициент прореживания (обычно больше 1) и коэффициент интерполяции, равный 1. Можно использовать длину полуфазы по умолчанию 12 и затухание полосы останова по умолчанию 80 дБ. Кроме того, можно задать значения длины полуфазы и затухания полосы останова.

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

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

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

Можно сконструировать FIR-интерполятор и FIR-преобразователь скорости, используя аналогичный подход в соответствующих блоках.

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

Преобразование частоты дискретизации представляет собой процесс преобразования частоты дискретизации сигнала из одной частоты дискретизации в другую частоту дискретизации. Многоступенчатые фильтры минимизируют количество вычислений, участвующих в преобразовании частоты дискретизации. Для выполнения эффективного многоступенчатого преобразования скорости, 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 является трехступенчатым фильтром: два дециматора КИХ, за которыми следует преобразователь скорости КИХ.

Инициализируйте источник синусоидальной волны. Синусоидальная волна имеет два тона: один на 2000 Гц, а другой на 5000 Гц.

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 Fs/2]. Для анализатора спектра, показывающего входной сигнал, Fs/2 равен 192000/2. Для анализатора спектра, показывающего выходной сигнал, Fs/2 равно 44100/2. Следовательно, частота дискретизации сигнала изменилась со 192 кГц до 44,1 кГц.

Ссылки

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

Связанные темы