使用 FVTool 进行滤波器分析

        此示例说明如何通过滤波器可视化工具 (FVTool) 在单个图窗窗口中使用多个滤波器分析函数,Fvtool 是 Signal Processing Toolbox™ 中提供的一个图形用户界面。

        FVTool 还有一个应用程序编程接口 (API),以支持您从命令行与 GUI 交互。这能够将 FVTool 集成到其他应用程序中。

启动 FVTool

        我们希望创建一个低通滤波器,其通带频率为 0.4π 弧度/采样点、阻带频率为 0.6π 弧度/采样点、通带波纹为 1 dB、阻带衰减为 80 dB。我们将使用 Signal Processing Toolbox 的一些滤波器设计工具来设计滤波器,然后在 FVTool 中分析结果。

        设计低通等波纹 FIR 滤波器

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

        设计低通椭圆 IIR 滤波器

Df2 = designfilt('lowpassiir','PassbandFrequency',0.4,...
                              'StopbandFrequency',0.6,...
                              'PassbandRipple',1,...
                              'StopbandAttenuation',80,...
                              'DesignMethod','ellip');

        使用滤波器对象启动 FVTool 并返回 FVTool 的句柄,这使我们能够重用相同的 FVTool 图窗。

hfvt = fvtool(Df1, Df2);

        如图所示:

添加和删除滤波器

        我们可以观察到两个滤波器都符合设计规范,但仍需要查看 Chebyshev II 类设计的性能如何。

        可以使用 ADDFILTER 函数向 FVTool 添加滤波器。

Df3 = designfilt('lowpassiir','PassbandFrequency',0.4,...
                              'StopbandFrequency',0.6,...
                              'PassbandRipple',1,...
                              'StopbandAttenuation',80,...
                              'DesignMethod','cheby2');
addfilter(hfvt, Df3);

        如图所示:

扫描二维码关注公众号,回复: 14384334 查看本文章

        要识别绘图上的哪条线属于哪个滤波器,可以使用 FVTool 句柄的 LEGEND 函数添加图例。

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

        如图所示:

         可以使用 DELETEFILTER 函数并传递要删除的滤波器的索引,从 FVTool 中删除滤波器。

deletefilter(hfvt, [1 3]);

        如图所示:

更改分析参数

        FVTool 返回的句柄包含允许与滤波器和当前分析进行交互的属性。

        要查看所有可用的属性,可以使用 GET 命令。前几个属性是常规 MATLAB® 图窗的属性。最后 14 个属性是特定于 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:
       SelectionHighlight: on
                      Tag: 'filtervisualizationtool'
                 UserData: []
                  Visible: on
           NumberofPoints: 8192
          FrequencyVector: [0 0.0039 0.0078 0.0118 0.0157 0.0196 0.0235 ... ]
    NormalizeMagnitudeto1: 'off'
      NormalizedFrequency: 'on'
         MagnitudeDisplay: 'Magnitude (dB)'
            PolyphaseView: 'off'
           FrequencyScale: 'Linear'
                 Analysis: 'magnitude'
        OverlayedAnalysis: ''
           FrequencyRange: '[0, pi)'
            ShowReference: 'on'

        所有可从 FVTool 的“分析参数”对话框获得的参数也可用作 FVTool 对象的属性。只带两个输入参数的 SET 命令返回所有可能的值。 

set(hfvt, 'MagnitudeDisplay')


ans = 1x4 cell
  Columns 1 through 3

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

  Column 4

    {'Zero-phase'}

        将显示转至 'Magnitude Squared'

hfvt.MagnitudeDisplay = 'Magnitude Squared';

        如图所示:

        获取 'Analysis' 属性的所有可能值

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;

重叠两个分析

        我们还想查看群延迟和幅值响应在频域中是如何重叠的。

        通过设置 'OverlayedAnalysis' 属性,可以在 FVTool 中重叠共用一个 x 轴(时间或频率)的任意两个分析。

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

        如图所示:

        要关闭重叠的分析,只需将 'OverlayedAnalysis' 属性设置为 ''。

hfvt.OverlayedAnalysis = '';

        如图所示:

将 FVTool 视为图窗窗口进行交互

        也可以像对待普通图窗窗口一样对 FVTool 窗口进行注释。

        FVTool 图窗的行为与普通图窗窗口一样。这允许使用 MATLAB 的 grid 和 axis 函数。

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 句柄调用 close 函数来关闭 FVTool 图窗。 

delete(htext);
close(hfvt)

猜你喜欢

转载自blog.csdn.net/jk_101/article/details/124798677