В этом примере показано, как использовать несколько функций анализа фильтров в окне одного рисунка с помощью инструмента визуализации фильтров (FVTool), графического интерфейса пользователя, доступного в Toolbox™ обработки сигналов.
FVTool также имеет интерфейс прикладных программ (API), который позволяет взаимодействовать с GUI из командной строки. Это позволяет интегрировать FVTool в другие приложения.
Мы хотим создать фильтр нижних частот с частотой полосы пропускания 0 .4δ рад/выборка, частотой полосы останова 0 .6δ рад/выборка, пульсацией полосы пропускания 1 дБ и затуханием полосы останова 80 дБ. Мы разработаем фильтры с помощью некоторых инструментов разработки фильтров панели инструментов обработки сигналов, а затем проанализируем результаты в FVTool.
Проектирование низкопроходного равнопроходного КИХ-фильтра
Df1 = designfilt('lowpassfir','PassbandFrequency',0.4,... 'StopbandFrequency',0.6,... 'PassbandRipple',1,... 'StopbandAttenuation',80,... 'DesignMethod','equiripple');
Проектирование низкочастотного эллиптического БИХ-фильтра
Df2 = designfilt('lowpassiir','PassbandFrequency',0.4,... 'StopbandFrequency',0.6,... 'PassbandRipple',1,... 'StopbandAttenuation',80,... 'DesignMethod','ellip');
Запустите FVTool с объектами фильтра и верните дескриптор FVTool, который позволит нам повторно использовать ту же самую фигуру FVTool.
hfvt = fvtool(Df1, Df2);

Мы можем наблюдать, что оба фильтра соответствуют проектным спецификациям, но мы также хотим увидеть, насколько хорошо работает конструкция типа II Чебышева.
Фильтр можно добавить к FVTool с помощью функции ADDFILTER.
Df3 = designfilt('lowpassiir','PassbandFrequency',0.4,... 'StopbandFrequency',0.6,... 'PassbandRipple',1,... 'StopbandAttenuation',80,... 'DesignMethod','cheby2'); addfilter(hfvt, Df3);

Чтобы определить, какая линия на графике принадлежит фильтру, можно добавить легенду с помощью функции LEGEND дескриптора FVTool.
legend(hfvt, 'Equiripple', 'Elliptic', 'Chebyshev Type II');

Можно удалить фильтр из FVTool с помощью функции DELETEFILTER и передать индекс фильтров, которые требуется удалить .
deletefilter(hfvt, [1 3]);

Дескриптор, возвращаемый FVTool, содержит свойства, позволяющие взаимодействовать как с фильтром, так и с текущим анализом.
Для просмотра всех доступных свойств используется команда GET. Первыми свойствами являются свойства обычной фигуры MATLAB ®. Последние четырнадцать свойств специфичны для FVTool. Последние шесть из них (от FrequencyScale до FrequencyDisplay) специфичны для анализа.
s = get(hfvt);

% Keep the last 14 properties
c = struct2cell(s);
f = fieldnames(s);
s = cell2struct(c(end-14:end),f(end-14:end),1)s = struct with fields:
SelectionHighlight: on
Tag: 'filtervisualizationtool'
UserData: []
Visible: on
PolyphaseView: 'off'
Analysis: 'magnitude'
MagnitudeDisplay: 'Magnitude (dB)'
OverlayedAnalysis: ''
NormalizedFrequency: 'on'
ShowReference: 'on'
FrequencyRange: '[0, pi)'
FrequencyScale: 'Linear'
FrequencyVector: [1x256 double]
NumberofPoints: 8192
NormalizeMagnitudeto1: 'off'
Все параметры, доступные в диалоговом окне «Параметры анализа FVTool», также доступны в качестве свойств объекта FVTool. Команда SET с двумя входными аргументами возвращает все возможные значения.
set(hfvt, 'MagnitudeDisplay')ans = 1x4 cell
Columns 1 through 3
{'Magnitude'} {'Magnitude (dB)'} {'Magnitude squared'}
Column 4
{'Zero-phase'}
Переведите дисплей в положение «Квадрат величины»
hfvt.MagnitudeDisplay = 'Magnitude Squared';
Получить все возможные значения для свойства «Анализ»
set(hfvt, 'Analysis')ans = 1x12 cell
Columns 1 through 5
{'magnitude'} {'phase'} {'freq'} {'grpdelay'} {'phasedelay'}
Columns 6 through 10
{'impulse'} {'step'} {'polezero'} {'coefficients'} {'info'}
Columns 11 through 12
{'magestimate'} {'noisepower'}
Теперь измените анализ, чтобы посмотреть на ответ групповой задержки фильтра.
hfvt.Analysis = 'grpdelay';
Команда GET возвращает новые параметры анализа для нового анализа.
GroupDelayUnits = hfvt.GroupDelayUnits;
Мы также хотели бы увидеть, как групповая задержка и отклик на величину перекрываются в частотной области.
Можно наложить любые два анализа в FVTool, которые имеют общую ось X (время или частоту), задав свойство OverlowerAnalysis.
set(hfvt, 'OverlayedAnalysis', 'magnitude', 'Legend', 'On')

Чтобы отключить наложенный анализ, просто установите для свойства OverlexingAnalysis значение.
hfvt.OverlayedAnalysis = '';
Окно FVTool также может быть аннотировано как обычное окно фигуры.
Фигура FVTool ведет себя как обычное окно фигуры. Это позволяет использовать функции сетки и оси MATLAB.
grid on
axis([.3 .45 5 25]);
Ось также доступна из командной строки. Это позволяет изменять заголовок и метки.
title('Group Delay of an Elliptic filter'); xlabel('Frequency (normalized to 1)'); ylabel('Group Delay in samples'); htext = text(.35, 23, 'Maximum Group Delay');

FVTool не будет автоматически удалять дополнительные аннотации из анализа, это можно сделать, удалив сам маркер перемещения. Можно закрыть фигуру FVTool, вызвав функцию закрытия в дескрипторе FVTool.
delete(htext); close(hfvt)