scipy.signal.

firwin#

scipy.signal.firwin(numtaps, порог, *, ширина=None, window='hamming', pass_zero=True, scale=True, fs=None)[источник]#

Проектирование КИХ-фильтров с использованием оконного метода.

Эта функция вычисляет коэффициенты КИХ-фильтра. Фильтр будет иметь линейную фазу; он будет типа I, если numtaps нечётное и Тип II, если numtaps является чётным.

Фильтры типа II всегда имеют нулевой отклик на частоте Найквиста, поэтому возникает исключение ValueError, если firwin вызывается с numtaps чётная и имеющая полосу пропускания, правый конец которой находится на частоте Найквиста.

Параметры:
numtapsint

Длина фильтра (количество коэффициентов, т.е. порядок фильтра + 1). numtaps должно быть нечётным, если полоса пропускания включает частоту Найквиста.

порогfloat или 1-D array_like

Частота среза фильтра (выражена в тех же единицах, что и fs) ИЛИ массив частот среза (то есть границ полосы). В первом случае, как число с плавающей запятой, частота среза должна соответствовать точке половинной амплитуды, где затухание будет -6 дБ. Во втором случае, частоты в порог должно быть положительным и монотонно возрастающим между 0 и fs/2. Значения 0 и fs/2 не должен быть включён в порог. Следует отметить, что это отличается от поведения scipy.signal.iirdesign, где частота среза — это точка половинной мощности (-3 дБ).

ширинаfloat или None, опционально

Если ширина не является None, то предполагается, что это приблизительная ширина области перехода (выраженная в тех же единицах, что и fs) для использования в проектировании КИХ-фильтров Кайзера. В этом случае, window аргумент игнорируется.

windowстрока или кортеж строки и значений параметров, опционально

Желаемое окно для использования. См. scipy.signal.get_window для списка окон и требуемых параметров.

pass_zero{True, False, ‘bandpass’, ‘lowpass’, ‘highpass’, ‘bandstop’}, опционально

Если True, усиление на частоте 0 (т.е., «усиление постоянного тока») равно 1. Если False, усиление постоянного тока равно 0. Также может быть строковым аргументом для желаемого типа фильтра (эквивалентно btype в функциях проектирования БИХ-фильтров).

Добавлено в версии 1.3.0: Поддержка строковых аргументов.

scalebool, необязательно

Установите в True для масштабирования коэффициентов так, чтобы частотная характеристика была точно равна единице на определённой частоте. Эта частота равна либо:

  • 0 (постоянная составляющая), если первая полоса пропускания начинается с 0 (т.е. pass_zero равен True)

  • fs/2 (частота Найквиста), если первый полосовой фильтр заканчивается на fs/2 (т.е. фильтр является однополосным фильтром верхних частот); центр первой полосы пропускания в противном случае

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

Частота дискретизации сигнала. Каждая частота в порог должно быть между 0 и fs/2. По умолчанию 2.

Возвращает:
h(numtaps,) ndarray

Коэффициенты длины numtaps КИХ-фильтр.

Вызывает:
ValueError

Если любое значение в порог меньше или равно 0 или больше или равно fs/2, если значения в порог не являются строго монотонно возрастающими, или если numtaps чётное, но полоса пропускания включает частоту Найквиста.

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

firwin2
firwin_2d
firls
minimum_phase
remez

Примеры

Низкочастотный фильтр от 0 до f:

>>> from scipy import signal
>>> numtaps = 3
>>> f = 0.1
>>> signal.firwin(numtaps, f)
array([ 0.06799017,  0.86401967,  0.06799017])

Использовать конкретную оконную функцию:

>>> signal.firwin(numtaps, f, window='nuttall')
array([  3.56607041e-04,   9.99286786e-01,   3.56607041e-04])

Высокочастотный фильтр ('stop' от 0 до f):

>>> signal.firwin(numtaps, f, pass_zero=False)
array([-0.00859313,  0.98281375, -0.00859313])

Полосовой:

>>> f1, f2 = 0.1, 0.2
>>> signal.firwin(numtaps, [f1, f2], pass_zero=False)
array([ 0.06301614,  0.88770441,  0.06301614])

Полосно-заграждающий:

>>> signal.firwin(numtaps, [f1, f2])
array([-0.00801395,  1.0160279 , -0.00801395])

Многополосный (полосы пропускания: [0, f1], [f2, f3] и [f4, 1]):

>>> f3, f4 = 0.3, 0.4
>>> signal.firwin(numtaps, [f1, f2, f3, f4])
array([-0.01376344,  1.02752689, -0.01376344])

Многополосный (полосы пропускания [f1, f2] и [f3,f4]):

>>> signal.firwin(numtaps, [f1, f2, f3, f4], pass_zero=False)
array([ 0.04890915,  0.91284326,  0.04890915])