【发布时间】:2016-07-14 13:20:19
【问题描述】:
我想在 Python 中将 Hilbert spectrum 计算为 3D 图(即 2D 数组)。希尔伯特谱是time x frequency -> amplitude 形式的函数,它为每个时间和频率对分配一个幅度值。
计算频谱的方法将一个或多个二维信号作为输入,每个二维信号有两个分量: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
但是,当有多个输入信号时,这会变得复杂。有没有更数学/简洁的方法来做到这一点?输出应该是一个可用于进一步计算的二维数组。
【问题讨论】: