MATLAB环境下基于多分辨奇异值分解和改进完备集成经验模态分解的大地电磁数据降噪方法

大地电磁测深法(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');
相关推荐
煤泥做不到的!1 小时前
挑战一个月基本掌握C++(第十一天)进阶文件,异常处理,动态内存
开发语言·c++
F-2H1 小时前
C语言:指针4(常量指针和指针常量及动态内存分配)
java·linux·c语言·开发语言·前端·c++
chenziang12 小时前
leetcode hot100 环形链表2
算法·leetcode·链表
bryant_meng2 小时前
【python】OpenCV—Image Moments
开发语言·python·opencv·moments·图片矩
若亦_Royi3 小时前
C++ 的大括号的用法合集
开发语言·c++
Captain823Jack3 小时前
nlp新词发现——浅析 TF·IDF
人工智能·python·深度学习·神经网络·算法·自然语言处理
沅_Yuan4 小时前
基于GRU门控循环神经网络的多分类预测【MATLAB】
matlab·分类·gru
资源补给站4 小时前
大恒相机开发(2)—Python软触发调用采集图像
开发语言·python·数码相机
Captain823Jack4 小时前
w04_nlp大模型训练·中文分词
人工智能·python·深度学习·神经网络·算法·自然语言处理·中文分词
m0_748247554 小时前
Web 应用项目开发全流程解析与实战经验分享
开发语言·前端·php