2014-02-25 149 views
1

当我试图在系统识别工具箱(SIT)内创建的Simulink中导入和测试传输函数时,我认为我做了一些根本性错误。在Simulink中使用系统识别工具箱传输功能

给我一个简单的例子,我在做什么。 我有一个输入是一个从12秒到25秒的偏移正弦波,振幅为1,频率为1.5rad/s,可以给出测量输出。

我用SIT创建它提供了以下协议一个简单的2极1零换乘功能: SIT fit

然后我试图导入此传递函数到Simulink在下面的配置具有调查频率1.5rad/s的正弦输入和起始t = 12。该LTI系统块是指在工作区中的传递函数变量: Simulink schematic

当我运行这个模拟13秒输入块是预期,但后传递函数信号表明什么将预期没有达成一致并且是一个数量级。

前: PRE signal

后: POST signal

可能有人给任何洞察到哪里我错了,为什么在Simulink中tf输出显示一点相似于显示的模型输出坐。我对控制理论有一个基本的把握,但我正在努力弄清楚这一点。

+0

这些是各自的传输前和传输功能示波器: https://dl.dropboxusercontent.com/u/8037738/project/pre.PNG ; https://dl.dropboxusercontent.com/u/8037738/project/post.PNG – Jimog

回答

1

这可能是由于SimuLink和SI Toolbox中使用的初始条件不同,后者应该使用该模型估算初始条件,而Simulink对初始条件没有任何特殊要求,除非您自己指定它们。

对我来说,似乎你的原始信号处于周期性状态,因为你的输出看起来几乎就像一个正弦波。在周期性制度下,初始条件影响不大。您可以通过模拟您的模型更长时间来验证我的假设:如果最终,您的信号在数据中达到正确的幅度和相位滞后,您将知道初始条件是错误的。 在任何情况下,您都可以从工具箱中获得估计的初始状态,我认为使用生成对象的InitialState属性。

可能出问题的另一件事,是你在Simulink中使用的情况下,你估计持续时间模型(一个在拉普拉斯变量s,而不是在zq)的时间离散。

编辑:在这种情况下,我建议你查阅一下Simulink中使用到的离散CT模型,利用Matlab软件c2d和像在Simulink如下所示的设置。在MATLAB中,您还可以使用lsim“模拟”CT模型的响应,您必须指定离散化方法。

enter image description here

这种设置允许在一个CT模型和离散变体(在这种情况下,状态空间)加载。通过比较信号,您可以看到您使用的离散化方法是否与SimuLink使用的方法相同(这取决于您在设置中设置的积分方法)。

+0

长时间运行模拟不会导致输出达到预期值或相关性。尽管看起来SIT的GUI在显示图表时使用'COMPARE'来预测一些初始条件,所以你可能是正确的。我相信为了收集初始条件,我必须将'tf'转换成状态空间模型,并使用FINDSTATES来收集估计的初始值。然而,我计算了一个新的初始条件为零的tf,但是这再次表明了SIM中的不良关联。一个固定的时间步长求解器和连续的'tf'会导致问题吗? – Jimog

+0

您使用的求解器可以确定您以主导方式获得的结果。我使用SL原理图对我的答案进行了调整,以检查Simulink中的离散化。 – Egon

+0

你是正确的,这是最初的条件。 (1)将tf转换为状态空间模型'sys_ss = ss(sys)'2)将ss模型隐藏为idss格式'sys_idss = idss(sys_ss)'3)将模型与数据进行比较找到初始状态'state = findstates(sys_idss,data)'4)使用'sys_ss'在Simulink中使用LTI块并收集状态。非常感谢你强调这是埃贡的问题,非常感谢。 – Jimog