Многоступенчатый Проект Decimators/Interpolators

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

Сравните с одноступенчатым Decimator

Многоступенчатые проекты эффективны с точки зрения умножения на вход демонстрационное и общее количество коэффициентов фильтра. Сравните с одноступенчатым проектом.

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.