• 使用 FVTool 进行滤波器分析


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

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

    启动 FVTool

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

            设计低通等波纹 FIR 滤波器

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

            设计低通椭圆 IIR 滤波器

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

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

    hfvt = fvtool(Df1, Df2);

            如图所示:

    添加和删除滤波器

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

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

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

            如图所示:

            要识别绘图上的哪条线属于哪个滤波器,可以使用 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);

            如图所示:

    1. % Keep the last 14 properties
    2. c = struct2cell(s);
    3. f = fieldnames(s);
    4. s = cell2struct(c(end-14:end),f(end-14:end),1)
    5. s = struct with fields:
    6. SelectionHighlight: on
    7. Tag: 'filtervisualizationtool'
    8. UserData: []
    9. Visible: on
    10. NumberofPoints: 8192
    11. FrequencyVector: [0 0.0039 0.0078 0.0118 0.0157 0.0196 0.0235 ... ]
    12. NormalizeMagnitudeto1: 'off'
    13. NormalizedFrequency: 'on'
    14. MagnitudeDisplay: 'Magnitude (dB)'
    15. PolyphaseView: 'off'
    16. FrequencyScale: 'Linear'
    17. Analysis: 'magnitude'
    18. OverlayedAnalysis: ''
    19. FrequencyRange: '[0, pi)'
    20. ShowReference: 'on'

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

    1. set(hfvt, 'MagnitudeDisplay')
    2. ans = 1x4 cell
    3. Columns 1 through 3
    4. {'Magnitude'} {'Magnitude (dB)'} {'Magnitude squared'}
    5. Column 4
    6. {'Zero-phase'}

            将显示转至 'Magnitude Squared'

    hfvt.MagnitudeDisplay = 'Magnitude Squared';

            如图所示:

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

    1. set(hfvt, 'Analysis')
    2. ans = 1x12 cell
    3. Columns 1 through 5
    4. {'magnitude'} {'phase'} {'freq'} {'grpdelay'} {'phasedelay'}
    5. Columns 6 through 10
    6. {'impulse'} {'step'} {'polezero'} {'coefficients'} {'info'}
    7. Columns 11 through 12
    8. {'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 函数。

    1. grid on
    2. axis([.3 .45 5 25]);

            如图所示:

            也可以从命令行访问轴。可以更改标题和标签。 

    1. title('Group Delay of an Elliptic filter');
    2. xlabel('Frequency (normalized to 1)');
    3. ylabel('Group Delay in samples');
    4. htext = text(.35, 23, 'Maximum Group Delay');

            如图所示:

            FVTool 不会自动从分析中删除附加注释,可以通过删除句柄本身来实现这一点。可以通过对 FVTool 句柄调用 close 函数来关闭 FVTool 图窗。 

    1. delete(htext);
    2. close(hfvt)

  • 相关阅读:
    Qt 学习(四) —— QRadioButton单选框
    Java应用开发各种奇葩的问题
    2023年中国大学生程序设计竞赛女生专场题解, K. RSP
    6个小技巧,帮助职场新人培养项目管理能力
    【免费】2024年全新超强版本itvboxfast如意版影视APP源码 TV+手机双端后台PHP源码
    LeetCode 1114 按序打印
    Java Maven项目打jar包方法
    SpringBoot项目常用注解
    深入了解 useMemo 和 useCallback
    第二十二章《记事本》第1节:记事本项目简介
  • 原文地址:https://blog.csdn.net/jk_101/article/details/124798677