Как создать фильтр нижних частот для дифференциального уравнения для ПИД-контроля?

#python #numpy #pid #derivative

#python #numpy #pid #производная

Вопрос:

Итак, я пытаюсь смоделировать правильную систему ПИД-контроля на python, но если я добавлю немного шума к сигналу (скажем, с помощью датчика), общий термин начнет реагировать чрезмерно. Я знаю, что это довольно распространено, и люди исправляют это с помощью фильтра нижних частот, но я понятия не имею, как его реализовать.

Итак, сначала у меня есть простая логистическая функция роста для температуры:

 time = np.arrange(0., maxtime, dt)
for t in time:
    temperature = temperature   temperature*50*dt*(1-temperature/150)
  

Теперь я импортирую random и добавляю некоторый шум к сигналу (допустим, это вызвано несовершенным реальным датчиком):

     temperature = temperature   random.randint(-1,1)/10
  

У меня не будет полного кода для PID, но скажем, что наша система может только охлаждать температуру, а не нагревать ее, тогда у меня есть что-то вроде этого:

     if (P I D < 0):
        temperature = temperature   dt*(P I D)
  

Проблема в том, что система сильно реагирует на создаваемый дополнительный шум, мне нужен способ это исправить. Способ кодирования моего общего термина примерно таков (где Kd — константа для производной:

     D = ((previousTemperature - temperature) / dt)*Kd 
  

Обратите внимание, что я не использую error в термине D, потому что в противном случае он чрезвычайно реагирует на внезапное изменение желаемого значения температуры, поэтому наша производная константа, возможно, должна быть отрицательной, чтобы не противодействовать системе.

Мой вопрос в том, есть ли способ предотвратить чрезмерную реакцию производной на шум.