У меня есть аналоговый управляющий сигнал в режиме реального времени, который может принимать значение от 200 до -200. Первая проблема заключалась в том, что он ускорялся и замедлялся слишком быстро, поэтому я создал код на python (да, здесь есть только python), который ограничивает ускорение и замедление:
def signal_ramp(Guide_Signal, ramp_signal_pre, acc, dec = 0):
if dec == 0:
dec = acc
if sign(Guide_Signal) != sign(ramp_signal_pre) and ramp_signal_pre != 0: # If guide signal has different direction than ramp_signal, then first brake and then accelerate
Guide_Signal = 0
singal_d = abs(Guide_Signal) - abs(ramp_signal_pre)
if singal_d < 0 and abs(singal_d) > dec: # Brake
if Guide_Signal == 0:
return ramp_signal_pre - dec * sign(ramp_signal_pre)
else:
return ramp_signal_pre - dec * sign(Guide_Signal)
elif singal_d > 0 and abs(singal_d) > acc: # Accelerate
return ramp_signal_pre + acc * sign(Guide_Signal)
else:
return Guide_Signal
Это будет генерировать линейные изменения для сигнала, например:
Где красная линия - это сигнал направления, а зеленая - это сигнал линейного изменения.
Моя проблема в том, что я хотел сгладить концы рампы, но не могу понять, как. Я хотел сделать больше похожим на сигнал «Sigmoid function», но я не знаю, возможно ли это для живого сигнала или каков правильный подход к этой проблеме.