Отфильтруйте Анализ с помощью FVTool

Этот пример показывает, как использовать несколько аналитических функций фильтра в окне одной фигуры при помощи Инструмента Визуализации Фильтра (FVTool), Графический интерфейс пользователя, доступный в Signal Processing Toolbox™.

FVTool также имеет Прикладной программный интерфейс (API), который позволяет вам взаимодействовать с графический интерфейсом пользователя из командной строки. Это позволяет вам интегрировать FVTool в другие приложения.

Запуск FVTool

Мы хотим создать фильтр lowpass с частотой полосы пропускания 0.4π рад/выборка, частота полосы задерживания 0.6π рад/выборка, пульсация полосы пропускания 1 дБ и затухание полосы задерживания 80 дБ. Мы будем разрабатывать фильтры с помощью некоторых Design Tool фильтра Signal Processing Toolbox и затем анализировать результаты в FVTool.

Разработайте lowpass equiripple КИХ-фильтр

Df1 = designfilt('lowpassfir','PassbandFrequency',0.4,...
                              'StopbandFrequency',0.6,...
                              'PassbandRipple',1,...
                              'StopbandAttenuation',80,...
                              'DesignMethod','equiripple');

Разработайте lowpass эллиптический БИХ-фильтр

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

Идентифицировать, какая строка на графике принадлежит, в который фильтр, можно добавить легенду с помощью функции ЛЕГЕНДЫ указателя FVTool.

legend(hfvt, 'Equiripple', 'Elliptic', 'Chebyshev Type II');

Можно удалить фильтр из FVTool использование функции DELETEFILTER и передача индекса фильтра (фильтров), который вы хотите демонтировать.

deletefilter(hfvt, [1 3]);

Изменение аналитических параметров

Указатель, который возвращает FVTool, содержит свойства, которые позволяют вам взаимодействовать и с фильтром и с текущим анализом.

Чтобы видеть все доступные свойства, можно использовать команду GET. Первые свойства являются теми из обычной фигуры MATLAB®. Последние четырнадцать свойств FVTool конкретный. Последние шесть из них (от FrequencyScale до MagnitudeDisplay) являются конкретным анализом.

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:
                      Tag: 'filtervisualizationtool'
            UIContextMenu: [0x0 GraphicsPlaceholder]
                 UserData: []
                  Visible: 'on'
      NormalizedFrequency: 'on'
           FrequencyScale: 'Linear'
        OverlayedAnalysis: ''
                 Analysis: 'magnitude'
            ShowReference: 'on'
            PolyphaseView: 'off'
           NumberofPoints: 8192
         MagnitudeDisplay: 'Magnitude (dB)'
          FrequencyVector: [1x256 double]
    NormalizeMagnitudeto1: 'off'
           FrequencyRange: '[0, pi)'

Все параметры, которые доступны от Аналитического диалогового окна Параметров FVTOOL, также доступны как свойства объекта FVTool. Команда НАБОРА только с двумя входными параметрами возвращает все возможные значения.

set(hfvt, 'MagnitudeDisplay')
ans = 1x4 cell array
  Columns 1 through 3

    {'Magnitude'}    {'Magnitude (dB)'}    {'Magnitude squared'}

  Column 4

    {'Zero-phase'}

Повернитесь отображение к 'Значению Придало квадратную форму'

hfvt.MagnitudeDisplay = 'Magnitude Squared';

Получите все возможные значения для свойства 'Analysis'

set(hfvt, 'Analysis')
ans = 1x12 cell array
  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 (время или частота) путем установки свойства 'OverlayedAnalysis'.

set(hfvt, 'OverlayedAnalysis', 'magnitude', 'Legend', 'On')

Чтобы выключить overlayed анализ просто устанавливает свойство 'OverlayedAnalysis' на ''.

hfvt.OverlayedAnalysis = '';

Взаимодействие с FVTool как Окно рисунка

Окно 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)