我是靠谱客的博主 坦率花生,最近开发中收集的这篇文章主要介绍matlab fvtool参数,使用 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);

7bbb2c6ffde93002235cefdde4ec5d8d.png

添加和删除滤波器

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

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

Df3 = designfilt('lowpassiir','PassbandFrequency',0.4,...

'StopbandFrequency',0.6,...

'PassbandRipple',1,...

'StopbandAttenuation',80,...

'DesignMethod','cheby2');

addfilter(hfvt, Df3);

948d53419f7747d033986974f2bbdc7e.png

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

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

0ada08c9ce6eb4084728d07a9120fdad.png

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

deletefilter(hfvt, [1 3]);

f8a598b59148afc9b4ca476cc2e4a5ce.png

更改分析参数

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

要查看所有可用的属性,可以使用 GET 命令。前几个属性是常规 MATLAB® 图窗的属性。最后 14 个属性是特定于 FVTool 的属性。其中最后六个(从 FrequencyScale 到 MagnitudeDisplay)是特定于分析的属性。

s = get(hfvt);

40aede9ca5b8e0119f148c5408dda715.png

% 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

MagnitudeDisplay: 'Magnitude (dB)'

FrequencyScale: 'Linear'

NumberofPoints: 8192

NormalizeMagnitudeto1: 'off'

NormalizedFrequency: 'on'

FrequencyVector: [1x256 double]

PolyphaseView: 'off'

Analysis: 'magnitude'

OverlayedAnalysis: ''

ShowReference: 'on'

FrequencyRange: '[0, pi)'

所有可从 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';

461eefe474271d978e5637e334773cd4.png

获取 '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';

d83a93447aa9344f4c93458875558282.png

GET 命令将返回新的分析参数以进行新的分析。

GroupDelayUnits = hfvt.GroupDelayUnits;

叠加两个分析

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

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

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

f496a8c14748db779fd203ebfb209fdd.png

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

hfvt.OverlayedAnalysis = '';

7810da05f216d97db1ebc2010ee206e3.png

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

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

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

grid on

axis([.3 .45 5 25]);

ec0d8981b84b6291d4b8eb8fff9f7e9e.png

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

title('Group Delay of an Elliptic filter');

xlabel('Frequency (normalized to 1)');

ylabel('Group Delay in samples');

htext = text(.35, 23, 'Maximum Group Delay');

a9db706fea4ba247f096732ee567009a.png

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

delete(htext);

close(hfvt)

最后

以上就是坦率花生为你收集整理的matlab fvtool参数,使用 FVTool 进行滤波器分析的全部内容,希望文章能够帮你解决matlab fvtool参数,使用 FVTool 进行滤波器分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(93)

评论列表共有 0 条评论

立即
投稿
返回
顶部