需要更高的精度才能用ObsPy保存到SEGY

2024-09-29 01:21:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python的ObsPy以SEG-Y格式保存数据。我对数据类型有问题。我需要比float32更高的精度,因为我有非常高的采样率(10毫秒/秒),所以时间间隔只有0.1微秒。同样,我的高截频率是20MHz,这超出了float32(20000000)的容量。当我写入头信息时,这些值将被默认值(1.0或0.0)覆盖。这包括SEG-Y标头和通用ObsPy标头。可以用float64保存吗?或者,有没有另外一个诀窍来获得SEG-Y所需的精度?据我所知,数据编码只允许float32。在

以下是基本代码,并在生成错误的行上添加注释:

    import numpy as np
    from numpy import matrix
    import sys
    import getopt
    import time        
    from obspy import read, Trace, Stream, UTCDateTime
    from obspy.core.trace import Stats
    from obspy.core import AttribDict
    from obspy.segy.segy import SEGYTraceHeader, SEGYBinaryFileHeader
    from obspy.segy.core import readSEGY

    dataStream=Stream()
    averages = np.random.rand(10)
    data = np.require(averages, dtype='float32')

    trace = Trace(data=data)
    stats = Stats()

    trace.stats.starttime = UTCDateTime()

    if not hasattr(trace.stats, 'segy.trace_header'):
        trace.stats.segy = {}

    trace.stats.segy.trace_header =  SEGYTraceHeader()

    trace.stats.segy.trace_header.lag_time_B = 154
    trace.stats.segy.trace_header.scalar_to_be_applied_to_times = -4
    trace.stats.segy.trace_header.sample_interval_in_ms_for_this_trace = 10 #100 microseconds *10-4 = 0.01 us:  shows up as 1.0 when I read the file.
    trace.stats.segy.trace_header.high_cut_frequency = 20000000 #error: number to large with 20MHz
    trace.stats.segy.trace_header.number_of_samples_in_this_trace = len(trace)

    trace.stats.delta = 0.1*10**-6 # this will work for 1 us, but not 0.1 us!!

    dataStream.stats = AttribDict()
    dataStream.stats.binary_file_header = SEGYBinaryFileHeader()
    dataStream.stats.binary_file_header.number_of_data_traces_per_ensemble = 1
    dataStream.stats.binary_file_header.number_of_samples_per_data_trace = len(trace)

    dataStream.write('Test.sgy', format='SEGY', data_encoding=1, byteorder=sys.byteorder)

Tags: fromcoreimportnumberdatastatsnptrace
1条回答
网友
1楼 · 发布于 2024-09-29 01:21:29

在SEG-Y标准中,采样间隔必须指定为以微秒为单位的整数。如果低于1微秒,将超出SEG-Y格式的范围。在

你打算怎么处理这些数据?可能有更好的选择(例如DZT格式)。在

相关问题 更多 >