![](/img/trans.png)
[英]Focal loss: ValueError: batch_dims = 1 must be less than rank(indices) = 1
[英]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 的頻譜圖文檔:
- 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.