Python环境下基于小波变换和机器学习的地震信号处理和识别

地震信号识别是判定地震类型的首要工作。 近年来,地震信号自动识别问题多集中在天然地 震与人工爆破的识别上,主要从信号时频分析、震相和波形特征等角度展开研究,基于大量数据的经验总结,可以实现较好的地震信号分类效果。 然而我国东部经济发达地区不仅地震偏少、震级偏小,而且存在人工爆破、塌陷等干扰,在样本量较小的情况下,需要进一步研究有效的地震识别方法,力求解决其他方法存在的样本库过大和局部地区样本不足的问题,提高地震监测、震后应急与地震科学研究的效率。

本文在Python环境下,利用小波变换和机器学习进行地震信号处理和识别。

关于python的集成环境,我采用的Winpython,IDE为spyder(类MATLAB界面)。

 

winpython脱胎于pythonxy,面向科学计算兼顾数据分析与挖掘;Anaconda主要面向数据分析与挖掘方面,在大数据处理方面有自己特色的一些包;winpython强调便携性,被做成绿色软件,不写入注册表,安装其实就是解压到某个文件夹,移动文件夹甚至放到U盘里在其他电脑上也能用;Anaconda则算是传统的软件模式。winpython是由个人维护;Anaconda由数据分析服务公司维护,意味着Winpython在很多方面都从简,而Anaconda会提供一些人性化设置。Winpython 只能在windows上用,Anaconda则有linux的版本。

抛开软件包的差异,我个人也推荐初学者用winpython,正因为其简单,问题也少点,由于便携性的特点系统坏了,重装后也能直接用。

基于小波变换和机器学习的地震信号处理和识别项目中所使用的模块如下:

import pandas as pd
import numpy as np
import pywt
import scipy as sp
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

需要安装小波分析模型,即pip install pywt

部分代码如下

#导入数据
df = pd.read_pickle('data.pkl')
df.head()
#数据转换
df['fMag'] = df['Mag.']
df['Mag.'] = df['Mag.'].apply(lambda x :int(x) if (x-int(x)) < 0.5 else int(x)+1)
#删除不需要的列
df.drop(columns=['Date(yyyy/mm/dd)', 'Time(UTC)', 'Time', 'unit'], inplace=True)
df.dropna(inplace=True)
df.head()
#训练集划分
train, test = train_test_split(df, test_size=0.3, random_state=38)
print('train data shape: ', train.shape)
print('test data shape:  ', test.shape)
#训练集
train
#波形数据转换为矩阵,便于训练
train_wave_mat = []
for i in train['wave']:
    i = i.tolist()
    train_wave_mat.append(i)
test_wave_mat = []
for i in test['wave']:
    i = i.tolist()
    test_wave_mat.append(i)
    

#绘制一些样本
fig, axs = plt.subplots(3, 3, figsize=(15, 10))
plt.subplots_adjust(hspace=0.5, wspace=0.2)
n = 0
for i in range(3):
    for j in range(3):
        axs[i,j].plot(train_wave_mat[n], color='black')
        axs[i,j].set_title('train wave sample ' + str(n+1))
        axs[i,j].set_xlabel('time')
        axs[i,j].set_ylabel('amplitude')
        axs[i,j].set_ylim(0, 0.4)
        axs[i,j].set_xticks([])
        n += 1

出图如下:

 

 

 

 

 

 

 

代码如下

mbd.pub/o/bread/mbd-Yp2bl5xt

擅长现代信号处理(改进小波分析系列,改进变分模态分解,改进经验小波变换,改进辛几何模态分解等等),改进机器学习,改进深度学习,机械故障诊断,改进时间序列分析(金融信号,心电信号,振动信号等) 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值