Биномиальный фильтр - это КИХ-фильтр , коэффициенты которого можно сгенерировать, взяв строку из Треугольника Паскаля .Быстрый способ («быстрый», как в одной строке кода - не обязательно самый эффективный) - с помощью numpy.poly1d
:
In [15]: np.poly1d([1, 1])**2
Out[15]: poly1d([1, 2, 1])
In [16]: np.poly1d([1, 1])**3
Out[16]: poly1d([1, 3, 3, 1])
In [17]: np.poly1d([1, 1])**4
Out[17]: poly1d([1, 4, 6, 4, 1])
Чтобы использовать набор этих коэффициентов в качестве фильтра нижних частот,значения должны быть нормированными, поэтому сумма равна единице.Сумма коэффициентов np.poly1d([1, 1])**n
равна 2**n
, поэтому мы можем разделить полученный результат на 2**n
.В качестве альтернативы, мы можем сгенерировать коэффициенты, которые уже нормализованы, задав numpy.poly1d
[1/2, 1/2] вместо [1, 1]
(т.е. начать с нормализованного набора из двух коэффициентов).Эта функция генерирует коэффициенты фильтра для заданного n:
def binomcoeffs(n):
return (np.poly1d([0.5, 0.5])**n).coeffs
Например,
In [35]: binomcoeffs(3)
Out[35]: array([0.125, 0.375, 0.375, 0.125])
In [36]: binomcoeffs(5)
Out[36]: array([0.03125, 0.15625, 0.3125 , 0.3125 , 0.15625, 0.03125])
In [37]: binomcoeffs(15)
Out[37]:
array([3.05175781e-05, 4.57763672e-04, 3.20434570e-03, 1.38854980e-02,
4.16564941e-02, 9.16442871e-02, 1.52740479e-01, 1.96380615e-01,
1.96380615e-01, 1.52740479e-01, 9.16442871e-02, 4.16564941e-02,
1.38854980e-02, 3.20434570e-03, 4.57763672e-04, 3.05175781e-05])
К применить фильтр к сигналу, использовать свертка .Доступно несколько дискретных функций свертки, включая numpy.convolve
, scipy.signal.convolve
, scipy.ndimage.convolve1d
.Вы также можете использовать scipy.signal.lfilter
(дать коэффициенты в качестве аргумента b
и установить a=1
).
Для конкретных примеров посмотрите "Применение FIRfilter ", небольшая статья, которую я написал несколько лет назад (и с тех пор редактировал другие).Обратите внимание, что сроки, показанные в этой статье, могут быть не актуальными.Код в NumPy и SciPy постоянно развивается.Если вы запустите эти сценарии сейчас, вы можете получить совершенно другие результаты.