Произвольные Величины и фазовые Создания фильтра

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

Конечная импульсная характеристика Моделирования

В этом первом примере мы сравниваем несколько конечную импульсную характеристику проекта методов для моделирования величины и фазы комплексного полосно-пропускающего фильтра РФ, заданного на полной области значений Найквиста (нет расслабленных или «не заботятся» области).

load cpxbp.mat
f = fdesign.arbmagnphase('N,F,H',100,F1,H1);
Hd = design(f,'allfir');
hfvt = fvtool(Hd, 'Color','w');
legend(hfvt,'Equiripple', 'FIR Least-Squares','Frequency Sampling', ...
    'Location', 'NorthEast')
hfvt(2) = fvtool(Hd,'Analysis','phase','Color','white');
legend(hfvt(2),'Equiripple', 'FIR Least-Squares','Frequency Sampling')

ax = hfvt(2).CurrentAxes;
ax.NextPlot = 'add';
pidx = find(F1>=0);
plot(ax,F1,[fliplr(unwrap(angle(H1(pidx-1:-1:1)))) ... % Mask
    unwrap(angle(H1(pidx:end)))],'k--')

Проект БИХ

Затем мы проектируем высокопрочный БИХ с приблизительно линейной фазой полосы пропускания. При использовании этого метода БИХ проекта необходимо проявлять осторожность, поскольку стабильность фильтра не гарантируется.

F = [linspace(0,.475,50) linspace(.525,1,50)];
H = [zeros(1,50) exp(-1j*pi*13*F(51:100))];
f = fdesign.arbmagnphase('Nb,Na,F,H',12,10,F,H);
W = [ones(1,50) 100*ones(1,50)];
Hd = design(f,'iirls','Weights',W);
isstable(Hd)
ans =

  logical

   1

close(hfvt(1));
close(hfvt(2));
hfvt = fvtool(Hd, 'Color','w');
legend(hfvt,'IIR Least-Squares','Location', 'NorthWest')
hfvt(2) = fvtool(Hd,'Analysis','phase','Color','white');
legend(hfvt(2),'IIR Least-Squares','Location', 'NorthEast')

Полосовой конечная импульсная характеристика с низкой задержкой группы

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

F1 = linspace(0,.25,30);  % Lower stopband
F2 = linspace(.3,.56,40); % Passband
F3 = linspace(.62,1,30);  % Higher stopband
N = 50;  % Filter Order
gd = 12; % Desired Group Delay
H1 = zeros(size(F1));
H2 = exp(-1j*pi*gd*F2);
H3 = zeros(size(F3));
f = fdesign.arbmagnphase('N,B,F,H',N,3,F1,H1,F2,H2,F3,H3);
Hd = design(f,'equiripple');

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

f = fdesign.arbmag('N,B,F,A',N,3,F1,abs(H1),F2,abs(H2),F3,abs(H3));
Hd(2) = design(f,'equiripple');
close(hfvt(1));
close(hfvt(2));
hfvt = fvtool(Hd, 'Color', 'w');
legend(hfvt,'Low Group Delay', 'Linear Phase', 'Location', 'NorthEast')
hfvt(2) = fvtool(Hd,'Analysis','grpdelay','Color','w');
legend(hfvt(2),'Low Group Delay', 'Linear Phase', 'Location', 'NorthEast')
axis([.3 .56 0 35])

hfvt(2).Analysis = 'phase';
hfvt(2).Color = 'w';
axis([.3 .56 -30 10])

Пассивная эквализация фильтра Lowpass Чебышева

Общей задачей является компенсация нелинейных фазовых характеристик БИХ. В этом примере мы будем работать с lowpass фильтром Чебышева I 3-го порядка с нормализованной частотой полосы пропускания 1/16 и 5 дБ неравномерностей в полосе пропускания.

Fp = 1/16;  % Passband frequency
Ap = .5;    % Passband ripples
f = fdesign.lowpass('N,Fp,Ap',3,Fp,Ap);
Hcheby = design(f,'cheby1');
close(hfvt(1));
close(hfvt(2));
hfvt = fvtool(Hcheby,'Color','w');
legend(hfvt, 'Chebyshev Lowpass');
hfvt(2) = fvtool(Hcheby,'Color','w','Analysis','grpdelay');
legend(hfvt(2), 'Chebyshev Lowpass');

Проект 2-диапазонной цифровой конечной импульсной характеристики эквалайзера. Мы выбираем двухдиапазонный подход, потому что хотим сконцентрировать свои усилия в полосе пропускания. Мы нацелены на фиксированную групповую задержку 35 выборок в полосе пропускания.

Gd = 35;    % Passband Group Delay of the equalized filter (linear phase)
F1 = 0:5e-4:Fp; % Passband
D1 = exp(-1j*Gd*pi*F1)./freqz(Hcheby,F1*pi);
Fst = 3/16; % Stopband
F2 = linspace(Fst,1,100);
D2 = zeros(1,length(F2));
f = fdesign.arbmagnphase('N,B,F,H',51,2,F1,D1,F2,D2);
Hfirls = design(f,'firls');      % Least-Squares design
Heqrip = design(f,'equiripple'); % Equiripple design

Величина эквализации

После эквализации неравномерностей в полосе пропускания ослабляются от 5 дБ до .27dB для эквалайзера с наименьшими квадратами и от 16 дБ для эквалайзера с равновесием.

close(hfvt(1));
close(hfvt(2));
hfvt = fvtool(Hcheby,cascade(Hcheby,Hfirls),cascade(Hcheby,Heqrip), ...
    'Color','w');
legend(hfvt,'Chebyshev Lowpass','Least-Squares Equalization (cascade)', ...
    'Equiripple Equalization (cascade)', 'Location', 'NorthEast')
hfvt(2) = fvtool(Hcheby,cascade(Hcheby,Hfirls),cascade(Hcheby,Heqrip), ...
    'Color','w');
legend(hfvt(2),'Chebyshev Lowpass', ...
    'Least-Squares Equalization (cascade)', ...
    'Equiripple Equalization (cascade)', 'Location', 'NorthEast')
axis([0 .1 -.8 .5])

Фаза (групповая задержка) Эквализация

Групповую задержку в полосе пропускания уравняли от пиковой до пиковой разности от 8,8 проб до 51 проб с эквалайзером методом наименьших квадратов и 0,62 проб с эквалайзером типа equiripple.

hfvt(2).Analysis = 'grpdelay';
axis([0 1 0 40])
hfvt(3) = fvtool(Hcheby,cascade(Hcheby,Hfirls),cascade(Hcheby,Heqrip), ...
    'Analysis', 'grpdelay','Color','w');
legend(hfvt(3),'Chebyshev Lowpass', ...
    'Least-Squares Equalization (cascade)', ...
    'Equiripple Equalization (cascade)', 'Location', 'NorthEast')
axis([0 Fp 34 36])

close(hfvt(1));
close(hfvt(2));
close(hfvt(3));