美文网首页
获取波形任意时间上的振幅

获取波形任意时间上的振幅

作者: SeisBird | 来源:发表于2017-12-05 10:08 被阅读0次

SAC提供的命令可以帮助用户实现地震数据的预处理,但无法实现所有的功能。比如我利用ppk进行震相走时标定之后,由于工作的需要,可能还需要知道该点的振幅大小。这就需要自己能够在别的程序中读写SAC文件,下面是利用Python的实现(你可以随意复制和修改,但我不承担可能造成的风险的责任,所以你最好需要读懂程序,读懂的前提是需要对SAC头段有一定的了解):

#!/usr/bin/env python
# This code is mainly used to output the amplitude of arbitrary time in SAC waveform files
# Usage:
#    python readsac.py dirname
# Example:
#    python readsac.py ~/project/sacfiles/ 
# The source code is made by SeisBird, 2017/12/03. You can copy and modify in your ways. 
# What you should know is that I am not responsibility for any influence on you for your modification.

import os
import re
import sys
import glob
import numpy as np
import matplotlib.pyplot as plt

if len(sys.argv)!=2:
    sys.exit("Usage: python %s dirname\n" %sys.argv[0])

dir=sys.argv[1]
os.chdir(dir)
for fname in glob.glob("*.sac"):

    f=open(fname,'r')
    lines=f.readlines()
    o=float(re.split('[\s]+',lines[1])[3])
    delta=float(re.split('[\s]+',lines[0])[1])
    npts=float(re.split('[\s]+',lines[15])[5])

    o_range=np.arange(o,o+delta*npts,delta)
    o_range_list=o_range.tolist()

    line=30
    data=[]

    while(line<len(lines)):
        data=data+re.split('[\s]+',lines[line])[1:6]
        line+=1


    if len(data)==npts:
        pass
    else:
        data.remove('')

    time_ampl=dict(zip(o_range_list,data))
#   print(time_ampl)
    print(fname)
    while True:
        time=float(input("Please input time: "))
        j=0
    
        if time<0:
            break
        elif time in o_range_list:
            print("amplitude in %f is %s" %(time,time_ampl[time]))
        else:
            while(j<len(o_range_list)):
     
                if(time>o_range_list[j] and time<o_range_list[j+1]):
                    amplitude=(float(time_ampl[o_range_list[j+1]])-float(time_ampl[o_range_list[j]]))/(o_range_list[j+1]-o_range_list[j])*(time-o_range_list[j])+float(time_ampl[o_range_list[j]])
                    print("amplitude in %f is %f" %(time,amplitude))
                    j+=1
                else:
                    j+=1

    plt.plot(o_range_list,data)
    plt.show()

    print("The Next file:")

运行之后,程序读取文件,输入自变量时间,得到振幅数据,如果你想结束进入到下一个文件,只需要输入的时间为负数即可,此时会产生波形的图像,可以检验。
P.S. 这个程序写的匆忙,简单粗暴,着急用,而且我猜应该没多少人感兴趣,写的随便,就当记录了,所以可能会有一些bug和需要优化的地方,欢迎提出,联系我:seisbird@gmail.com

修改历史

  1. 原稿 2017年12月4日

相关文章

  • 获取波形任意时间上的振幅

    SAC提供的命令可以帮助用户实现地震数据的预处理,但无法实现所有的功能。比如我利用ppk进行震相走时标定之后,由于...

  • 音频相关学习

    音频学习: 声波三要素:频率,振幅,波形。 频率:音阶的高低 振幅:响度 波形:音色 频率 频率越高,波长起短,低...

  • 音视频系列---1.1声音

    声音 1.1声波的三要素 声波的三要素是频率、振幅和波形,频率代表音阶的高低,振幅代表响度,波形代表音色。 频率 ...

  • 波形理论

    人的情绪及感受都是呈现波形状态的,有频率,振幅,波峰波谷性质。比如说人平静时的波动状态是稳定的,频率和振幅都是...

  • 日期工具类DateUtils

    常用方法 获取当前日期时间 getYear :获取任意时间的年getMonth :获取任意时间的月ge...

  • 音频特征(3):绘制语谱图

    之前小程介绍过怎么绘制音频的波形图(指振幅图),振幅是声音的一个特征,反应了声音能量的大小。频率,是声音的另一个特...

  • 一、音视频--音频科学基础

    一、音频基础 产生 考物体振动产生的波 三要素 频率:音阶高低振幅:响度(分贝)波形:音色,频率+响度+介质决定频...

  • 音视频-音频采样、量化、编码

    音频 声音是波,靠物体振动产生。 声波三要素:1、频率:表示音阶的高低。2、振幅:表示响度。3、波形:表示音色。在...

  • Python科学计算——任意波形拟合

    任意波形的生成 (geneartion of arbitrary waveform) 在商业,军事等领域都有着重要...

  • 安卓音视频开发(1)

    基础知识声音三要素:频率(声音的高低)、振幅(响度)、波形(音色),低频更容易绕过障碍物,传播的远。数字音频产生:...

网友评论

      本文标题:获取波形任意时间上的振幅

      本文链接:https://www.haomeiwen.com/subject/lmjqixtx.html