clear;
clc;
fs = 25600; %采样频率
x_input=csvread('D:\data.csv'); %读取数据
N=length(x_input); %数据长度
n=0:N-1;
t=n/fs; %生成每个数据点对应的时间戳
y=x_input;
figure(1); %时域图像
plot(t,y);
xlabel('时间');ylabel('幅值');
%% 将imf可视化为三维图
figure(2)
[imf,res]=vmd(x_input,'NumIMF',7,'Display',1); %VMD变换输出为imf分量和残余分量
% 'NumIMF',7 需要生成imf分量的个数默认为5,可以手动修改,但有的信号可能达不到你要求的分量个数
% 'Display',1 在命令行中展示每个imf分量分解的信息,默认为0(不展示)
[p,q] = ndgrid(t,1:size(imf,2)); %三维绘图可视化
plot3(p,q,imf)
grid on
xlabel('Time Values')
ylabel('Mode Number')
zlabel('Mode Amplitude')
%% 对每个imf分量和残余分量可视化
figure(3) %在一张图布上绘制所有的imf分量及最后的残余分量
a=size(imf,2);
for i=1:a
subplot(a+1,1,i)
plot(t,imf(:,i))
title(sprintf("第%d个imf分量",i))
end
subplot(a+1,1,a+1)
plot(t,res)
title('残余分量')
%% 选择三个imf分量和残余分量相加重构成原始信号,并与原始信号对比
newsig=sum(imf(:,1:3),2) + res; %重构新信号
figure(4)
plot(t,newsig,'LineWidth',1.5) %绘制新信号图像
hold on
plot(t,x_input,':','LineWidth',2) %绘制原始信号图像
xlabel('Time (s)')
ylabel('Signal')
hold off
legend('Reconstructed signal','Original signal', ...
'Location','northwest')
- 1
- 2
- 3
- 4
- 5
- 6
前往页