大地电磁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])

结果如下:

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐