exponenta event banner

Многоступенчатое проектирование прореживателей/интерполяторов

В этом примере показано, как проектировать многоступенчатые прореживатели и интерполяторы. В примере «Эффективный узкополосный КИХ-фильтр» показано, как применять подходы IFIR и MULTIPSTAGE к односкоростным схемам низкочастотных фильтров. Методы могут быть расширены до конструкции многоступенчатых прореживателей и/или интерполяторов. Подход IFIR приводит к двухступенчатому прореживателю/интерполятору. Для многоступенчатого подхода количество этапов может быть либо автоматически оптимизировано, либо управляться вручную.

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

Прореживатели используются для уменьшения частоты дискретизации сигнала при одновременном пропорциональном уменьшении полосы пропускания. Например, для уменьшения скорости с 48 МГц до 1 МГц, коэффициента 48, ниже приведены типичные спецификации фильтра нижних частот, который соответственно уменьшит полосу пропускания.

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)

Резюме

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