作者简介:李壮(1985-)男,本科,工程师,主要从事地震监测与预警工作。E-mail:308786866@qq.com
通信作者:高亮(1982-)男,研究生,高级工程师,主要从事地震监测与预警工作。E-mail:176037242@qq.com
1.广东省地震局 韶关地震监测中心站,广东 韶关 512000;2.广东省地震局 广东地震台,广州 510070
1.Shaoguan Seismic Monitoring Center Station , Guangdong Earthquake Agency , Shaoguan 512000, China ;2.Guangdong Seismic Station , Guangdong Earthquake Agency , Guangzhou 510070, China
Matlab platform;VP broadband inclinometer;Real-time monitoring;Power spectral density;Multi-thread
DOI: 10.13512/j.hndz.2025.03.04
VP宽频带倾斜仪是一种高精度垂直摆倾斜仪,具有高分辨力、高精度的特点,也是地倾斜连续观测的重要手段之一,可用于监测地壳形变相对运动和固体潮汐的动态变化,为地震孕育过程研究提供实测数据[1]。广东省地震前兆台网共有4套VP宽频带倾斜仪,在日常监测中出现了数据超量程、雷击干扰、电源故障等问题,在中心站业务处理中,工作人员均隔日收取数据,造成故障处置滞后,导致有价值前兆数据缺失。因此,对VP宽频带倾斜仪观测数据进行多台实时监控,既方便工作人员进行多台数据对比分析,也能使工作人员及时发现仪器问题,提高台站VP宽频带倾斜仪数据日常运行维护效率。
另外,在VP宽频带倾斜仪日常观测中会受到各类强自然现象(风、雨、雷电),非自然影响(人及器械活动)及仪器本身器件等干扰,上述干扰对精准获取观测数据造成很大影响,因此,了解仪器正常背景噪声及不同干扰特征十分重要[2]。PSD (power spectrum density)作为一种对于随机信号频率域分析方法手段,通过对频率的归一化处理, PSD能很好的表征随机信号功率谱密度在频率域的分布情况,其在地震计、重力仪等观测中得到了很好的应用。近几年,已有很多学者将PSD方法拓展到形变仪器的观测研究中,通过对VP垂直摆倾斜仪数据进行PSD方法处理,将各类干扰与正常背景观测频率域特征加以甄别、分类,总结搞清仪器所在区域正常观测背景及干扰特征,进而更准确辨析仪器数据前兆异常,服务于会商工作,取得了很好的效果[3]。
在地震监测预报上,有不少学者针对工作需要进行了特定软件开发,如海南琼中地震台以VB作为编程语言,对数据库文件ibdata1实时时间为监测对象,当波形记录停止时,数据库文件记录停止,以此来监测波形断记[4]。宝昌台利用python语言开发了VP摆倾斜仪单台数据实时监控报警短信提醒软件[5],陈彩虹等应用Visual Studio 2010开发工具,开发福建省地震前兆台网运行监控日报自动编辑系统[6],上述软件集中于监控、报警、可视化及日志辅助生成等某一方面,少有将仪器数据监控与常用数据分析方法集成一体的。本文将数据监控与数据计算分析结合,针对VP宽频带倾斜仪开发界面化、实用化、操作简单的时域监控及频域自动分析计算一体化集成软件,既能提高日常VP宽频带倾斜仪前兆数据日常运行维护效率,又有助于基层台站工作人员认识VP宽频带倾斜仪正常背景和干扰特征,动态了解观测场地背景噪声情况,为基层中心站工作人员开展日常监测及区域前兆研判提供工具。
Matlab是由MathWorks公司推出的一款强大的数值计算软件,是数值计算、符号运算和图形处理等多种功能的强有力实现工具[7],在软件界面化、网络编程、信号处理、数据可视化等方面Matlab提供了多种对应函数库供使用者选择[8]。本软件在功能上,需要实现时域监控及频域PSD计算功能,时域监控主要由数据获取、数据流可视化显示、网络中断报警、数据异常报警等几部分组成,频域PSD计算是指软件自动进行观测数据功率谱密度计算。因此,在软件设计起始,就要考虑仪器数据监控与数据频域计算分析互不影响,即软件自动进行观测数据频域PSD计算不会导致仪器数据监控循环的中断,从这个角度讲,需要采用多线程编程的方式实现数据监控与数据分析任务并行处理,这也是本软件设计的基本思路。在具体软件编程实现中,软件通过Matlab中system函数调用系统ping命令监控VP倾斜仪网络状态,利用Matlab网络函数webread实时读取各台VP倾斜仪两水平分量观测数据,对读取数据流进行绘图可视化显示,对于VP宽频带倾斜仪发生故障,可设置阈值判断,数据值超阈值,软件立即发出字幕及声音报警。在多线程并行上,软件通过Matlab 中并行计算工具箱(Parallel Computing Toolbox)来实现并行功率谱密度计算,在结果保存上,软件可以通过Matlab中各类读写函数将数据波形图件及功率谱密度结果图件存档保存,便于日后工作人员研究总结。
当软件启动实时后,首先自动读取台站参数、谱计算参数、地理底图信息等配置文件等,台站参数包括VP倾斜仪台站经纬度、VP倾斜仪IP地址、用户名、密码、报警阈值等信息,地理底图指各省地图文件、谱计算参数是指功率谱密度自动计算预设的分段窗长、重叠点数、FFT点数等参数。配置文件可在软件中预先通过文本控件写入保存指定文件夹内。读取参数信息后,软件开始连接站点仪器,进入线程一通过调用网络ping命令,返回信息判断网络状态,如果网络中断,则反馈网络不通,需要检查,如果网络处于连通状态,则利用Matlab中网络函数webread,实时获取各台VP仪器数据,当获取数据失败或获取数据超阈值等情况即时报警,在故障排除数据正常后,软件解除报警。线程二通过多线程机制parfeval函数执行PSD计算代码在后台静默执行,待至设定时刻自动下载前日秒数据写入指定电脑盘符文件夹存档并计算产出前日数据PSD功率谱密度,以上线程一与线程二均持续进行,实现连续不间断VP宽频带倾斜仪监控及每日数据PSD功率谱密度计算。同时软件也能进行手动选择读入多日观测数据整合后进行功率谱密度计算,不过该方式需要强制中断主线程循环后进行,整个软件运行流程图如下图1所示。
图1 程序运行流程图Fig.1 Program operation flowchart
功率谱密度(PSD)分析方法是在频域内对信号进行定量分析,是研究分析信号的一种重要手段。在实际应用中,科研工作者面对的是离散信号序列,计算机也只能处理离散信号序列,根据文献[9-11]可知,对于离散信号序列x ( n ), n=0⋯N -1,Δt为采样间隔,N为离散信号时间序列的采样点个数,序列x ( n )在离散频率点fk, fk=k/( NΔt ),k=0⋯N - 1处的功率谱密度PSD求取表达式可为下式,

式(1)中Yk为序列x ( n )的离散傅里叶变换,该式与Matlab技术文档中功率谱密度单边谱计算公式一致,但应注意零频率点和奈奎斯特频率点在整个频带中不会出现两次,因此绘制单边功率谱密度随离散频率点fk变化曲线时,此两点功率谱密度值无需附加式(1)中系数2[12]。由式(1)可知,功率谱密度可由离散信号序列通过求取离散傅里叶变换取模值平方后计算得到,这也是功率谱密度计算经典周期图法,对于经典周期图法计算过程在Matlab可直接调用periodogram函数进行计算,该方法具有频率域分辨率高的优点,但对较长的数据而言,缺点为噪声敏感,计算结果方差大,适合数据较短且信号平稳的情景。对于VP宽频带倾斜仪而言,进行谱分析有时需要整合多日秒数据,其数据量大,时间长,所以本程序采取welch方法,是一种改进的周期图方法,主要算法步骤为以下三步:①将长时间信号数据分段(分段数据可重叠),为防止谱泄露,对每段数据进行加窗处理;②计算每分段数据周期图法PSD功率谱密度;③每段数据PSD功率谱密度叠加求和后取平均即为原长信号PSD功率谱密度。
Welch方法能降低方差,比较适合长时间非平稳信号,在Matlab数字信号处理工具箱中提供了pwelch、spectrogram等函数进行功率谱密度计算,函数输入参数为分段窗长、重叠点数、FFT点数等。在实际计算中,可以根据数据情况及结果需要灵活设置函数输入参数,如为提高谱分辨率可以通过增加FFT点数对分段窗长数据补零的方式来计算FFT。pwelch函数直接利用welch方法求取长离散信号序列PSD功率谱密度。pectrogram函数可用于绘制长离散信号序列PSD功率谱密度随时间变化分布特征,其先对数据进行分窗做分段处理计算各分段数据PSD功率谱密度,然后将各分段数据PSD功率谱密度值沿对应各分窗窗口中点时刻作时频图,以此来获得数据PSD功率谱密度随时间变化分布特征。在Matlab中调用pwelch与spectrogram函数求取实数离散信号功率谱密度时,函数默认求取实信号功率谱密度单边谱值。
台站VP宽频带倾斜仪在运行过程中观测数据会有零漂、基线偏移等情况,观测数据会产生缓慢变化的趋势项,另外也包含固体潮等低频信息。在信号处理中,当信号中有明显的趋势项而未消除时,进行功率谱密度分析时会出现畸变,使得低频成分上翘甚至淹没主频成分,从而严重地影响处理精度,造成对功率谱密度结果的错误判断解读。因此,为改善数据质量或者将数据加工成便于数据处理的形式,需进行数据预处理。软件可设置对观测数据进行去趋势项、去固体潮等方式预处理,通过数据预处理来进行基线修正、仪器零漂修正。但是对此需要说明的是,在经过预处理后,原始数据中部分低频信息会被一并去掉,预处理后得到的功率谱密度分析,是不包含固体潮信息的功率谱密度结果。软件中可通过控件设置了是否使用数据预处理方法,使用者可对数据先行判读后自行选择。
为在软件中更直观显示仪器监控状态,也增加软件在其他省VP中心站推广使用通用性,在软件中内置了各省.shp格式地理底图。Matlab中可以直接通过mapshow函数读取.shp文件显示地图,再利用scatter函数读取仪器站点配置中各站点经纬度显示各VP宽频带倾斜仪台站,并通过监控仪器站点网络状态实时重绘以颜色区分中断或故障站点。
Matlab可以通过parfeval来进行多线程运算, parfeval是Parallel Computing Toolbox提供的一种异步并行计算机制,允许在后台并行执行多个函数,而无需阻塞主线程。本软件利用parfeval进行多线程任务,保证软件后台进行自动功率谱密度分析,不影响前台数据实时监控任务。parfeval基本语法为: futureObj=parfeval (@myFunction, nargout, arg1,arg2,...),语法中@myFunction为异步执行函数,arg1,arg2,...等为myFunction的输入参数,软件中重写myFunction函数执行功率谱密度计算及时频图绘制代码。重写myFunction函数后保存,由主程序中parfeval调用执行即可实现新线程的功率谱密度数值求取计算。
对于网络实时监控,Matlab执行操作系统ping命令,利用system(command)函数,该函数通过调用系统shell来执行操作系统命令。操作后将结果返回到status变量与cmdout变量,执行代码为system(ping 10.*.*.*)返回,可以通过灵活设置系统ping命令自身参数如发送数据包大小,网络响应时间等方式实时监控VP宽频带倾斜仪网络情况。
[status cmdout]=system(˛ping-w 50 10.*.*.*˛);%执行Ping VP倾斜仪IP地址
前兆仪器有对应网络页面,可通过HTTP协议向仪器网页站点发送请求方式获取HTML文本内容,再清洗HTML文本内容获取观测数据,最后绘制数据流曲线,目前前兆仪器监控软件均遵循该流程。但不同编程语言依各自特色有不同实现方式,各有优劣。python使用Requests命令及网络爬虫获取清洗数据, VB使用Inet网络控件获取数据[13]。本软件时域监控数据可视化借鉴沿袭以上思路,在Matlab语言中首先通过webread函数获取VP宽频带倾斜仪网页http://10.*.*.*/cgi-bin/realtime.cgi字节数据,再通过正则表达式函数regexp()筛选字节并转换为实数值。最后利用Matlab动态数组、plot()绘图函数结合其循环语句来实现数据流动态实时重绘。以下仅通过给出简单单台监控代码示例阐述上述流程,多台监控拓展编程即可,另实际程序中还涉及到网络中断台站地图信息显示、数据流长度控制(防监控时间过长,数组溢出)、阈值报警等方面,在此不再赘述。
NSstream=[];EWstream=[];%定义初始空数组用于存储VP数据
ConnectIp=[˛http://10.*.*.*/cgi-bin/realtime. cgi˛];%定义监控VP仪器DNS地址字符串
RealTime=inf;
while RealTime>0 %while循环持续获取数据并绘制曲线
try
[status cmdout]=system(˛ping -w 50 10.*.*.*˛);%ping命令设置50ms网络响应时间
webdata=webread(ConnectIp);
catch err %获取网络中断error信息
fprintf(˛Error:%s\n˛,err.message);
end
if status==0;
%通过正则表达式函数regexp()筛选字节数据分别赋予NStmpStream、EWtmpStream数组%
index=strfind(webdata,˛tr˛);
str1=webdata(index(3):index(4));
str1key=regexp(str1,˛size="6">(\S+)mV</font>˛,˛tokens˛);
tmp=str1key{1,1};
NSvalue=str2num(tmp{1,1});
str2=webdata(index(5):index(6));
str2key=regexp(str2,˛size="6"><b>(\S+)mV</b>˛,˛tokens˛);
tmp=str2key{1,1};
EWvalue=str2num(tmp{1,1});
NSstream(end+1)=NSvalue;%数组尾部加入数据
EWstream(end+1)=EWvalue;%数组尾部加入数据
%通过正则表达式函数regexp()筛选字节数据分别赋予NSstream、EWstream数组%
subplot(2, 1, 1), plot(NSstream), title(˛北南向数据˛);
subplot(2,1,2),plot(EWstream),title(˛东西向数据˛);
else status==1;%网络中断则设置数据尾部加入NaN空值
NSstream(end+1)=NaN;
EWstream(end+1)=NaN;
end
end
如前所述,VP宽频带倾斜仪数据PSD功率谱密度计算需进行去趋势项预处理,去掉一般长趋势可以使用最小二乘拟合方法,首先对数据最小二乘法拟合得到趋势曲线BaseLine,然后再对原始数据减去拟合趋势曲线BaseLine。在Matlab中最小二乘拟合去信号趋势项有相应的库函数,该库函数为detrend(),直接调用即可。对于非线性趋势可通过poly fit()与 polyval()进行拟合得到趋势曲线BaseLine值,再用原信号减掉趋势曲线。
LengthOfVPseconddata=length(VPseconddata);
t=[1:1:LengthOfVPseconddata];
p=polyfit(t, VPseconddata, 5);% 5为拟合阶数
xtrend=polyval(p,t);%拟合获取数据长周期趋势项
VPseconddataOfDetrend=VPseconddata-xtrend;%原始数据去趋势
除了长趋势项,VP数据还包括固体潮信息,可采用小波分解去固体潮[14]。小波分解可将原始信号S分解成趋势部分A和细节部分D,要去掉VP数据中固体潮信息,可用原始数据扣除小波分解后的日波、半日波、1/4日波等固体潮所对应的细节部分。亦可以直接通过扣除小波趋势部分A及细节部分D来达到同时去除趋势项及固体潮,笔者对比小波去趋势项与最小二乘拟合去趋势项,小波去趋势更彻底,但也会使谱密度处理结果较之最小二乘拟合方式丢失部分低频信息,软件设置了预处理选择控件,可以根据功率谱密度计算需要自行选择。在Matlab中提供了小波分解和重构函数,代码如下。
[C,L]=wavedec(VPseconddata,16,˛db4˛);% VPseconddata数据进行db4小波基分解
A16=wrcoef(˛a˛,C,L,˛db4˛,16);%重建小波16层趋势
D16=wrcoef(˛d˛,C,L,˛db4˛,16);%重建小波16层细节
软件主界面包括台站参数输入、监控处理、PSD谱处理参数设置等左侧控件部分,中间区域及其右侧面板主要为显示部分,VP宽频带倾斜仪站点地图状态显示、PSD功率谱密度结果显示、VP宽频带倾斜仪台站网络状态、报警信息文本显示等如下图2所示。
图2 主程序界面Fig.2 Interface of main program
软件启动后,软件会自动读入指定位置存放的参数配置文件,包括台站参数、谱计算参数、地理底图等,台站参数指VP宽频带倾斜仪IP、用户名、密码、台站名称、经纬度等,谱计算参数指分段窗长、重叠点数、FFT点数等。使用者选择对应省域底图,点击实时监控后,软件读取台站参数配置文件,开始实时监控动态绘制数据曲线,台站实时状态亦同时显示于地图底图,以颜色区分连通与中断台站,多台数据流均会实时显示如下图3所示。在点选特定报警中心站时,其对应VP宽频带倾斜仪实时数据流将会在地图下方坐标轴显示。当监控数据超过设定阈值,会自动发出报警声音,提醒值班人员注意仪器,根据实际情况确定是否调零处置。
对于PSD功率谱密度的计算,当软件实时监控运行时,其多线程机制会自动下载前日VP数据并根据配置文件预设的谱计算参数进行各台站PSD功率谱密度计算并结果存盘保存,如下图4所示。
图3 软件实时多台监控数据流显示Fig.3 Real-time software display of multiple inclinometers data stream
图4 软件单日广东省多台VP宽频带倾斜仪PSD自动计算结果Fig.4 Daily PSD results of multiple VP broadband inclinometers in Guangdong Province automatically calculated by software
软件也提供PSD功率谱密度手动计算功能,点击软件界面功率谱密度手动计算设置按钮,可以选择多日离线数据整合,设置分段窗长、重叠点数、FFT点数等参数,确定是否去趋势、固体潮等要求。根据软件使用者研究需求来进行多日PSD功率谱密度计算。下图5为软件直接读取韶关站VP宽频带倾斜仪2024年9月30日至2024年10月8日秒数据整合后进行PSD功率谱密度计算,展示了其南北向分量多日原始曲线在不同处理后的结果。图5中可以看到,在去长趋势及固体潮之后,数据风扰干扰信号特征逐渐清晰,凸显了仪器受风扰情况下功率谱密度噪声特征,在曲线加粗区域呈现较观测背景更为明亮的的高功率谱密度值圆形区域,且增大幅度自外向内递增,最大值出现在圆形区域中心,此类型时频特征为典型VP垂直摆倾斜仪风扰时频特征。
图5 韶关站VP宽频带倾斜仪风扰情况下PSD功率谱密度时频分布特征Fig.5 Time-frequency distribution characteristics of PSD of VP broadband inclinometer at Shaoguan Station under wind disturbance conditions
软件在韶关地震监测中心站开展功能测试工作,在测试期间运行正常,实现了不间断对广东省4套VP宽频带倾斜仪实时监控、超阈值报警、PSD功率谱密度每日自动计算等功能。如下图6所示当测试设置潮州CHZ站点VP宽频带倾斜仪报警阈值为±800 mV时,软件中界面文本框蓝色字体信息显示站点网络状态正常,在界面文本框红色字体信息显示潮州CHZ站点VP宽频带倾斜仪东西向数据超量程-800 mV,点选报警台站数据波形,可以在界面下部坐标轴看到报警台站CHZ潮州站东西向实时数据流及对应阈值线,其超阈值数据点在阈值线下方,呈红点显示。
图6 软件界面实时数据流监控超阈值报警Fig.6 Real-time data stream monitoring of software interface for exceeding threshold alarm
软件每日实时产出前日PSD功率谱密度存盘保存,测试中对于VP宽频带倾斜仪一些较为典型的干扰特征PSD功率谱密度进行了计算产出,如VP宽频带倾斜仪对记录地震波、刮风导致曲线加粗、雷电干扰突跳等情况其PSD功率谱密度都有明显的差异,其产出功率谱密度时频图表现形式亦与赵莹[15]所统计讨论常熟地震台VP垂直摆观测不同干扰情况的功率谱密度表现形态基本一致,韶关站VP宽频带倾斜仪部分典型干扰功率谱密度时频图如图7、图8、图9所示:
图7 韶关站2024年01月10日VP摆受刮风影响曲线加粗功率谱密度特征Fig.7 PSD characteristics of VP wideband inclinometer at Shaoguan Station under wind disturbance condition on January 10,2024
图8 韶关站2024年08月03日VP摆记录菲律宾棉老群岛2024年8月3日6时23分在菲律宾棉兰老岛M6.8级地震功率谱密度特征Fig.8 PSD characteristics of the Mindanao M6.8 earthquake in Philippines at 6:23 am on August 3,2024 recorded by VP broadband inclinometer at Shaoguan Station on August 3,2024
图9 韶关站2024年08月14日VP摆受雷电天气干扰功率谱密度特征Fig.9 PSD characteristics of VP broadband inclinometer at Shaoguan Station under thunderstorm weather condition on August 14,2024
本文以Matlab为开发平台实现VP宽频带倾斜仪时域监控及频域PSD计算,软件能够对多台VP宽频带倾斜仪进行监控,也能定时自动产出每日台站观测数据PSD功率谱密度,还提供了PSD功率谱密度手动计算功能,研究者能根据需要整合多日数据进行研究,整个计算过程集成一体。笔者认为,从监测预报实用性角度而言,该软件界面友好,通过可视化地图清晰显示多台仪器状态及数据流情况,可用于中心站、省域台网多台VP宽频带倾斜仪监控。另外,软件PSD功率谱密度计算自动产出,为基层中心站地震工作者了解自身台站VP宽频带倾斜仪正常背景和干扰特征提供工具,软件提供的手动功率谱密度分析功能,操作十分简单方便,也方便更多研究者深入针对某区域仪器开展功率谱密度研究工作。最后,从Matlab语言软件开发角度而言,软件尝试通过parfeval多线程机制实现了数据采集与数据分析的分离,在硬件允许情况下,能进行大量数据的计算分析,这也为今后开发类似实时数据采集并发实时分析软件提供了一种思路。
本软件的开发得益于马武刚高工、赵莹博士的悉心指导,在此表示感谢。