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);