2024-10-01 09:24:02 发布
网友
我应该对NumPynumpy.ndarray中给定的数据应用“二项式低通滤波器”。在
numpy.ndarray
{我在这里找不到什么?这应该是个失败的基本操作,对吧?在
二项式滤波器是一个FIR filter,其系数可以通过从Pascal's triangle中取一行来生成。一个快速的方法是使用numpy.poly1d快速(“快速”在一行代码中不一定是最有效的):
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])
要使用这些系数的一组作为低通滤波器,这些值必须标准化,以便总和为1。np.poly1d([1, 1])**n的系数之和是2**n,因此我们可以用2**n除以上述结果。或者,我们可以通过给出numpy.poly1d[1/2,1/2]而不是[1, 1](即从两个系数的规范化集开始)来生成已经规范化的系数。此函数生成给定n的滤波器系数:
np.poly1d([1, 1])**n
2**n
[1, 1]
例如
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])
要将滤波器应用于信号,请使用convolution。{a4}有几个{a4}函数,包括^卷积。您还可以使用^{}(将系数作为b参数,并设置a=1)。在
b
a=1
对于具体的例子,请查看"Applying a FIR filter",这是我几年前写的一篇短文(从那时起就被其他人编辑过)。请注意,文章中显示的计时可能不是最新的。NumPy和SciPy中的代码都在不断发展。如果现在运行这些脚本,可能会得到完全不同的结果。在
二项式滤波器是一个FIR filter,其系数可以通过从Pascal's triangle中取一行来生成。一个快速的方法是使用
numpy.poly1d
快速(“快速”在一行代码中不一定是最有效的):要使用这些系数的一组作为低通滤波器,这些值必须标准化,以便总和为1。
^{pr2}$np.poly1d([1, 1])**n
的系数之和是2**n
,因此我们可以用2**n
除以上述结果。或者,我们可以通过给出numpy.poly1d
[1/2,1/2]而不是[1, 1]
(即从两个系数的规范化集开始)来生成已经规范化的系数。此函数生成给定n的滤波器系数:例如
要将滤波器应用于信号,请使用convolution。{a4}有几个{a4}函数,包括^卷积。您还可以使用^{} (将系数作为
b
参数,并设置a=1
)。在对于具体的例子,请查看"Applying a FIR filter",这是我几年前写的一篇短文(从那时起就被其他人编辑过)。请注意,文章中显示的计时可能不是最新的。NumPy和SciPy中的代码都在不断发展。如果现在运行这些脚本,可能会得到完全不同的结果。在
相关问题 更多 >
编程相关推荐