Hilbert spectrumをPythonで3Dプロット(2D配列)として計算します。ヒルベルトスペクトルは、各時間および周波数の組に振幅値を割り当てる形式time x frequency -> amplitude
の関数である。Pythonで2つの1次元配列(2Dプロット)から2D配列(3Dプロット)を作成します(ヒルベルトスペクトルの計算用)
スペクトルを計算する方法は、それぞれが2つの成分、すなわちおよびtime -> amplitude
を有する1つまたは複数の2D信号を入力として取ります。単一の信号a
を例に取ってください。 y1
は周波数値、y2
は振幅値です。
a_x = [1,2,3]
a_y1 = [1,2,1]
a_y2 = [4,5,6]
私は1つの3Dプロットにこれらの2つの2Dのプロットは、そのような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)))
Iは次にようなグリッドを埋めることになる:
# 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配列でなければなりません。
私はこのことから、実際の2Dアレイを得ることができる場所あなたが私を示していただけますか?私はmatplotlibでポイントをプロットすることができることを知っていましたが、プロットせずに2D配列を取得する必要があります。申し訳ありませんが私の質問が十分に明確でない場合。 – Irondwarf
私はDelaunay三角測量のようなものを提供しました。これは 'scipy.spatial.Delaunay'から得ることができます。あなたが得るデータ構造は2D配列ではありません。これはグラフです(https://en.wikipedia.org/wiki/Graph_(abstract_data_type)を参照)。 –
申し訳ありませんが、グラフから2D配列を生成する方法はわかりません。たぶん私は三角測量の理解の欠如です。 – Irondwarf