scipy.signal.

butter#

scipy.signal.butter(N, Wn, btype='low', аналог=False, вывод='ba', fs=None)[источник]#

Проектирование цифровых и аналоговых фильтров Баттерворта.

Спроектировать цифровой или аналоговый фильтр Баттерворта N-го порядка и вернуть коэффициенты фильтра.

Параметры:
Nint

Порядок фильтра. Для фильтров 'bandpass' и 'bandstop', результирующий порядок финальной матрицы секций второго порядка ('sos') 2*N, с N количество биквадратных секций желаемой системы.

Wnarray_like

Критическая частота или частоты. Для фильтров нижних и верхних частот Wn является скаляром; для полосовых и режекторных фильтров Wn является последовательностью длины 2.

Для фильтра Баттерворта это точка, в которой усиление падает до 1/sqrt(2) от полосы пропускания (точка «-3 дБ»).

Для цифровых фильтров, если fs не указан, Wn единицы измерения нормализованы от 0 до 1, где 1 — частота Найквиста (Wn следовательно, в полуциклах / выборка и определяется как 2*критические частоты / fs). Если fs указан, Wn в тех же единицах, что и fs.

Для аналоговых фильтров, Wn является угловой частотой (например, рад/с).

btype{‘lowpass’, ‘highpass’, ‘bandpass’, ‘bandstop’}, необязательно

Тип фильтра. По умолчанию — 'lowpass'.

аналогbool, необязательно

Если True, возвращает аналоговый фильтр, в противном случае возвращается цифровой фильтр.

вывод{‘ba’, ‘zpk’, ‘sos’}, опционально

Тип вывода: числитель/знаменатель ('ba'), полюс-ноль ('zpk') или секции второго порядка ('sos'). По умолчанию 'ba' для обратной совместимости, но 'sos' следует использовать для фильтрации общего назначения.

fsfloat, опционально

Частота дискретизации цифровой системы.

Добавлено в версии 1.2.0.

Возвращает:
b, aСоздать LinearOperators

Числитель (b) и знаменатель (a) полиномы IIR-фильтра. Возвращается только если output='ba'.

z, p, kndarray, ndarray, float

Нули, полюсы и коэффициент усиления системы передаточной функции фильтра IIR. Возвращается только если output='zpk'.

sosndarray

Представление фильтра IIR в виде звеньев второго порядка. Возвращается только если output='sos'.

Смотрите также

buttord, buttap

Примечания

Фильтр Баттерворта имеет максимально плоскую частотную характеристику в полосе пропускания.

The 'sos' выходной параметр был добавлен в версии 0.16.0.

Если форма передаточной функции [b, a] запрошено, могут возникнуть численные проблемы, поскольку преобразование между корнями и коэффициентами полинома является численно чувствительной операцией, даже для N >= 4. Рекомендуется работать с SOS представлением.

Предупреждение

Проектирование фильтров БИХ высокого порядка и узкополосных в форме передаточной функции может привести к нестабильной или некорректной фильтрации из-за проблем с численной точностью чисел с плавающей запятой. Рекомендуется проверять характеристики выходного фильтра. freqz или проектирования фильтров с секциями второго порядка через output='sos'.

Примеры

Спроектировать аналоговый фильтр и построить его частотную характеристику, показывая критические точки:

>>> from scipy import signal
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> b, a = signal.butter(4, 100, 'low', analog=True)
>>> w, h = signal.freqs(b, a)
>>> plt.semilogx(w, 20 * np.log10(abs(h)))
>>> plt.title('Butterworth filter frequency response')
>>> plt.xlabel('Frequency [rad/s]')
>>> plt.ylabel('Amplitude [dB]')
>>> plt.margins(0, 0.1)
>>> plt.grid(which='both', axis='both')
>>> plt.axvline(100, color='green') # cutoff frequency
>>> plt.show()
../../_images/scipy-signal-butter-1_00_00.png

Сгенерировать сигнал, состоящий из 10 Гц и 20 Гц, с частотой дискретизации 1 кГц

>>> t = np.linspace(0, 1, 1000, False)  # 1 second
>>> sig = np.sin(2*np.pi*10*t) + np.sin(2*np.pi*20*t)
>>> fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True)
>>> ax1.plot(t, sig)
>>> ax1.set_title('10 Hz and 20 Hz sinusoids')
>>> ax1.axis([0, 1, -2, 2])

Спроектировать цифровой высокочастотный фильтр на 15 Гц для удаления тона 10 Гц и применить его к сигналу. (Рекомендуется использовать формат секций второго порядка при фильтрации, чтобы избежать численной ошибки с передаточной функцией (ba) формат):

>>> sos = signal.butter(10, 15, 'hp', fs=1000, output='sos')
>>> filtered = signal.sosfilt(sos, sig)
>>> ax2.plot(t, filtered)
>>> ax2.set_title('After 15 Hz high-pass filter')
>>> ax2.axis([0, 1, -2, 2])
>>> ax2.set_xlabel('Time [s]')
>>> plt.tight_layout()
>>> plt.show()
../../_images/scipy-signal-butter-1_01_00.png