薄柔性结构Matlab-Simulink建模中闭环滤波技术应用问题咨询
建模方法
我在Matlab-Simulink中对极薄柔性结构进行建模,模型所有点通过弹簧和阻尼器相互连接(中心无系绳),网格描述见对应网格说明图。
模型网格每个点适用的通用动力学方程为质量/弹簧/阻尼系统动力学公式,其中k为弹簧刚度,c为阻尼器阻尼系数。为匹配待建模材料的物理属性,弹簧刚度设置为极高的5000左右,这意味着弹簧连接对任何形变的响应都非常灵敏。
遇到的问题
高刚度连接会产生可视为仿真噪声的高频位移,带来两类问题:
- 使用的可变时间步长必须设置得极小,导致仿真速度大幅降低;
- 该高频位移(约160Hz,为弹簧的共振频率)会在整个仿真过程中持续存在。
我完成了结构以恒定角速度旋转的仿真,结构任意点在球坐标系下的时间演化结果见对应点位坐标演化图,可以看到R值存在极高频率的振动,但位移幅值明显可忽略。为提升仿真速度,我需要抑制这类振动。
调研测试情况
为抑制振动,我调研了信号滤波技术,主要是低通滤波。仿真的每个循环中,需要输入滤波器的是所有点各轴向的数据,所使用的Simulink低通滤波模块见对应模块截图。
我测试了Simulink库中的连续型低通滤波器,分别对加速度、速度、位置信号滤波,截止频率设置范围为100Hz到500Hz。例如设置200Hz截止频率对位置信号滤波时,t=0.6s时的结果见滤波后坐标演化图,该场景为平面运动,无俯仰角,但方位角和点到中心的距离完全发散。
我推测问题可能来源于两点:一是系统为闭环系统;二是我搭建的网格每个时间步需要向滤波器输入81个3*1向量,可能滤波模块不支持该输入形式。
核心咨询问题
是否有适用于闭环多输入系统的滤波技术可以解决该问题?
解决方案
你遇到的滤波发散问题核心原因是常规连续低通滤波会引入相位滞后,接入闭环后会直接降低系统相位裕度导致失稳,且你选择的200Hz截止频率距离160Hz共振频带过近,相移影响更大,和多输入本身没有直接关系。建议按优先级尝试以下方案:
- 优先更换仿真求解器,无需修改模型结构
你的系统是典型的刚性动力学系统,高刚度弹簧带来的160Hz高频模态和整体结构的低频运动属于完全不同的时间尺度,用默认的非刚性求解器(如ode45)必须压小步长才能稳定。直接将求解器切换为刚性求解器ode15s或ode23t,可以在保留低频运动精度的前提下大幅提升仿真步长,高频振荡也会被求解器自动稳定处理,不需要额外加滤波。 - 若需要消除结果中的高频振荡,优先做离线后处理滤波
不要在仿真闭环回路中插入滤波模块,在仿真结束后对输出的所有点位的运动数据用Matlab内置的filtfilt函数做零相位低通滤波,截止频率设置为80~100Hz即可完全滤除160Hz的共振分量,零相位滤波不会引入信号偏移,也完全支持批量处理你81个点的3维输入矩阵,不存在多输入适配问题。 - 若必须在闭环中实时滤波(如滤波结果作为控制输入),换用状态观测器类方案
常规线性滤波不适用于闭环系统,推荐使用扩展卡尔曼滤波(EKF)或针对线性系统的龙伯格观测器,你可以将160Hz的共振模态建模为过程噪声,基于你已有的系统动力学方程设计观测器,天然支持多输入多输出场景,且不会引入额外相位裕度损失,不会导致系统发散。 - 多输入适配的补充说明
Simulink默认的低通滤波模块为单输入,如果你一定要用该模块处理多通道数据,可以将模块包裹在For Each Subsystem中,对每个通道的信号单独滤波后再拼接输出,即可适配多向量输入需求。
内容的提问来源于stack exchange,提问作者Louis-Alban

