В этом примере показано, как спроектировать многоступенчатый decimators и интерполяторы. Эффективное Узкое КИХ-Создание фильтра Полосы Перехода примера показывает, как применить IFIR и подходы MULTISTAGE к односкоростным проектам фильтров lowpass. Методы могут быть расширены к проекту многоступенчатого decimators и/или интерполяторов. IFIR приближаются к результатам в 2-этапном decimator/interpolator. Для подхода MULTISTAGE количество этапов можно или автоматически оптимизировать или вручную управлять.
Decimators используются, чтобы уменьшать уровень выборки сигнала, одновременно уменьшая пропускную способность пропорционально. Например, чтобы уменьшать уровень с 48 МГц до 1 МГц, фактор 48, следующее является типичными спецификациями для фильтра lowpass, который будет уменьшать пропускную способность соответственно.
Fs = 48e6; TW = 100e3; Astop = 80; % Minimum stopband attenuation M = 48; % Decimation factor
Простой многоступенчатый проект, учитывая эти спецификации
multidecim = designMultistageDecimator(M,Fs,TW,Astop);
Чтобы анализировать получившийся проект, несколько функций доступны
info(multidecim) % Provide some information on the multistage filter cost(multidecim) % Determine the implementation cost fvtool(multidecim) % Visualize overall magnitude response, group delay, etc
ans =
'Discrete-Time Filter Cascade
----------------------------
Number of stages: 5
Stage1: dsp.FIRDecimator
-------
Discrete-Time FIR Multirate Filter (real)
-----------------------------------------
Filter Structure : Direct-Form FIR Polyphase Decimator
Decimation Factor : 2
Polyphase Length : 4
Filter Length : 7
Stable : Yes
Linear Phase : Yes (Type 1)
Arithmetic : double
Stage2: dsp.FIRDecimator
-------
Discrete-Time FIR Multirate Filter (real)
-----------------------------------------
Filter Structure : Direct-Form FIR Polyphase Decimator
Decimation Factor : 2
Polyphase Length : 4
Filter Length : 7
Stable : Yes
Linear Phase : Yes (Type 1)
Arithmetic : double
Stage3: dsp.FIRDecimator
-------
Discrete-Time FIR Multirate Filter (real)
-----------------------------------------
Filter Structure : Direct-Form FIR Polyphase Decimator
Decimation Factor : 2
Polyphase Length : 6
Filter Length : 11
Stable : Yes
Linear Phase : Yes (Type 1)
Arithmetic : double
Stage4: dsp.FIRDecimator
-------
Discrete-Time FIR Multirate Filter (real)
-----------------------------------------
Filter Structure : Direct-Form FIR Polyphase Decimator
Decimation Factor : 3
Polyphase Length : 11
Filter Length : 33
Stable : Yes
Linear Phase : Yes (Type 1)
Arithmetic : double
Stage5: dsp.FIRDecimator
-------
Discrete-Time FIR Multirate Filter (real)
-----------------------------------------
Filter Structure : Direct-Form FIR Polyphase Decimator
Decimation Factor : 2
Polyphase Length : 48
Filter Length : 95
Stable : Yes
Linear Phase : Yes (Type 1)
Arithmetic : double
'
ans =
struct with fields:
NumCoefficients: 89
NumStates: 146
MultiplicationsPerInputSample: 6.6042
AdditionsPerInputSample: 5.6667

Многоступенчатые проекты эффективны в терминах умножения на вход демонстрационное и общее количество коэффициентов фильтра. Сравните с одноступенчатым проектом.
singledecim = designMultistageDecimator(M,Fs,TW,Astop,'NumStages',1); cost(singledecim) % Determine the implementation cost fvtool(multidecim,singledecim) legend('Multistage','Singlestage')
ans =
struct with fields:
NumCoefficients: 2361
NumStates: 2400
MultiplicationsPerInputSample: 49.1875
AdditionsPerInputSample: 49.1667

По умолчанию количество этапов автоматически полно решимости минимизировать стоимость внедрения. Номер этапов может быть определен вручную к любому номеру между 1 и количеству простых множителей в факторе децимации. Только увеличение до двух этапов имеет значительное значение.
twostagedecim = designMultistageDecimator(M,Fs,TW,Astop,'NumStages',2);
cost(twostagedecim)
ans =
struct with fields:
NumCoefficients: 218
NumStates: 265
MultiplicationsPerInputSample: 9.2500
AdditionsPerInputSample: 9.1667
По умолчанию проект минимизирует умножение на входную выборку. Также возможно минимизировать количество коэффициентов.
mincoeffdecim = designMultistageDecimator(M,Fs,TW,Astop,... 'MinTotalCoeffs',true); cost(mincoeffdecim)
ans =
struct with fields:
NumCoefficients: 87
NumStates: 147
MultiplicationsPerInputSample: 6.8125
AdditionsPerInputSample: 6
По сравнению с multidecim, количество коэффициентов ниже, но количество умножения на входную выборку выше.
По умолчанию лучшая многоступенчатая настройка определяется оценки использования количества коэффициентов, требуемых для каждого этапа. Более медленный, но более точный метод, проектирует всех кандидатов фильтра и определяет фактическое количество коэффициентов для того, чтобы найти оптимальное решение.
optimaldecim = designMultistageDecimator(M,Fs,TW,Astop,... 'CostMethod','design'); cost(optimaldecim) fvtool(multidecim,optimaldecim)
ans =
struct with fields:
NumCoefficients: 87
NumStates: 146
MultiplicationsPerInputSample: 6.5625
AdditionsPerInputSample: 5.6667

Подобные сбережения возможны при разработке многоступенчатых интерполяторов. Как со всеми интерполяторами, общий замысел имеет усиление, равное коэффициенту интерполяции.
multiinterp = designMultistageInterpolator(8); fvtool(multiinterp)

Использование многоступенчатых методов может обеспечить значительные вычислительные сбережения при реализации decimators/interpolators.