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

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

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

Спецификация частотной характеристики и создание фильтра

Ответы фильтра обычно задаются интервалами частоты (полосы) наряду с желаемым усилением на каждой полосе. Пользовательская величина и технические требования фильтра фазы подобны, но также и включают фазовый отклик, обычно как комплексное число, кодирующее и усиление и фазовый отклик. В большинстве случаев спецификация ответа состоит из вектора частот F = [f1..., fN] N увеличивающиеся частоты и вектор частотных характеристик H = [h1..., hN] соответствие комплексным значениям отклика фильтра. В DSP System Toolbox™ можно создать объект спецификации фильтров с желаемой частотной характеристикой с помощью fdesign.arbmagnphase. Если объект спецификации был создан, можно спроектировать КИХ или БИХ-фильтр с помощью design функция. Для получения дополнительной информации о КИХ и БИХ-алгоритмах проекта, см. [1].

КИХ-проекты

В этом первом примере мы сравниваем несколько КИХ-методов разработки смоделировать величину и фазу комплексного полосового фильтра RF. Во-первых, загрузите желаемую спецификацию фильтра: частоты к вектору F и комплексные значения отклика к вектору H. Постройте усиление и частотные характеристики фазы на левые и правые графики соответственно.

load('gainAndPhase','F','H') % Load frequency response data
plotResponse(F, H) % A helper plotting function used in this demo

Figure contains 2 axes objects. Axes object 1 contains an object of type scatter. Axes object 2 contains an object of type scatter.

Создайте объект спецификации использование fdesign.arbmagnphase с 'N,F,H' шаблон спецификации. Эта спецификация принимает желаемого порядка фильтра N, наряду с векторами частотной характеристики F и H. 'N,F,H' шаблон задает желаемый ответ на целой области значений Найквиста (то есть, спецификация одно полосы без расслабленного "не заботятся" об областях). В этом примере желаемые векторы данных ответа F и H имеют 655 точек, который является относительно плотным через частотный диапазон.

N = 100;
f = fdesign.arbmagnphase('N,F,H',N,F,H); 

Определите, какие методы разработки могут использоваться для этого объекта спецификации использование designmethods функция. В этом случае методы: equiripple, firls (наименьшие квадраты) и freqsamp (выборка частоты).

designmethods(f,'fir')
FIR Design Methods for class fdesign.arbmagnphase (N,F,H):


equiripple
firls
freqsamp

Спроектируйте фильтры с design функция с помощью требуемого метода из списка выше. Можно также задать 'allfir' чтобы спроектировать использование всех доступных методов, в этом случае функция возвращает массив ячеек Системных объектов.

Hd = design(f,'allfir',SystemObject = true);

Постройте частотные характеристики фильтров и номинальный ответ в пунктирной линии. equiripple проектируют Hd(1) кажется, аппроксимирует очень хорошо на полосе пропускания, но немного отклоняется в других областях. Наименьшие квадраты проектируют Hd(2) оптимизирован для однородно взвешенной квадратичной нормы (не способствующий одной области или другому), и частота произвела КИХ-проект Hd(3) кажется, показывает худшее приближение всех трех.

hfvt = fvtool(Hd{:}, 'Color','w');
legend(hfvt,'Equiripple Hd(1)', 'FIR Least-Squares Hd(2)','Frequency Sampling  Hd(3)', ...
    'Location', 'NorthEast')
ax = hfvt.CurrentAxes; 
ax.NextPlot = 'add';
plot(ax,F,20*log10(abs(H)),'r--')

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Response (dB) contains 5 objects of type line. These objects represent Equiripple Hd(1), FIR Least-Squares Hd(2), Frequency Sampling Hd(3).

hfvt(2) = fvtool(Hd{:},'Analysis','phase','Color','white');
legend(hfvt(2),'Equiripple Hd(1)', 'FIR Least-Squares Hd(2)','Frequency Sampling Hd(3)')

ax = hfvt(2).CurrentAxes; 
ax.NextPlot = 'add';
plot(ax,F,unwrap(angle(H))+2*pi,'r--')

Figure Filter Visualization Tool - Phase Response contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Phase Response contains 4 objects of type line. These objects represent Equiripple Hd(1), FIR Least-Squares Hd(2), Frequency Sampling Hd(3).

БИХ-проекты

В следующей части мы проектируем БИХ-фильтр. Желаемый фильтр является полуполосой highpass фильтр с линейной фазой на полосе пропускания. Спецификация дана 100 точками на частотном диапазоне как показано в следующем рисунке.

F = [linspace(0,.475,50) linspace(.525,1,50)];
H = [zeros(1,50) exp(-1j*pi*13*F(51:100))];
plotResponse(F, H)

Figure contains 2 axes objects. Axes object 1 contains an object of type scatter. Axes object 2 contains an object of type scatter.

Создайте объект спецификации использование спецификации проекта одно полосы 'Nb, Na, F, H', то, которое берет желаемого БИХ, заказывает Na= 10 (порядок знаменателя) и Nb= 12 (порядок числителя) как входные параметры. Существует только один метод разработки, доступный для этой спецификации - БИХ-проект наименьших квадратов (iirls).

Nb = 12;
Na = 10;
f = fdesign.arbmagnphase('Nb,Na,F,H',Nb,Na,F,H);
designmethods(f)
Design Methods for class fdesign.arbmagnphase (Nb,Na,F,H):


iirls

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

W = 1*(F<=0.5) + 100*(F>0.5);
Hd = design(f,'iirls','Weights',W);

При использовании БИХ-методов проектирования не гарантируется устойчивость фильтра. Проверяйте БИХ-устойчивость с помощью isstable функция. Чтобы сделать более полный анализ, исследуйте полюса и как близко они к модульному кругу.

isstable(Hd)
ans = logical
   1

Постройте БИХ-ответ проекта. Обратите внимание на то, что приближение на полосе пропускания лучше, чем на полосе задерживания, и фазовый отклик является менее значительным везде, где усиление величины мало (низкий дБ).

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

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Response (dB) contains 2 objects of type line. This object represents IIR Least-Squares.

hfvt(2) = fvtool(Hd,'Analysis','phase','Color','white');
legend(hfvt(2),'IIR Least-Squares','Location', 'NorthEast')
ax = hfvt(2).CurrentAxes; 
ax.NextPlot = 'add';
plot(ax,F,unwrap(angle(H))+2*pi,'r--')

Figure Filter Visualization Tool - Phase Response contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Phase Response contains 2 objects of type line. This object represents IIR Least-Squares.

Полосовой КИХ-проект с низкой групповой задержкой

Интересное приложение произвольной величины и проекты фазы являются проектом асимметричных КИХ-фильтров, которые жертвуют линейной фазой в пользу более короткой групповой задержки. Такие фильтры могут все еще быть спроектированы, чтобы обеспечить хорошее приближение линейной фазы на полосе пропускания. Предположим, что у нас есть три полосы для полосового фильтра: полоса задерживания на F1=[0,0.3) и на F3=(0.6,1], и полоса пропускания на F2=[0.3,0.6]. На полосе пропускания желаемая частотная характеристика H(ω)=e-jπωgd, который имеет линейную фазу reponse с групповой задержкой gd.

F1 = linspace(0,.25,30);  % Lower stopband
F2 = linspace(.3,.56,40); % Passband
F3 = linspace(.62,1,30);  % Higher stopband

% Define the desired frequency response on the bands
gd = 12; % Desired Group Delay
H1 = zeros(size(F1));
H2 = exp(-1j*pi*F2*gd);
H3 = zeros(size(F3));
F = [F1 F2 F3];
H = [H1 H2 H3];

Постройте желаемую частотную характеристику.

plotResponse(F, H)

Figure contains 2 axes objects. Axes object 1 contains an object of type scatter. Axes object 2 contains an object of type scatter.

Создайте объект спецификации фильтров с помощью 'N,B,F,H' шаблон спецификации. Здесь, N= 50 желаемый порядок фильтра, B= 3 обозначает количество полос, сопровождаемых B пары F и H векторы как прежде.

N = 50;  % Filter Order
B = 3;   % Number of bands
f = fdesign.arbmagnphase('N,B,F,H',N,B, F1,H1, F2,H2, F3,H3); 
Hd_mnp = design(f,'equiripple');

Этот проект не имеет линейной фазы, как видно путем вызова islinphase функция.

islinphase(Hd_mnp)
ans = logical
   0

Теперь создайте спецификацию фильтра только для величины с помощью fdesign.arbmag. 'N,B,F,A' шаблон спецификации для этого объекта похож на 'N,B,F,H' спецификация fdesign.argmagnphase объект. Различие между этими двумя то, что комплексный ответ фильтра H в 'N,B,F,H' заменяется величиной только (неотрицательный действительный) ответ A в 'N,B,F,A'.

f_magonly = fdesign.arbmag('N,B,F,A',N,3,F1,abs(H1),F2,abs(H2),F3,abs(H3)); 
Hd_mo = design(f_magonly,'equiripple');

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

islinphase(Hd_mo)
ans = logical
   1

subplot(1,2,1);
stem(Hd_mnp.Numerator)
title('Magnitude and Phase Design (asymetric)')
subplot(1,2,2);
stem(Hd_mo.Numerator)
title('Magnitude-only Design (symmetric)')

Figure contains 2 axes objects. Axes object 1 with title Magnitude and Phase Design (asymetric) contains an object of type stem. Axes object 2 with title Magnitude-only Design (symmetric) contains an object of type stem.

Сравните два проекта. Обратите внимание на то, что у них есть очень похожий полосовой ответ величины.

close(hfvt(1));
close(hfvt(2)); 
hfvt = fvtool(Hd_mnp,Hd_mo, 'Color', 'w');
legend(hfvt,'Magnitude and Phase Design (Low Group Delay)', 'Magnitude Only (Linear Phase, High Group Delay)', 'Location', 'NorthEast')

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Response (dB) contains 2 objects of type line. These objects represent Magnitude and Phase Design (Low Group Delay), Magnitude Only (Linear Phase, High Group Delay).

Постройте групповую задержку. Произвольный проект величины и фазы имеет немного различную групповую задержку. Однако изменение мало и в среднем является 12,5 выборками. Эта групповая задержка является половиной групповой задержки величины, только проектируют, который является 25 выборками.

hfvt(2) = fvtool(Hd_mnp,Hd_mo,'Analysis','grpdelay','Color','w');
legend(hfvt(2),'Magnitude and Phase Design (Low Group Delay)', 'Magnitude Only (Linear Phase, High Group Delay)', 'Location', 'NorthEast')
axis([.3 .56 0 35])

Figure Filter Visualization Tool - Group delay contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Group delay contains 2 objects of type line. These objects represent Magnitude and Phase Design (Low Group Delay), Magnitude Only (Linear Phase, High Group Delay).

Различие в групповых задержках может также быть замечено в фазовом отклике. Более мелкий наклон указывает на меньшую групповую задержку.

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

Figure Filter Visualization Tool - Phase Response contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Phase Response contains 2 objects of type line. These objects represent Magnitude and Phase Design (Low Group Delay), Magnitude Only (Linear Phase, High Group Delay).

Эквализация полосы пропускания фильтра Lowpass Чебышева

Другое распространенное приложение произвольных проектов magnitue-фазы является эквализацией нелинейных фазовых откликов БИХ-фильтров. Считайте третий порядок Типом I Чебышева фильтр lowpass с нормированной частотой полосы пропускания 1/16 и неравномерностями в полосе пропускания 0,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');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Response (dB) contains 2 objects of type line. This object represents Chebyshev Lowpass.

Постройте групповую задержку. Существует значительная групповая задержка distorition на полосе пропускания с групповыми задержками в пределах от 10 - 20 выборок.

hfvt(2) = fvtool(Hcheby,'Color','w','Analysis','grpdelay');
legend(hfvt(2), 'Chebyshev Lowpass');

Figure Filter Visualization Tool - Group delay contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Group delay contains an object of type line. This object represents Chebyshev Lowpass.

Смягчать искажение в групповой задержке, КИХ-эквалайзере Heq(ω)может использоваться после БИХ-фильтра. Идеально, объединенным фильтром является идеальный lowpass. Объединенный фильтр имеет ответ полосы пропускания G(ω)=Hch(ω)Heq(ω)=e-jgdω, устранение величины слегка колеблется к плоскому ответу величины и постоянной групповой задержке gd выборки. Целевая группа gd связывается к выделенной КИХ-длине для причинных проектов фильтра. В этом примере, gd=35 делает разумный выбор.

Подводя итоги, проект эквалайзера имеет две полосы:

  • На полосе пропускания желаемая частотная характеристика эквалайзера должна быть Heq(ω)=e-jgdω/Hch(ω).

  • На полосе задерживания желаемый ответ Heq(ω)=0, сопоставимый с Hch.

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

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));

Существует несколько КИХ-методов разработки, которые могут использоваться, чтобы реализовать эту КИХ-спецификацию эквалайзера. Сравните эффективность с помощью двух методов разработки: проект наименьших квадратов и проект equiripple.

feq = fdesign.arbmagnphase('N,B,F,H',51,2,F1,D1,F2,D2);
Heq_ls = design(feq,'firls');      % Least-Squares design
Heq_er = design(feq,'equiripple'); % Equiripple design

% Create the cascaded filters
Gls = cascade(Hcheby,Heq_ls);
Geq = cascade(Hcheby,Heq_er);

Постройте ответы величины каскадных систем для обоих фильтров.

close(hfvt(1));
close(hfvt(2));
hfvt = fvtool(Hcheby,Gls, Geq, 'Color','w');
legend(hfvt,'Chebyshev Lowpass (no equalization)','Least-Squares Equalization (cascade)', ...
    'Equiripple Equalization (cascade)', 'Location', 'NorthEast')

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Response (dB) contains 3 objects of type line. These objects represent Chebyshev Lowpass (no equalization), Least-Squares Equalization (cascade), Equiripple Equalization (cascade).

Увеличьте масштаб вокруг полосы пропускания. Неравномерности в полосе пропускания ослабляются после того, как эквализация от 0,5 дБ в исходном фильтре к 0,27 дБ с наименьшими квадратами спроектировала эквалайзер, и к 0,16 дБ с equiripple спроектировал эквалайзер.

hfvt(2) = fvtool(Hcheby,Gls,Geq, 'Color','w');
legend(hfvt(2),'Chebyshev Lowpass (no equalization)', ...
    'Least-Squares Equalization (cascade)', ...
    'Equiripple Equalization (cascade)', 'Location', 'NorthEast')
axis([0 .1 -0.8 .5])

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Response (dB) contains 3 objects of type line. These objects represent Chebyshev Lowpass (no equalization), Least-Squares Equalization (cascade), Equiripple Equalization (cascade).

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

hfvt(2).Analysis = 'grpdelay';
axis([0 1 0 40])

Figure Filter Visualization Tool - Group delay contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Group delay contains 3 objects of type line. These objects represent Chebyshev Lowpass (no equalization), Least-Squares Equalization (cascade), Equiripple Equalization (cascade).

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

hfvt(3) = fvtool(Hcheby,Gls,Geq, 'Analysis', 'grpdelay','Color','w');
legend(hfvt(3),'Chebyshev Lowpass (no equalization)', ...
    'Least-Squares Equalization (cascade)', ...
    'Equiripple Equalization (cascade)', 'Location', 'NorthEast')
axis([0 Fp 34 36])

Figure Filter Visualization Tool - Group delay contains an axes object and other objects of type uitoolbar, uimenu. The axes object with title Group delay contains 3 objects of type line. These objects represent Chebyshev Lowpass (no equalization), Least-Squares Equalization (cascade), Equiripple Equalization (cascade).

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

Ссылки

[1] Оппенхейм, A.V., и Р.В. Шафер, обработка сигналов дискретного времени, Prentice Hall, 1989.