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

Примечание

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

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

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

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

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

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

Реализуйте конечную импульсную характеристику в MATLAB

Чтобы реализовать FIR Decimator, необходимо сначала спроектировать его с помощью 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 Гц. Фильтр имеет lowpass с частотой полосы пропускания 0,3 * pi рад/выборка. С частотой дискретизации 8000 Гц, то есть частотой полосы пропускания 1200 Гц. Тон на частоте 1000 Гц не ослаблен, поскольку падает в полосе пропускания фильтра. Тон с частотой 3000 Гц отфильтровывается.

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

Реализуйте конечную импульсную характеристику дециматор в Simulink

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

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

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

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

Вы можете спроектировать конечную импульсную характеристику Interpolator и конечной импульсной характеристики Rate Converter с помощью аналогичного подхода в соответствующих блоках.

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

Преобразование скорости дискретизации является процессом преобразования скорости дискретизации сигнала с одной частоты дискретизации в другую частоту дискретизации. Многоступенчатые фильтры минимизируют количество расчетов, участвующих в преобразовании частоты дискретизации. Чтобы выполнить эффективное многоступенчатое преобразование скорости, 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] Harris, Fredric J. Multirate Signal Processing for Communication Systems. Prentice Hall ПТР, 2004.

Похожие темы