MATLAB环境下使用训练好的卷积神经网络进行大地电磁数据噪声抑制

大地电磁MT是一种比较成熟的地球物理勘探方法,通过计算地面测量的正交电场分量和磁场分量的扰动值研究地下介质的电性结构。MT在油气和工程勘探领域得到了广泛应用。但是由于该方法以天然电磁场为场源,存在地面信号弱和源激发随机的缺点,极易受到各类噪声的影响,致使后续反演结果中存在不确定性。因此,在MT方法的发展过程中,消除噪声一直是地球物理勘探研究的重点。

学者们提出了许多消除MT噪声的数据处理方法,主要包括频域方法、时-频域方法及时间序列编辑方法。频域处理方法最典型的代表是最小二乘法、鲁棒估计方法和远参考方法。利用最小二乘法进行去噪的过程中会产生"飞点",导致估计值偏离真值。鲁棒估计方法要求大部分数据是可靠的,当输入数据包含较高水平的噪声时,鲁棒估计反而会加重噪声的影响。对于远参考去噪方法,远参考点的处理效果取决于参考点与本地信号及噪声的相关性,在实际应用中,在信号相关的情况下,很难选择一个合适位置设置参考点以保证测点与噪声源之间的距离足够远。时---频域处理方法的典型代表是小波变换和HHT变换。小波变换方法需进行母小波的选取,而对于噪声成分复杂、信号频谱丰富的实测MT数据,去噪小波变换中关于母小波的选取规则尚未有明确的结论。基于HHT变换的去噪方法的缺点是会在窗口的两端引入误差。对于时间序列编辑方法,认为在时域进行信噪分离是去除强人文噪声最直接、有效的手段。到目前为止,数学形态学、S变换、同步时间序列依赖、信号子空间增强、压缩感知重构等信号处理方法已经应用于MT数据的噪声压制,但这些方法都以一定的先验信息为前提,限制了方法的实际应用。

伴随着人工智能中深度学习算法的快速发展,深度学习算法对数据的学习能力逐渐提高,在智能控制、模式识别领域得到广泛应用,这也为大地电磁数据噪声抑制提供了新的机遇。为了更加智能化、低成本的对大地电磁数据噪声抑制, 越来越多的科学研究人员尝试将深度学习方法应用于大地电磁数据去噪中。

本例在MATLAB R2021B环境下使用训练好的卷积神经网络CNN进行大地电磁数据噪声抑制,部分代码如下:

clear
fd=200;%"fd" is the length of the data segment.
load('net_CNN.mat');%"net_CNN" is the CNN model obtained by training, where the network layer and parameters can be found.
load('CleanEX.mat');%"CleanEX" is the original clean data of Qinghai measured site QH401504.
load('QH_noise_data.mat');%"QH_noise_data" is the data after adding noise to the Qinghai measured site QH401504.
%% Note: The number of network layers and parameters can be obtained from the network model(net_CNN) provided, but there may be a little deviation in the actual processing of the model obtained by each training.
%% The following is CNN's procedure for processing noisy data
MT=QH_noise_data;Dnoise=[];
for i = 1:length(MT)
    if mod(i,fd)==0
        a = MT(i-fd+1:i);
        In=reshape(a,fd,1);
        In=reshape(In,[fd,1,1,1]);
        out=predict(net_CNN,In);
        DEX=reshape(out,fd,1);
        Dnoise=[Dnoise,a-DEX'];
    end
end
Dnoise_CNN=Dnoise;
%% The following is WT's procedure for processing noisy data,  WT(Wavelet threshold method)
Dnoise_WT=fun_WT(MT);
%% Noise contour 
A=CleanEX;
B=MT;
C=Dnoise_WT;
D=Dnoise_CNN;
Original_noise_contour=B-A;
WT_noise_contour=B-C;
CNN_noise_contour=B-D;

%%
figure(1)
subplot 411,plot(A,'k'),legend('Original clean data'),axis([0 length(B) min(B)/4 max(B)/4])
subplot 412,plot(B,'b'),legend('Noise data'),axis([0 length(B) min(B) max(B)])
subplot 413,plot(C,'r'),legend('Denoise data by WT'),axis([0 length(B) min(B)/4 max(B)/4])
subplot 414,plot(D,'g'),legend('Denoise data by CNN'),axis([0 length(B) min(B)/4 max(B)/4])

figure(2)
subplot 311,plot(Original_noise_contour,'k'),legend('Original noise contour'),axis([0 5000 -8000 8000])
subplot 312,plot(WT_noise_contour,'b'),legend('Noise contour by WT'),axis([0 5000 -8000 8000])
subplot 313,plot(CNN_noise_contour,'r'),legend('Noise contour by CNN'),axis([0 5000 -8000 8000])

结果如下:

相关推荐
Gu Gu Study3 分钟前
枚举与lambda表达式,枚举实现单例模式为什么是安全的,lambda表达式与函数式接口的小九九~
java·开发语言
时光の尘18 分钟前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
以后不吃煲仔饭32 分钟前
Java基础夯实——2.7 线程上下文切换
java·开发语言
进阶的架构师32 分钟前
2024年Java面试题及答案整理(1000+面试题附答案解析)
java·开发语言
前端拾光者36 分钟前
利用D3.js实现数据可视化的简单示例
开发语言·javascript·信息可视化
程序猿阿伟38 分钟前
《C++ 实现区块链:区块时间戳的存储与验证机制解析》
开发语言·c++·区块链
傻啦嘿哟1 小时前
如何使用 Python 开发一个简单的文本数据转换为 Excel 工具
开发语言·python·excel
大数据编程之光1 小时前
Flink Standalone集群模式安装部署全攻略
java·大数据·开发语言·面试·flink
初九之潜龙勿用1 小时前
C#校验画布签名图片是否为空白
开发语言·ui·c#·.net
Dola_Pan1 小时前
C语言:数组转换指针的时机
c语言·开发语言·算法