exponenta event banner

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

Примечание

Если вы используете 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.

Похожие темы