簡體   English   中英

Obspy 頻譜圖 ValueError(noverlap 必須小於 n)

[英]Obspy spectrogram ValueError (noverlap must be less than n)

我使用 obspy 處理地震數據,我想為我的數據獲取頻譜圖。 當我將頻譜圖 function 應用於初始數據時,一切正常。

st.spectrogram(log=True, title='BW.RJOB ' + str(st[0].stats.starttime))

但是,當我對數據進行切片和插值時

tr = st[0]
sr=4.9999
tr2 = tr.slice(point - 20, point + 180)

tr2.interpolate(sampling_rate=sr)  

*point 是我數據中的任意點

*初始采樣率為 124.99

然后執行頻譜圖

tr2.spectrogram(log=True, title='BW.RJOB ' + str(tr2.stats.starttime))

我收到以下錯誤:

*** ValueError:noverlap 必須小於 n

為什么會這樣?

經過一番挖掘,我設法找出問題所在。 在對地震波進行插值后,我在 FFT 中遇到了重疊長度問題。 通過查看來自 scipy 和 obspy 的頻譜圖文檔:

scipy

  • npersegint,可選 每段的長度。 默認為 None,但如果 window 是 str 或 tuple,則設置為 256,如果 window 是 array_like,則設置為 window 的長度。
  • noverlapint,可選段之間重疊的點數。 如果沒有,noverlap = nperseg // 8。默認為無

討厭的

  • wlen:Window fft 的長度(以秒為單位)。 如果這個參數太小,計算將永遠進行下去。 如果沒有,則默認為 (samp_rate/100.0)

我的地震軌跡的 1000 npts 和 FFT 的 256/8=32 window 導致了這個問題。

這會引發源代碼中的錯誤

if noverlap >= n:
    raise ValueError('noverlap must be less than n')

其中 n 是每個 window 中的數據點數。

因此每個 window 中的數據點數大於相鄰 windows 之間的重疊數。

wlen=10解決了我的問題。 所以現在的代碼如下:

tr2.spectrogram(log=True, title='Spectrogram'),wlen=10)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM