主要内容

传递函数模型频域识别的故障排除

本例展示了如何使用频率响应数据(FRD)对SISO系统进行识别并进行故障排除。这里解释的技术也可以应用于MIMO模型和频域输入-输出数据。

当你使用特遣部队命令从频率响应数据估计SISO传递函数模型,估计算法最小化以下最小二乘损失(成本)函数:

n z e G ω k 1 N f | W ω k G ω k - f ω k | 2

在这里W是你指定的与频率相关的权重,G是要估计的传递函数,f测量的频率响应数据,和 w 是频率。Nf是数据可用的数字频率。 G w - f w 是频响误差。

在本例中,您首先估计模型,而不预处理数据或使用估计选项指定加权过滤器。然后应用这些故障排除技术来改进模型估计。

不经过预处理和滤波的模型估计

加载测得的连续时间频响数据。

负载troubleshooting_example_dataGfrd

Gfrd是一个idfrd对象,该对象用于存储数据。

利用估计数据估计一个11极10零的初始传递函数模型。

Gfit = tfest(Gfrd,11,10);

绘制估计模型的频响幅度和实测频响数据。

bodemag (Gfrd礼物);Ylim ([-100 0])“测量”“估计”

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象代表测量的、估计的。

估计模型包含伪动态。该估计算法忽略了60 rad/s下的谷和60 rad/s后的谐振峰。因此,该模型不能很好地拟合数据。

该算法最小化误差的平方大小, | W w G w - f w | 2 ,为损失函数。把这个量画成频率的函数。此误差图提供了哪些数据点对损失函数贡献最大的视图,以及估计过程中可能的限制因素。图可以帮助你确定为什么存在虚假或未捕获的动态。

因为你没有指定一个与频率相关的权重, W w 是1。

w = gfrd .频率;r1 =挤压(频率(Gfit,w));r2 = squeeze(freqresp(Gfrd,w));fitError = r1-r2;semilogx (w、abs (fitError)。^ 2)标题(“加权估计误差”);包含(“频率(rad / s)”);ylabel (“(abs)级”

图中包含一个轴对象。标题为加权估计错误的axes对象包含一个类型为line的对象。

从数据、模型和误差图中,你可以看到:

  • 最大拟合误差小于10 rad/s。

  • 该算法重点拟合10 rad/s以下噪声较大的高幅数据点,这些数据点对优化损失函数的贡献较大。因此,该算法为该数据区域分配伪极点和伪零。为了解决这个问题,可以对数据进行预处理,以提高该区域的信噪比。您还可以使用频率相关的权重,使算法对该区域的关注减少。

  • 低于约40 rad/s时,数据的大部分变化是由噪声引起的。数据中没有重要的系统模式(谷或峰)。为了解决这个问题,您可以在数据上使用移动平均过滤器来平滑测量的响应。

  • 该算法忽略了60 rad/s左右的山谷和其后三个轻微阻尼的共振峰。这些特征对损失函数的贡献很小,因为在这些频率上拟合误差很小。要解决这个问题,可以指定与频率相关的权重,使算法更加关注这些频率。

数据进行预处理

为了提高估计模型的质量,需要对数据进行预处理。为此,需要截断数据中低于1 rad/s和高于2e4 rad/s的低信噪比部分。然后使用移动平均滤波器平滑低于40 rad/s的低频高幅度区域的数据。在这些频率下,数据具有较低的信噪比,但具有您感兴趣的动态。不要在频率超过40 rad/s的情况下应用滤波器,以避免平滑你看到的山谷和后面的三个峰值的数据。

把原件复印一份idfrd数据对象。

GfrdProcessed = Gfrd;

截断低于1 rad/s和高于2e4 rad/s的数据。

GfrdProcessed = fselect(GfrdProcessed,1,2e4);

应用三点中心移动平均滤波器平滑频率响应数据低于40 rad/s,其中包含杂散动态。响应数据存储在ResponseData对象的属性。

w = GfrdProcessed.Frequency;f = squeeze(GfrdProcessed.ResponseData);Idx = w<40;F (idx) = movmean(F (idx),3);

在这里f (idx)是频率小于40 rad/s时的频率响应数据。

将过滤后的数据放回原始数据对象中。

GfrdProcessed。ResponseData=f;

绘制原始数据和预处理数据。

bodemag (Gfrd GfrdProcessed);-100年ylim ([0]);传奇(“原始数据”“预处理数据”);

图中包含一个轴对象。axis对象包含2个line类型的对象。这些对象表示原始数据、预处理数据。

图中显示,经过预处理后,所有期望的动态都是完整的。

指定加权滤波器

对于存在杂散动态的低于10 rad/s的低频区域,使用低权重。这种较低的权重和较早应用于该数据的平滑降低了在该区域估计模型响应中出现假峰值的机会。

重量= ones(大小(f));Idx = w<10;重量(idx) =重量(idx)/10;

对频率范围为40-6e3 rad/s的数据使用高权重,在此范围内您希望捕获动态,但响应数据量级较低。

Idx = w>40 & w<6e3;重量(idx) =重量(idx)*30;

属性中指定权重WeightingFilter评估选项集的选项。

tfestOpt = tfestOptions(“WeightingFilter”、重量);

请注意,重量是自定义加权过滤器。你也可以指定WeightingFilter作为“发票”“invsqrt”对于频率响应数据。这些选项将权重指定为 1 / | f w | 而且 1 / | f w | ,分别。这些选项使您能够快速测试对低量级数据区域使用较高权重的效果。“invsqrt”通常是一个很好的初始选择。如果这些权重不能产生良好的估计结果,您可以提供自定义权重,如本例所示。

使用预处理和过滤数据的估计模型

使用预处理数据和指定的加权滤波器估计具有11极和10零的传递函数模型。

GfitNew = tfest(GfrdProcessed,11,10,tfestOpt);

绘制原始数据、初始模型响应和新模型响应。

bodemag (Gfrd,礼物,GfitNew);-100年ylim ([0]);传奇(“原始数据”的原始模型“新模式”);

图中包含一个轴对象。axis对象包含3个line类型的对象。这些对象表示原始数据、原始模型、新模型。

画出估计误差。通过包含加权滤波器计算估计误差重量你用来估计的GfitNew

w = GfrdProcessed.Frequency;r1 = squeeze(freqresp(GfitNew,w));r2 = squeeze(freqresp(GfrdProcessed,w));fitErrorNew = Weight.*(r1-r2);semilogx (w、abs (fitErrorNew)。^ 2)标题(“加权估计误差”);包含(“频率(rad / s)”);ylabel (“(abs)级”);

图中包含一个轴对象。标题为加权估计错误的axes对象包含一个类型为line的对象。

新模型成功地捕获了所有感兴趣的系统动力学。

如果最初选择的权重不能产生令人满意的结果,可以使用加权误差图进行进一步的故障排除。

另请参阅

|

相关的话题