How to smooth rectangular signal with high order rate-limiter in Simulink?

吃可爱长大的小学妹 提交于 2019-12-08 06:33:48

问题


Imagine I have a rectangular reference value for the position/displacement x and I need to smooth it.

The math for translatoric movements is quite simple:

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

I need to limit all these values. So I thought about using rate limiters in Simulink:

This approach works perfect for ramp signals, as you can see in the following output:

BUT, my reference signals for x are no ramps, they are rectangles/steps. Hence the rate limiters are not working, because the derivatives they get to limit are already infinite and Simulink throws an error. How can I resolve this problem? Is there actually a more elegant way to implement the high order rate-limiters? I guess this approach could be unstable in some cases.


continue reading: related question


回答1:


Even though it seems absurd, the following approach is working: integration and instant derivation does the trick:

leading to:

More elegant, faster and simpler solutions for the whole smoothing problem are highly appreciated!




回答2:


It's generally not a good idea to differentiate signals in Simulink because of numerical issues, I would advise to start with the higher order derivatives (e.g. acceleration) and integrate, much more robust numerically. This is what the doc about the derivative block says:

The Derivative block output might be very sensitive to the dynamics of the entire model. The accuracy of the output signal depends on the size of the time steps taken in the simulation. Smaller steps allow a smoother and more accurate output curve from this block. However, unlike with blocks that have continuous states, the solver does not take smaller steps when the input to this block changes rapidly. Depending on the dynamics of the driving signal and model, the output signal of this block might contain unexpected fluctuations. These fluctuations are primarily due to the driving signal output and solver step size.

Because of these sensitivities, structure your models to use integrators (such as Integrator blocks) instead of Derivative blocks. Integrator blocks have states that allow solvers to adjust step size and improve accuracy of the simulation. See Circuit Model for an example of choosing the best-form mathematical model to avoid using Derivative blocks in your models.

See also Best-Form Mathematical Models for more details.




回答3:


I was trying to do something similar. I was looking for a "Smooth Ramp". Here is what I found:

A simpler approach is to combine ramp with a second order lag. Then the signal approachs s-shape. And your derivatives will exist and be smooth as well. Only thing to remember is that the 2nd or lag must be critically damped.

Y(s) = H(s)*X(s) where H(s) = K*wo^2/(s^2 + 2*zeta*wo*s + wo^2). Here you define zeta = 1.0. Then the s-shape is retained for any K and wo value. Note that X(s) has already been hit by a ramp. In matlab or any other tools, linear ramp and 2nd lag are standard blocks.

Good luck!




回答4:


I think the 'Transfer Fcn' block is what you're looking for.

If you leave the equation in the default form 1/(s+1) you have a low-pass filter which can be tuned to what you need by changing the numerator and denominator coefficients.



来源:https://stackoverflow.com/questions/18871488/how-to-smooth-rectangular-signal-with-high-order-rate-limiter-in-simulink

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!