Обеспечение плавного линейного изменения сигнала

У меня есть живой аналоговый сигнал управления, который может быть от 200 до -200 значений. Первая проблема заключалась в том, что он ускорялся и замедлялся слишком быстро, поэтому я создал код на 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", но я не знаю, возможно ли это для живого сигнала или каков правильный подход к этой проблеме.

0 ответов

Другие вопросы по тегам