В этом примере показано, как проектировать lowpass с полосами стопов, которые не являются equiripple.
Чтобы запустить, настройте параметры фильтра и используйте fdesign
чтобы создать конструктор для разработки фильтра.
N = 100;
Fp = 0.38;
Fst = 0.42;
Hf = fdesign.lowpass('N,Fp,Fst',N,Fp,Fst);
Проекты Equiripple достигают оптимальности, распределяя отклонение от идеальной характеристики равномерно. Это имеет преимущество минимизации максимального отклонения (пульсации). Однако общее отклонение, измеренное в терминах его энергии, имеет тенденцию быть большим. Это не всегда может быть желательно. При фильтрации сигнала нижних частот это подразумевает, что остаточная энергия сигнала в полосе остановки может быть относительно большой. Когда это является проблемой, методы наименьших квадратов обеспечивают оптимальные проекты, которые минимизируют энергию в полосе упора.
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, чтобы достичь этого.
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 * пи, если требуется ослабление 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')