Этот пример показывает, как проектировать фильтры, заданные настраиваемыми спецификациями величины и фазы. Пользовательские спецификации амплитуды и фазы проектирования используются для выравнивания искажений амплитуды и фазы, обнаруженных в системах передачи данных (выравнивание канала) или в АЦП с избыточной дискретизацией (например, компенсация неидеальных аппаратных характеристик). Эти методы также допускают проект фильтров, которые имеют меньшие групповые задержки, чем линейные фазовые фильтры, и меньшие искажения, чем минимальные фазовые фильтры для заданного порядка.
В этом первом примере мы сравниваем несколько конечную импульсную характеристику проекта методов для моделирования величины и фазы комплексного полосно-пропускающего фильтра РФ, заданного на полной области значений Найквиста (нет расслабленных или «не заботятся» области).
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 фильтром Чебышева 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));