首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要更高的精度才能用ObsPy保存到SEG

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

Stack Overflow用户
提问于 2014-03-23 21:41:59
回答 1查看 1.1K关注 0票数 1

我试图使用Python的ObsPy以SEG格式保存数据。我在数据类型方面有问题。我需要比float32更高的精度,因为我有一个很高的采样率(10 MSamples/秒),所以时间间隔只有0.1微秒。同样,我的high_cut_frequency是20 the,这超出了float32 (20000000)的容量。当我编写头信息时,这些值会被默认值(1.0或0.0)覆盖。这与SEG头和通用ObsPy头一起使用。可以在float64中保存吗?或者,还有另一个技巧来获得我所需要的SEG的精度?据我所收集的,数据编码只允许float32。

下面是基本代码,在生成错误的行上有注释:

代码语言:javascript
复制
    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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-27 22:35:16

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22597478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档