主要内容

基于RLS自适应滤波的系统识别

这个例子展示了如何使用递归最小二乘(RLS)滤波器来识别一个用低通FIR滤波器建模的未知系统。利用动态滤波可视化器对未知系统和估计系统的频率响应进行比较。这个示例允许您使用用户界面(UI)动态调优关键模拟参数。该示例还向您展示了如何使用MATLAB Coder™为算法生成代码并加快其执行速度。

需要MathWorks™产品:2022世界杯八强谁会赢?

  • DSP系统工具箱™

可选MathWorks产品:2022世界杯八强谁会赢?

  • MATLAB Coder,用于从MATLAB仿真生成C代码

  • Simulink®用于执行Simulink版本的示例

简介

自适应系统辨识是自适应滤波的主要应用之一。这个例子展示了使用RLS过滤器进行系统识别。示例的工作流程如下所示:

用一个低通FIR滤波器对未知系统进行建模。相同的输入被馈送到FIR和RLS滤波器。所期望的信号是未识别系统的输出。因此,估计的RLS滤波器的权重收敛于FIR滤波器的系数。动态滤波器可视化器使用RLS滤波器和FIR滤波器的系数来可视化期望和估计的频率响应。还可视化了RLS滤波器的学习曲线(滤波器的均方误差(MSE)随时间变化的曲线)。

可调滤波器

本例中使用的低通FIR滤波器的建模使用dsp。VariableBandwidthFIRFilter系统对象。该对象允许您在保持FIR结构的同时调优滤波器的截止频率。通过将每个滤波器系数乘以与电流和预期截止频率成比例的因子来实现调谐。

MATLAB仿真

HelperRLSFilterSystemIdentificationSim包含算法实现的函数。它实例化、初始化并逐步通过构成算法的对象。

这个函数RLSFilterSystemIDExampleApp包裹在HelperRLSFilterSystemIdentificationSim并迭代调用它,提供对未知FIR系统的持续适应。使用dsp。DynamicFilterVisualizer该应用程序还绘制了以下图形:

  1. 期望与估计的频率传递函数。

  2. RLS滤波器的学习曲线。

当函数的'plotResults'输入为'true'时,就会发生绘图。

执行RLSFilterSystemIDExampleApp运行模拟并在作用域上绘制结果。注意,只要用户没有显式地停止模拟,它就会一直运行。

下图是运行上述100个时间步模拟的输出:

RLSSysIdentification01.png

RLSSysIdentification02.png

通过上面的图可以看出RLS滤波器对FIR滤波器的快速收敛。

RLSFilterSystemIDExampleApp启动一个设计用于与模拟交互的用户界面(UI)。UI允许您调整参数,结果立即反映在模拟中。例如,当模拟运行时,将“截止频率”的滑块向右移动,增加FIR滤波器的截止频率。类似地,移动“RLS遗忘因子”的滑块调整RLS过滤器的遗忘因子。这些图反映了当您调优这些参数时的更改。有关用户界面的更多信息,请参考HelperCreateParamTuningUI

UI上还有两个按钮——“重置”按钮将RLS和FIR滤波器的状态重置为初始值,“停止模拟”结束模拟。如果您将RLS过滤器的遗忘因子调优到一个过低的值,您将注意到RLS过滤器无法收敛到所需的解,正如预期的那样。您可以通过首先增加遗忘因子到一个可接受的值,然后单击“重置”按钮来恢复收敛性。使用UI来控制模拟,或者可选地控制从模拟代码生成的mex文件(或独立可执行文件),具体如下所示。如果你有一个MIDI控制器,可以将它与UI同步。您可以通过在对话框中选择MIDI控件来实现这一点,当您右键单击滑块或按钮并从上下文菜单中选择“同步”时,会打开对话框。选择的MIDI控件然后根据滑块/按钮工作,以便操作一个控件被另一个跟踪。

RLSSysIdentification03.png

生成MEX-File

可以使用MATLAB Coder为函数生成C代码HelperRLSFilterSystemIdentificationSim也为了为您的平台生成一个mex文件,执行以下命令:

currDir = pwd;存储当前目录地址addpath(pwd) mexDir = [tempdir .“RLSFilterSystemIdentificationExampleMEXDir”];%的名字%临时目录如果~存在(mexDir“dir”mkdir (mexDir);%创建临时目录结束cd (mexDir);变化百分比目录ParamStruct = HelperRLSCodeGeneration ();
代码生成成功:要查看报告,请打开('codegen/mex/HelperRLSFilterSystemIdentificationSim/html/report.mldatx')

通过调用包装器函数RLSFilterSystemIDExampleApp“真正的”作为参数,生成的mex文件HelperRLSFilterSystemIdentificationSimMEX可以用来代替HelperRLSFilterSystemIdentificationSim的模拟。在这个场景中,UI仍然在MATLAB环境中运行,但是主要的处理算法由一个mex文件执行。在这种模式下,性能得到了提高,而不影响调优参数的能力。

点击这里打电话给RLSFilterSystemIDExampleApp“真正的”参数来使用mex文件进行模拟。同样,模拟运行直到用户显式地从UI中停止它。

模拟与MEX速度比较

创建墨西哥文件通常有助于实现更快的模拟运行时间。为了衡量性能的提高,让我们在MATLAB中首次执行算法,没有任何绘图:

清晰的HelperRLSFilterSystemIdentificationSimdisp (“运行MATLAB代码……”
运行MATLAB代码…
tic nTimeSteps = 100;ind = 1:nTimeSteps HelperRLSFilterSystemIdentificationSim(ParamStruct);结束tMATLAB = toc;

现在让我们计算相应的mex文件的运行时间并显示结果:

清晰的HelperRLSFilterSystemIdentificationSimdisp (“运行MEX-File…”
运行MEX-File……
抽搐ind = 1:nTimeSteps HelperRLSFilterSystemIdentificationSimMEX(ParamStruct);结束tMEX = toc;disp (的结果:
结果:
disp (['运行MATLAB系统对象所花费的时间:'num2str (tMATLAB),...“秒”]);
运行MATLAB System对象所花费的时间:7.6447秒
disp ([“运行MEX-File的时间:”num2str (tMEX),“秒”]);
运行MEX-File所需的时间:0.63315秒
disp ([“加速一倍”num2str (tMATLAB / tMEX),...'通过创建MEX-File实现']);
通过创建MEX-File,可以实现12.0742倍的加速

清理生成的文件

可以通过以下方式删除之前创建的临时目录:

cd (currDir);清晰的HelperRLSFilterSystemIdentificationSimMEX;删除目录(mexDir“年代”);

仿真软件版本

rlsfiltersystemidentification是一个Simulink模型,它实现了前几节中强调的RLS系统标识示例。

RLSSysIdentification04.png

在该模型中,低通FIR滤波器的建模使用可变带宽FIR滤波器块。震级响应可视化使用dsp。DynamicFilterVisualizer

双击系统识别子系统启动与Simulink模型交互的掩码。可以调整FIR滤波器的截止频率和RLS滤波器的遗忘因子。

模型在被模拟时生成代码。因此,它必须在具有写权限的文件夹中执行。

Baidu
map