Moh*_*mba 5 signal-processing numpy fft dft
我对在 NumPy 中创建 2D hanning、hamming、Blackman 等窗口感兴趣。我知道 NumPy 中存在一维版本的现成函数,例如np.blackman(51)、np.hamming(51)、np.kaiser(51)、np.hanning(51)等。
如何创建它们的 2D 版本?我不确定以下解决方案是否是正确的方法。
window1d = np.blackman(51)
window2d = np.sqrt(np.outer(window1d,window1d))
Run Code Online (Sandbox Code Playgroud)
- -编辑
令人担忧的是,np.sqrt只期望正值,而np.outer(window1d,window1d)肯定会有一些负值。一种解决方案是放弃np.sqrt
有什么建议如何将这些 1d 函数扩展到 2d 吗?
这对我来说看起来很合理。如果您想验证您正在做的事情是否明智,您可以尝试绘制出您正在创建的内容。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 1.5, 51)
y = np.linspace(0, 1.5, 51)
window1d = np.abs(np.blackman(51))
window2d = np.sqrt(np.outer(window1d,window1d))
X, Y = np.meshgrid(x, y)
Z = window2d
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.contour3D(X, Y, Z, 50, cmap='viridis')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z');
plt.show()
Run Code Online (Sandbox Code Playgroud)
这给出了 -
这看起来像一维图的二维概括,看起来像 -
但是,我最初在创建 1d 版本时必须这样做window1d = np.abs(np.blackman(51)),因为否则,您最终会在最终的 2D 数组中得到无法接受的小负值sqrt。
免责声明:我不熟悉这些功能或其通常的用例。但这些图的形状似乎是有道理的。如果这些函数的用例是实际值很重要的地方,那么这可能是错误的。