基于梯度下降的定常和时变系统的参数辨识及App设计:目录
说明
1. 这份设计从哪来
梯度下降参数辨识源于去年12月份时《系统辨识与自适应控制》课程作业之一,之后又抽空修补了一下,最近收拾云盘看到了这份设计,记录一下。疏漏之处,还请纠正。设计文档、实现代码
2.涉及到哪些理论知识
梯度下降的基本原理,参数辨识或近似解线性方程组的基本原理,AppDesigner。
效果
1. 最终的设计面板
2. 面板简介
左侧的三个图分别是:M序列、输出序列、参数辨识结果。
右侧分别是:M序列控制面板,定常和时变识别选项;系统模型的参数设置,线性模型的参数设置和时变模型的输出生成;固定学习率的参数辨识参数设置;最速下降法和共轭梯度法的参数设置。
3. 识别效果
下面是线性模型+固定学习率的参数辨识结果:
下面是线性定常模型+最速下降法的参数辨识结果:
下面是线性定常模型+共轭梯度法的参数辨识结果:
下面是时变模型+最速法的参数辨识结果:
下面是时变模型+共轭梯度法的参数辨识结果:
原理
1. M序列
参数辨识的第一个程序应该就是输入信号的产生,常用的有脉冲序列、高斯序列、M序列、逆M序列等。M序列是一种伪随机周期序列,用移位寄存器、异或门、反馈单元实现,产生原理到处可以搜索。最重要的是反馈回路的选择,相同阶的M序列可能对应不同的反馈回路。这里我仅采用其中一种反馈系数,生成3-15阶M序列。function [seq,time]=Input_mseq(n,a,delta_t),n为阶数,a为幅值,delta_t脉冲周期。
2. 梯度下降参数辨识
辨识问题转化为,梯度下降解决在具体指标下求最值的问题。这其中比较重要的一点是求学习率如何选择。参考《数值分析》课程中解线性方程组的方法,采用了三种方法:固定学习率;最速下降法;共轭梯度法。由于后两种方法要求A阵对称正定,所以对原数据fai乘以其转置即可。具体的参数调整规则可以参考总结文档。
那如何将该方法应用到时变系统中呢?实际上,只要观测数据的采样频率足够高,在较短的时间内我们就能得到该时间段的辨识结果,那么采用分段的形式进行计算或者说是参数辨识中的术语叫做限定记忆,可以得到每一段的参数值,暂时就称这种方法为滑动计算方式。滑动步长根据时变的程度进行自由的选择。例如滑动步长为d,每段计算采用的观测数据组数为n,则第一段采用数据y(1)-y(n),第二段则采用y(d)-y(d+n-1)。
3. MATLAB AppDesigner
AppDesiner 是GUI的简化版,提供了比较好的可视化的面板设计功能。可以多看看官方的几个例子,使用起来不算复杂。
设计文档: https://download.csdn.net/download/XYY_CN/12280196
实现代码: https://download.csdn.net/download/XYY_CN/12280222
关于这种课程上相关的小设计其实做的挺多的,好多也已经丢失。希望以后有机会能把这些做个记录吧。