大地电磁测深法(MT)诞生于20世纪50年代,是一种以天然交变电磁场为场源,通过测量地表相互正交的电场和磁场,获得地下电性结构信息的地球物理方法。与有源的电磁勘探方法相比,天然大地电磁场频带范围宽且本身信号极其微弱,野外观测到的大地电磁信号不可避免地会受到各种噪声的污染。尤其是在矿集区,随处可见的高压电网、广播电台、通讯电缆、信号发射塔、各种金属管网以及用于矿山开采的大功率直流电机车等严重影响了实测大地电磁信号的采集,大地电磁测深数据质量极具下降,阻抗估算偏差严重及测量获得的视电阻率值过度失真等状况导致不能客观反映地下电性分布。为此,如何消除大地电磁信号中的噪声干扰、提高大地电磁测深数据质量是国内外长期瞩目并不断取得进展的研究课题。诸多现代信号处理方法,如Hilbert-Huang变换、广义S变换、方差比维纳滤波、同步时间序列依赖、数学形态滤波、子空间增强等均被应用到该领域,并在一定程度上对大地电磁测深数据质量起到了积极的改善作用,推动了MT法在与各种噪声竞争中不断成长。
提出一种基于多分辨奇异值分解和改进完备集成经验模态分解的大地电磁数据降噪方法,多分辨奇异值分解算法是受小波包算法启发,使用递归分解的形式将信号进行多层SVD分解从而实现多分辨率分析,结合改进完备集成经验模态分解算法对大地电磁数据进行降噪,取得了不错的效果。
工学博士,担任《Mechanical System and Signal Processing》审稿专家,担任《中国电机工程学报》优秀审稿专家,《控制与决策》,《系统工程与电子技术》,《电力系统保护与控制》,《宇航学报》等EI期刊审稿专家,担任《计算机科学》,《电子器件》 , 《现代制造过程》 ,《电源学报》,《船舶工程》 ,《轴承》 ,《工矿自动化》 ,《重庆理工大学学报》 ,《噪声与振动控制》 ,《机械传动》 ,《机械强度》 ,《机械科学与技术》 ,《机床与液压》,《声学技术》,《应用声学》,《石油机械》,《西安工业大学学报》等中文核心审稿专家。
擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。
clc
clear all
close all
%% Simulated charge discharge triangular wave
x1=100*randn(1,5000);
x=addsj(x1,5,8,200,4);
xx=[-x(1501:3000) x(1001:1700) -x(1201:2000) x(2001:4000)];
x1=[-x1(1501:3000) x1(1001:1700) -x1(1201:2000) x1(2001:4000)];
x2=xx-x1;
xx=load('OriginalSignal.dat');
xx=xx-mean(xx);
fids1=fopen('OriginalSignal.dat','wt');
fprintf(fids1,'%10.0f%10.0f',xx);
fclose(fids1);
[S,F,T,P] = spectrogram(xx,256,250,256,150);
figure(1)
subplot(221);
sf= surf(T,F,10*log10(P))
sf.EdgeColor = 'none';
% view(0,90);
% colorbar
axis tight
xlabel('time (s)')
ylabel('frequency(Hz)')
figure(2)
subplot(221)
fs=150;t=(0:length(xx)-1)/fs;
plot(t,xx,'r');ylabel('amplitude');legend('original signal');
%% Simulated square wave signal
%% square wave
x3=load('moni_fangbo.dat');x3=x3*0.5;x2=x2*2;
%% Pulses and harmonics
x4=load('moni_xiebo.dat');
xn=[x2(1:1000),-3500,x4(1:1000),3500,x2(1:1000),x3(1001:2000),-x2(1:998)]
xx=xx+xn*0.5;
[S,F,T,P] = spectrogram(xx,256,250,256,150);
figure(1)
subplot(222);
sf= surf(T,F,10*log10(P))
sf.EdgeColor = 'none';
% view(0,90);
% colorbar
axis tight
xlabel('time (s)')
ylabel('frequency(Hz)')
figure(2)
subplot(222)
fs=150;t=(0:length(xx)-1)/fs;
plot(t,xx,'r');ylabel('Amplitude');legend('Simulated noise data');
%% denoising
data_length=200;
L=fix(length(xx)/data_length);
for j=1:L
signal=xx((j-1)*data_length+1:j*data_length);
sig=signal;
for Q=1:5
H=[sig(1:end-4);sig(2:end-3);sig(3:end-2);sig(4:end-1);sig(5:end)];
[u,s,v]=svd(H,'econ');
%% Matrix reconstruction signal reconstruction
s(5,5)=0;s(4,4)=0;s(2,2)=0;s(3,3)=0;
H1=u*s*v';
b = rot90(H1);
r = [];
for i = 1 : sum(size(b))-1
k = i - size(b,1);
Diag = diag(b,k);
r = [r;mean(Diag)];
end
r=r'; sig=r;
end
da(1,(j-1)*data_length+1:j*data_length)=signal-r;
end
[S,F,T,P] = spectrogram(da,256,250,256,150);
figure(1)
subplot(223);
sf= surf(T,F,10*log10(P))
sf.EdgeColor = 'none';
% view(0,90);
% colorbar
axis tight
xlabel('time (s)')
ylabel('frequency(Hz)')
figure(2)
subplot(223)
fs=150;t=(0:length(xx)-1)/fs;
plot(t,da,'r');ylabel('amplitude');legend('MRSVD denoised signal');
%% iceemdan denoising
data_length=1000;
L=fix(length(da)/data_length);
for C=1:L
signal=da((C-1)*data_length+1:C*data_length);
sig=signal;
modes=improveceemdan(signal,0.2,100,1000,1);
[a,b]=size(modes);
N=length(modes);
K=zeros(1,N);
for i=1:a
for j=1:b
Sj(i)=median(abs(modes(i,:)-median(abs(modes(i,:)))))/0.6745;
Tj(i)=Sj(i)*sqrt(2*log10(N));
w(i,j)=exp(-exp(Tj(i)*abs(modes(i,j)/Sj(i))-Tj(i)));
if abs(modes(i,j))>Tj(i)
mode(i,j)=modes(i,j)*w(i,j);
else
mode(i,j)=modes(i,j);
end
end
K=K+mode(i,:);
end
y(1,(C-1)*data_length+1:C*data_length)=K;
end
[S,F,T,P] = spectrogram(y,256,250,256,150);
figure(1)
subplot(224);
sf= surf(T,F,10*log10(P));
sf.EdgeColor = 'none';
axis tight
xlabel('time (s)')
ylabel('frequency(Hz)')
figure(2)
subplot(224)
fs=150;t=(0:length(xx)-1)/fs;
plot(t,y,'r');ylabel('amplitude');legend('ICEEMDAN denoised signal');