我想在Python中将Hilbert spectrum计算为3D绘图(即2D数组)。希尔伯特谱是time x frequency -> amplitude
形式的函数,它为每个时间和频率对分配一个幅度值。
计算频谱的方法将一个或多个2D信号作为输入,每个信号具有两个分量:time -> frequency
和time -> amplitude
。以单个信号a
为例。 y1
将是频率值,y2
幅度值。
a_x = [1,2,3]
a_y1 = [1,2,1]
a_y2 = [4,5,6]
我想将这两个2D图转换为一个3D图,例如X x Y1 -> Y2
。
a(1,1) = 4
a(2,2) = 5
a(3,1) = 6
现实生活中的价值观将是浮动的。到目前为止,我的解决方案是在y1
中取最大值和最小值,并以预定的精度(例如0.01)初始化网格。在这个例子中:
y1_max = np.amax(a_y1)
y1_min = np.amin(a_y2)
# Initialise 2d array of zeros
hilbert_spectrum = np.zeros((len(a_x), len(np.linspace(y1_min, y1_max, 0.01)))
然后我会填写网格:
# Fit the old y1 values into new grid
y1_grid = np.floor((a_y1 - y1_min) / 0.01).astype(np.int)
# Fill the 2D hilbert spectrum
hilbert_spectrum[1, y1_grid[0]] = 4
hilbert_spectrum[2, y1_grid[1]] = 5
hilbert_spectrum[3, y1_grid[2]] = 6
然而,当有多个输入信号时,这会变得复杂。有没有更多数学/简洁的方法来做到这一点?输出应该是一个2D数组,可以用于进一步的计算。