0

以下に示す周波数時間スペクトログラム プロットを作成しました。20 秒から表示される高周波がより目立つように、カラー スケールを編集します。カラースケールの下端(青)の増分を小さくするとこれが達成されると思いますが、その方法はわかりません。どんな助けでも素晴らしいでしょう!

これが私がこれまでに持っているものです:

import numpy as np
import matplotlib.pyplot as plt
from obspy.core import read
from obspy.signal.tf_misfit import cwt
import pylab

tr = read("whole.sac")[0]
npts = tr.stats.npts
dt = tr.stats.delta
t = np.linspace(0, dt * npts, npts)
f_min = 1
f_max = 10

scalogram = cwt(tr.data, dt, 8, f_min, f_max)

fig = plt.figure()
ax1 = fig.add_axes([0.1, 0.1, 0.7, 0.60])
ax2 = fig.add_axes([0.1, 0.75, 0.75, 0.2])
ax3 = fig.add_axes([0.83, 0.1, 0.03, 0.6])
img = ax1.imshow(np.abs(scalogram)[-1::-1], extent=[t[0], t[-1], f_min, f_max],
          aspect='auto', interpolation="nearest")

ax1.set_xlabel("Time after %s [s]" % tr.stats.starttime)
ax1.set_ylabel("Frequency [Hz]")
ax1.set_yscale('linear')
ax2.plot(t, tr.data, 'k')
pylab.xlim([30,72])

fig.colorbar(img, cax=ax3)

plt.show()

スペクトログラム

4

1 に答える 1

0

他のカラーマップを試すか、このレシピに従って独自のものを作成できます。

または、データをフィルタリングして、特定のしきい値 (たとえば 60) を超えるすべての値をしきい値に設定することもできます。これは、対象範囲のカラーマップの範囲全体を使用します。これを行うために簡単に使用できますnp.clip()

そう...

np.abs(scalogram)[-1::-1]

になる

np.clip(np.abs(scalogram)[-1::-1], 0, 100)

0 から 100 の間でクリップします。

于 2014-03-16T16:52:41.617 に答える