#this python file is used to read SAC file
站在用户的角度思考问题,与客户深入沟通,找到海门网站设计与海门网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站制作、成都做网站、企业官网、英文网站、手机端网站、网站推广、域名申请、网站空间、企业邮箱。业务覆盖海门地区。
import os
import sys
import subprocess
import glob
from obspy.core import read
from PyQt5.QtWidgetsimport *
from PyQt5.QtGuiimport *
from PyQt5.QtCoreimport *
from PyQt5import QtCore, QtGui, QtWidgets
'''import os 是导入标准库os,利用其中的API。
sys模块包含了与Python解释器和它的环境有关的函数。
glob是python自带的一个文件操作模块,用它查找符合目的的文件,类似于Windows下的文件搜索,支持通配符操作
subprocess允许创建一个新的进程让其执行另外的程序,并与它进行通信,获取标准的输入、标准输出、标准错误以及返回码等
'''
def run(path):
# path = QtWidgets.QFileDialog.getExistingDirectory(None, "Select File Directory to Save File", "")
fileName = os.listdir(path)
os.chdir(path)
os.putenv("SAC_DISPLAY_COPYRIGHT", '0')
for namein fileName:
# name = i
#for file in glob.glob("*.SAC"):
#glob.glob是匹配所有符合条件的文件,并将其以list的形式返回
#os.putenv("SAC_DISPLAY_COPYRIGHT", '0') #os.putenv(‘环境变量名称’, ‘环境变量值’)
#p = subprocess.Popen(['sac'], stdin=subprocess.PIPE)#Popen表示调用sac
#stdin指向键盘输入,standard input
#Python 3 利用 subprocess 实现管道( pipe )交互操作读/写通信
# s = "r " + name + " \n" ###这里应该是传入某个文件,所以应该有个读取文件的按钮
# s += "qdp off\n"
# s += "ch allt (0 - 1,o) iztype IO \n" #修改发震时刻为零
# s += "rmean; rtrend; taper \n" #去均值,去线性趋势,去尖灭
# s += "bp c 0.05 10 n 4 p 2 \n" #带通滤波
# s += "w over\n"
# s += "r *BHN *BHE \n" #分量旋转,读入N、E分量,rot并修改头段变量
# s += "rotate to gcp"
# s += "w .BHR .BHT"
# s += "r *.BHR\n"
# s += "ch KCMPNM BHR\n"
# s += "w over\n"
# s += "r *.BHT\n"
# s += "ch KCMPNM BHT\n"
# s += "w over\n"
# s += "p \n"
# s += "saveimg 2009.ps\n"
# s += "q\n"
s ="r " + name +" \n"
#s += "ppk p 3 a m\n"
s +="w over\n"
s +="q \n"
# p.communicate(s.encode()) #通过p.communicate() 将命令s.encode() 传递给sac,实现sac的操作
subprocess.Popen(['sac'], stdin=subprocess.PIPE).communicate(s.encode())
对滤波的 总结 : 对特定频率进行有效提取,并对提取部分进行特定的处理(增益,衰减,滤除)的动作被叫做滤波。
最常用的滤波器类型有三种: 通过式(Pass),搁架式(Shelving)和参量式(Parametric)。 滤波器都有一个叫 参考频率(Reference Frequency)的东西 ,在不同类型的滤波器中,具体的叫法会有所不同。
通过式滤波器可以让参考频率一侧的频率成分完全通过该滤波器,同时对另一侧的频率成分做线性的衰减,就是,一边让通过,一边逐渐被滤除。在信号学中,通过的区域被称为通带,滤除的区域被叫做阻带,在通过式滤波器中,参考频率通常被称为截止频率。
高通滤波器(high-pass filters):让截止频率后的高频区域通过,另一侧滤除,低通滤波器(low-pass filters):让截止频率前的低频区域通过,另一侧滤除,通
以下是高通滤波器与低通滤波器的核心参数:
截止频率(Cut-off frequency) :决定了通带(通过的频率部分)与阻带(阻止的频率部分)的分界曲线,截止频率的位置并非是在曲线开始弯曲的那个点,而是在-3dB的位置。以图2左侧的高通滤波器为例,截止频率点之上的部分频率并没有全部被通过,而是有个曲线,在曲线回归平直后其频率才被完全通过。至于为什么要将-3dB的位置设为截止频率,是因为-3dB对于滤波器的设计而言是个非常重要的位置,如果设为其他位置,则会让通过式滤波器的设计变得尤为复杂。
斜率(Slope) :表示的是通带与阻带的分界曲线的倾斜程度,也就是说斜率决定了分界曲线是偏向平缓的,还是偏向垂直的,斜率越大(更陡峭),人工处理的痕迹就越明显。斜率的单位为dB/oct,中文称为分贝每倍频程。虽然绕口,但其实很简单,如6dB/oct,意思为一个倍频程的距离会产生6dB的衰减,数字滤波器常见的斜率选择有6dB/oct,12dB/oct,18dB/oct,24dB/oct,30dB/oct等等(图3)。
scipy.signal.filtfilt(b, a, x, axis=-1, padtype='odd', padlen=None, method='pad', irlen=None)
scipy.signal.butter(N, Wn, btype='low', analog=False, output='ba')
这里假设采样频率为1000hz,信号本身最大的频率为500hz,要滤除10hz以下和400hz以上频率成分,即截至频率为10hz和400hz,则wn1=2*10/1000=0.02,wn2=2*400/1000=0.8。Wn=[0.02,0.8]
有的,在numpy包中
import numpy as np
dat = [1,3,5,6,7,2,4]
med = np.median(dat) # med=4.0
SciPy提供了firwin用窗函数设计低通滤波器,firwin的调用形式如下:
firwin(N, cutoff, width=None, window='hamming')
其中N为滤波器的长度;cutoff为以正规化的频率;window为所使用的窗函数。
T=wpdec(y,5,'db40');
%信号y进行波包解层数5T波树plot看
a10=wprcoef(T,[1,0]);
%a10节点[1,0]进行重构信号貌似没层重构说吧能某层某节点进行重构节点编号波树
%以下为滤波程序(主要调节参数c的大小)
c=10;
wn=0.1;
fs=50000; %采样频率;
b=fir1(c,wn/(fs/2),hamming(c+1));
y1=filtfilt(b,1,y);%对y滤波。
borderType= None)函数
此函数利用高斯滤波器平滑一张图像。该函数将源图像与指定的高斯核进行卷积。
src:输入图像
ksize:(核的宽度,核的高度),输入高斯核的尺寸,核的宽高都必须是正奇数。否则,将会从参数sigma中计算得到。
dst:输出图像,尺寸与输入图像一致。
sigmaX:高斯核在X方向上的标准差。
sigmaY:高斯核在Y方向上的标准差。默认为None,如果sigmaY=0,则它将被设置为与sigmaX相等的值。如果这两者都为0,则它们的值会从ksize中计算得到。计算公式为:
borderType:像素外推法,默认为None(参考官方文档 BorderTypes
)
在图像处理中,高斯滤波主要有两种方式:
1.窗口滑动卷积
2.傅里叶变换
在此主要利用窗口滑动卷积。其中二维高斯函数公式为:
根据上述公式,生成一个3x3的高斯核,其中最重要的参数就是标准差 ,标准差 越大,核中心的值与周围的值差距越小,曲线越平滑。标准差 越小,核中心的值与周围的值差距越大,曲线越陡峭。
从图像的角度来说,高斯核的标准差 越大,平滑效果越不明显。高斯核的标准差 越小,平滑效果越明显。
可见,标准差 越大,图像平滑程度越大
参考博客1:关于GaussianBlur函数
参考博客2:关于高斯核运算