Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Obspy光谱图值错误(noverlap必须小于n)_Python_Valueerror_Spectrogram_Obspy - Fatal编程技术网

Python Obspy光谱图值错误(noverlap必须小于n)

Python Obspy光谱图值错误(noverlap必须小于n),python,valueerror,spectrogram,obspy,Python,Valueerror,Spectrogram,Obspy,我使用obspy处理地震数据,我想得到数据的光谱图。当我将光谱图函数应用于初始数据时,一切正常 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) *点是我数据中的任意点 *初

我使用obspy处理地震数据,我想得到数据的光谱图。当我将光谱图函数应用于初始数据时,一切正常

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)  
*点是我数据中的任意点

*初始采样率为124.99

然后做光谱图

tr2.spectrogram(log=True, title='BW.RJOB ' + str(tr2.stats.starttime))
我得到以下错误:

***ValueError:noverlap必须小于n


为什么会发生这种情况?

经过一番挖掘,我终于找到了问题所在。在插值地震波之后,我在FFT中遇到了重叠长度的问题。通过查看scipy和obspy的光谱图文件:

  • npersegint,每个段的可选长度。默认为“无”,但如果窗口为str或tuple,则设置为256,如果窗口类似于数组, 设置为窗口的长度
  • 新颖的,可选的 线段之间要重叠的点的数量。如果没有,noverlap=nperseg//8。默认为“无”

  • wlen:fft的窗口长度(以秒为单位)。如果此参数太小,计算将花费很长时间。如果没有,则默认为(采样率/100.0)
我的地震道的1000 NPT和FFT的256/8=32窗口导致了问题

这会在

其中n是每个窗口中的数据点数量

因此,每个窗口中的数据点数量大于相邻窗口之间的重叠数量

wlen=10解决了我的问题。因此,代码如下所示:

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