在Python中使用两个1D阵列(2D绘图)创建2D阵列(3D绘图)(用于计算希尔伯特谱)

时间:2016-07-14 13:20:20

标签: python numpy spectrum

我想在Python中将Hilbert spectrum计算为3D绘图(即2D数组)。希尔伯特谱是time x frequency -> amplitude形式的函数,它为每个时间和频率对分配一个幅度值。

计算频谱的方法将一个或多个2D信号作为输入,每个信号具有两个分量:time -> frequencytime -> 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数组,可以用于进一步的计算。

1 个答案:

答案 0 :(得分:0)