Многоступенчатый проект дециматоров/интерполяторов

В этом примере показано, как спроектировать многоступенчатые дециматоры и интерполяторы. Пример Эффективная Узкополосная конечная импульсная характеристика Создания фильтра показов, как применить подходы IFIR и MULTISTAGE к односкоростным проектам lowpass фильтров. Методы могут быть расширены на проект многоступенчатых дециматоров и/или интерполяторов. Подход IFIR результатов в двухэтапном дециматоре/интерполяторе. Для подхода MULTISTAGE количество каскадов может быть либо автоматически оптимизировано, либо управляться вручную.

Уменьшение частоты дискретизации сигнала

Дециматоры используются, чтобы уменьшить частоту дискретизации сигнала и одновременно пропорционально уменьшить полосу пропускания. Для примера, чтобы уменьшить частоту с 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)

Сводные данные

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