EMD分解去噪

对于掺杂噪声的原始信号,可以使用EMD分解,去除高频的IMF达到去噪效果。

验证代码

测试的IMF由c++代码产生,具体链接可见C++仿写emd分解代码

%%
clear all;
clc;

%%
raw = load('result_VS\test.txt');
imfs = load('result_VS\imfs.txt');

%%
figure;
stackedplot(imfs');

figure;
denoise_data = raw' - imfs(1,:); 
plot(raw);
hold on;
plot(denoise_data);

%%
fs=1000;%采样频率是1000Hz
%生成正弦波信号
t=linspace(0, length(raw)/fs-1/fs, length(raw));
y1 =15*sin(2*pi* 2.8 *t);%生成频率为2.8Hz,幅值为15的正弦波
y2 =10*sin(2*pi* 10.5 *t);%生成频率为10.5Hz,幅值为10的正弦波
y3 =3*sin(2*pi* 27 *t);%生成频率为27Hz,幅值为3的正弦波
y4 =0.5*sin(2*pi* 43 *t);%生成频率为43Hz,幅值为0.5的正弦波

y_Sin =y1+y2+y3+y4;

error_raw  =sum(abs(raw'- y_Sin));

error_deNoise  =sum(abs(denoise_data- y_Sin));

%%
sumNo =3;
imfSum =sum(imfs(sumNo:end,:));
% error_raw  =sum(abs(raw'- y_Sin));
error_imf  =sum(abs(imfSum- y_Sin));

figure;
plot(raw);
hold on;
plot(imfSum);


效果

使用EMD分解进行去噪-LMLPHP

10-16 20:27