Обеспечение плавного линейного изменения сигнала - PullRequest
0 голосов
/ 05 июня 2019

У меня есть аналоговый управляющий сигнал в режиме реального времени, который может принимать значение от 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

Это будет генерировать линейные изменения для сигнала, например: enter image description here

Где красная линия - это сигнал направления, а зеленая - это сигнал линейного изменения.

Моя проблема в том, что я хотел сгладить концы рампы, но не могу понять, как. Я хотел сделать больше похожим на сигнал «Sigmoid function», но я не знаю, возможно ли это для живого сигнала или каков правильный подход к этой проблеме.

...