В этом примере показано, как спроектировать многоступенчатый 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.