Управление спецификациями проекта в КИХ-проекте Lowpass

В этом примере показано, как управлять порядком фильтра, неравномерностью в полосе пропускания, затуханием в полосе задерживания и шириной области перехода КИХ-фильтра lowpass.

Управление порядком фильтра и неравномерностями в полосе пропускания и затуханием в полосе задерживания

При предназначении для специального оборудования распространено найти случаи, где количество коэффициентов ограничивается к номеру набора. В этих случаях проекты минимального порядка не полезны, потому что нет никакого управления получившимся порядком фильтра. Как пример, предположите, что только 101 коэффициент мог использоваться, и неравномерности в полосе пропускания / спецификации затухания в полосе задерживания нужно соответствовать. Мы можем все еще использовать проекты equiripple в этих спецификациях. Однако мы теряем контроль над шириной перехода, которая увеличится. Это - цена, чтобы заплатить за сокращение порядка при поддержании неравномерности в полосе пропускания / спецификации затухания в полосе задерживания.

Рассмотрите простой проект фильтра lowpass с частотой среза 0.4*pi радианы на выборку:

  Ap = 0.06;
  Ast = 60;
  Fp = 0.38;
  Fst = 0.42;
  Hf=fdesign.lowpass('Fp,Fst,Ap,Ast',Fp,Fst,Ap,Ast);

Спроектируйте фильтр equiripple:

  Hd1 = design(Hf,'equiripple','systemobject',true);

Определите номер коэффициентов к 101, что означает устанавливать порядок к 100:

  N = 100;   
  Fc = 0.4;
  setspecs(Hf,'N,Fc,Ap,Ast',N,Fc,Ap,Ast);

Спроектируйте второй фильтр equiripple с данным ограничением:

  Hd2 = design(Hf,'equiripple','systemobject',true);

Измерьте переменные фильтра второго фильтра equiripple и сравните графики первых и вторых фильтров:

  measure(Hd2)
ans = 
Sample Rate      : N/A (normalized frequency)
Passband Edge    : 0.37316                   
3-dB Point       : 0.39285                   
6-dB Point       : 0.4                       
Stopband Edge    : 0.43134                   
Passband Ripple  : 0.06 dB                   
Stopband Atten.  : 60 dB                     
Transition Width : 0.058177                  
 
  hfvt = fvtool(Hd1,Hd2,'Color','White');
  legend(hfvt,'Equiripple design, 146 coefficients', ...
        'Equiripple design, 101 coefficients')

Переход увеличился почти на 50%. Это не удивляет, учитывая почти 50%-е различие между 101 коэффициентом и 146 коэффициентами.

Управление шириной области перехода

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

  setspecs(Hf,'N,Fp,Fst',N,Fp,Fst);
  Hd3 = design(Hf,'equiripple','systemobject',true);
  measure(Hd3)
ans = 
Sample Rate      : N/A (normalized frequency)
Passband Edge    : 0.38                      
3-dB Point       : 0.39407                   
6-dB Point       : 0.4                       
Stopband Edge    : 0.42                      
Passband Ripple  : 0.1651 dB                 
Stopband Atten.  : 40.4369 dB                
Transition Width : 0.04                      
 
  hfvt2 = fvtool(Hd1,Hd3,'Color','White');
  legend(hfvt2,'Equiripple design, 146 coefficients',...
        'Equiripple design, 101 coefficients')

Различия между использованием 146 коэффициентов и использованием 101 коэффициента отражаются в большей неравномерности в полосе пропускания и меньшем затухании в полосе задерживания.

Возможно увеличить затухание в полосе задерживания при хранении того же порядка фильтра и ширины перехода при помощи весов. Веса являются способом задать относительную важность неравномерности в полосе пропускания по сравнению с затуханием в полосе задерживания. По умолчанию полоса пропускания и полоса задерживания одинаково взвешиваются (вес, каждый присвоен каждому). Если мы увеличиваем вес полосы задерживания, мы можем увеличить затухание в полосе задерживания за счет увеличения пульсации полосы задерживания также.

  Hd4 = design(Hf,'equiripple','Wstop',5,'systemobject',true);
  measure(Hd4)
ans = 
Sample Rate      : N/A (normalized frequency)
Passband Edge    : 0.38                      
3-dB Point       : 0.39143                   
6-dB Point       : 0.39722                   
Stopband Edge    : 0.42                      
Passband Ripple  : 0.34529 dB                
Stopband Atten.  : 48.0068 dB                
Transition Width : 0.04                      
 
  hfvt3 = fvtool(Hd3,Hd4,'Color','White');
  legend(hfvt3,'Passband weight = 1, Stopband weight = 1',...
        'Passband weight = 1, Stopband weight = 5')

Другая возможность состоит в том, чтобы задать точное желаемое затухание в полосе задерживания и потерять контроль над неравномерностью в полосе пропускания. Это - мощная и очень желательная спецификация. Каждый имеет контроль над большинством параметров интереса.

  setspecs(Hf,'N,Fp,Fst,Ast',N,Fp,Fst,Ast);
  Hd5 = design(Hf,'equiripple','systemobject',true);
  hfvt4 = fvtool(Hd4,Hd5,'Color','White');
  legend(hfvt4,'Equiripple design using weights',...
        'Equiripple design constraining the stopband')