Фильтр верхних частот с использованием scipy и контроля

Я пытаюсь создать несколько цифровых фильтров, но в настоящее время у меня есть техническая проблема. Я сузил его до создания фильтра верхних частот. Вот минимальный пример построения фильтра Баттерворта верхних частот 3-го порядка.

          import numpy as np
    import scipy.signal as sig
    import control

    mydt = 0.25e-3
    hpfilter_signal = sig.butter(3, 2., btype="highpass", fs=1/mydt)
    hpfilter_control = control.tf(*hpfilter_signal, mydt)

    dump = control.bode(hpfilter_control,  Hz=True, label="", wrap_phase=True)

На этом графике Боде мы видим много «шума» по амплитуде и фазе на низкочастотном конце. Я не знаю, происходит ли это от scipy.signal.butter или от реализации функции передачи управления python. Это похоже на ошибки численного квантования, но кажется, что они появляются довольно рано. На практике при моделировании системы (которая должна работать совместно с двойным интегратором) во временной области система расходится. Является ли это принципиальным ограничением таких фильтров? Это ошибка? Как я могу обойти это? Заранее спасибо.

Проблема возникает в основном с полосовыми фильтрами и фильтрами верхних частот порядка 3 и выше. Преобразование в ряд передаточных функций второго порядка, кажется, немного улучшает, но проблема остается.

0 ответов

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