【问题标题】:How to smooth rectangular signal with high order rate-limiter in Simulink?如何在 Simulink 中使用高阶速率限制器平滑矩形信号?
【发布时间】:2013-09-18 11:50:52
【问题描述】:

假设我有一个位置/位移的矩形参考值x,我需要对其进行平滑处理。

平移运动的数学很简单:

speed: v = x'
acceleration: a = v' = x''
jerk. j = a' = v'' = x'''

我需要限制所有这些值。所以我考虑在 Simulink 中使用速率限制器: 这种方法非常适合斜坡信号,您可以在以下输出中看到:

但是,x 的参考信号不是斜坡,它们是矩形/阶梯。因此,速率限制器不起作用,因为它们限制的导数已经是无限的,并且 Simulink 会引发错误。我该如何解决这个问题?实际上是否有更优雅的方式来实现高阶限速器?我猜这种方法在某些情况下可能会不稳定。


继续阅读:related question

【问题讨论】:

  • 不是专家(当然不是在 simulink 中),但“无限”斜率可能是用词不当。计算出的斜率可能只是产生算术溢出还是?是否有某种方法可以捕获该错误并将其视为触发器?
  • @TryHard 错误提示“速率限制器的输入信号既不是离散时间信号也不是连续时间信号”

标签: matlab customization limit simulink derivative


【解决方案1】:

尽管这看起来很荒谬,但以下方法是有效的:集成和即时推导可以解决问题: 导致:

非常感谢为整个平滑问题提供更优雅、更快和更简单的解决方案!

【讨论】:

    【解决方案2】:

    由于数值问题,在 Simulink 中区分信号通常不是一个好主意,我建议从高阶导数(例如加速度)开始并在数值上更加稳健地进行积分。这就是doc about the derivative block 所说的:

    Derivative 模块的输出可能对 整个模型。输出信号的精度取决于 模拟中采取的时间步长的大小。较小的步骤允许 此模块的输出曲线更平滑、更准确。然而, 与具有连续状态的块不同,求解器不 当此块的输入快速变化时,采取较小的步骤。 根据驱动信号和模型的动态,输出 该区块的信号可能包含意外波动。这些 波动主要是由于驱动信号输出和求解器 步长。

    由于这些敏感性,构建模型以使用 积分器(例如 Integrator 模块)而不是 Derivative 模块。 积分器模块具有允许求解器调整步长的状态 并提高模拟的准确性。见电路模型 选择最佳形式的数学模型以避免使用的示例 模型中的导数块。

    有关详细信息,另请参阅Best-Form Mathematical Models

    【讨论】:

    • 我知道这一点,并且预计在某些时候步长不足会导致不稳定性(直到现在它工作正常)。但是我的输入信号是位移x - 那么你建议如何在没有导数块的情况下解决它?好吧,输入信号是预定义的,我可以想象编写一个 matlab 代码为我提供一个 jerk/acceleration/speed 输入曲线而不是x,尽管我实际上真的很想在 Simulink 中使用 Signal Builder,因为它完全符合我的需求并且然后还在simulink中平滑曲线。 (我不知道如何在 matlab 中实现可变步长)
    • 如果位移信号是离散信号,可以使用 Discrete Derivative 模块。对于连续信号,您可以使用传递函数来近似(和替换)导数,例如 s/(c*s+1) 与 c 的近似选择(通常是一个较大的值)。
    • 您的意思是c 的值非常小,对吧?但是后来一切都变得异常缓慢,我猜解算器会试图避免任何数值问题,而它之前只会抛出一个错误。我将尝试将我的模型转换为这些“最佳形式”。
    • 哎呀,是的,你当然是对的。您可能需要调整求解器设置并使用刚性求解器而不是默认的 ode45。
    • 我不知道如何将我的模型转换为没有导数的模型。但实际上,它适用于步进和斜坡,进一步可以想象的信号会更平滑,没有脉冲或任何预期。所以应该没有问题吧?我能想到的唯一改进是自定义三级速率限制器,以避免所有衍生物。
    【解决方案3】:

    我正在尝试做类似的事情。我一直在寻找“平滑坡道”。这是我发现的:

    一种更简单的方法是将斜坡与二阶滞后相结合。然后信号接近 s 形。你的衍生品也将存在并且是平滑的。唯一要记住的是,第二个或滞后必须严格阻尼。

    Y(s) = H(s)*X(s) 其中 H(s) = K*wo^2/(s^2 + 2*zeta*wo*s + wo^2)。在这里定义 zeta = 1.0。然后对于任何 K 和 wo 值都保留 s 形。请注意,X(s) 已经被斜坡击中。在 matlab 或任何其他工具中,线性斜坡和第二滞后是标准块。

    祝你好运!

    【讨论】:

      【解决方案4】:

      我认为“Transfer Fcn”块是您正在寻找的。

      如果您将方程保留为默认形式 1/(s+1),则您有一个低通滤波器,可以通过更改分子和分母系数来调整到您需要的值。

      【讨论】:

      • 这个答案与问题有什么关系?传递函数是一个线性系统,那么它应该如何限制一些东西呢?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多