Разработка фильтров с полосой задерживания Non-Equiripple

Этот пример показывает, как разработать фильтры lowpass с полосами задерживания, которые не являются equiripple.

Оптимальные фильтры Non-Equiripple Lowpass

Чтобы запуститься, настройте параметры фильтра и использование fdesign, чтобы создать конструктора для разработки фильтра.

  N = 100;
  Fp = 0.38;
  Fst = 0.42;
  Hf = fdesign.lowpass('N,Fp,Fst',N,Fp,Fst);

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

  Hd1 = design(Hf,'equiripple','systemobject',true);
  Hd2 = design(Hf,'firls','systemobject',true);
  hfvt = fvtool(Hd1,Hd2,'Color','White');
  legend(hfvt,'Equiripple design','Least-squares design')

Заметьте, как затухание в полосе задерживания увеличивается с частотой для проектов наименьших квадратов, в то время как это остается постоянным для проекта equiripple. Увеличенное затухание в случае наименьших квадратов минимизирует энергию в той полосе сигнала, который будет отфильтрован.

Проекты Экюриппла с увеличивающимся затуханием полосы задерживания

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

  Hd3 = design(Hf,'equiripple','StopbandShape','1/f',...
              'StopbandDecay',4,'systemobject',true);
  hfvt2 = fvtool(Hd2,Hd3,'Color','White');
  legend(hfvt2,'Least-squares design',...
        'Equiripple design with stopband decaying as (1/f)^4')

Заметьте, что полосы задерживания весьма схожи. Однако проект equiripple имеет значительно меньшую пульсацию полосы пропускания,

  mls = measure(Hd2);
  meq = measure(Hd3);
  mls.Apass
ans = 0.3504
  meq.Apass
ans = 0.1867

Фильтры с полосой задерживания, которая затухает как (1/f) ^M, затухнут в 6M дБ на октаву. Другой способ сформировать полосу задерживания использует линейное затухание. Например, учитывая аппроксимированное затухание 38 дБ в 0.4*pi, если затухание 70 дБ желаемо в пи, и линейное затухание должно использоваться, наклон строки дан (70-38) / (1-0.4) = 53.333. Такой проект может быть достигнут от:

  Hd4 = design(Hf,'equiripple','StopbandShape','linear',...
              'StopbandDecay',53.333,'systemobject',true);
  hfvt3 = fvtool(Hd3,Hd4,'Color','White');
  legend(hfvt3,'Equiripple design with stopband decaying as (1/f)^4',...
      'Equiripple design with stopband decaying linearly and a slope of 53.333')

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

  N = 100;
  B = 2;  % number of bands
  F = [0 .38 .42:.02:1];
  A = [1 1 zeros(1,length(F)-2)];
  W = linspace(1,100,length(F)-2);
  Harb = fdesign.arbmag('N,B,F,A',N,B,F(1:2),A(1:2),F(3:end),...
                        A(3:end));
  Ha = design(Harb,'equiripple','B2Weights',W,...
             'systemobject',true);
  fvtool(Ha,'Color','White')

Для просмотра документации необходимо авторизоваться на сайте