%% vmd-lstm预测
clc
clear all
close all
warning off
% restoredefaultpath
tic
%% 导入数据
ff=xlsread('windspeed.xls','b2:b1001');
ff=ff';
data=ff;
len=length(data);
f=data(1:len);
%--------- some sample parameters forvmd:对于vmd样品参数进行设置---------------
alpha = 2000; % moderate bandwidth constraint:适度的带宽约束/惩罚因子
tau = 0; % noise-tolerance (no strict fidelity enforcement):噪声容限(没有严格的保真度执行)
k = 7; % modes:分解的模态数
dc = 0; % no dc part imposed:无直流部分
init = 1; % initialize omegas uniformly :omegas的均匀初始化?
tol = 1e-7;
%--------------- run actual vmd code:数据进行vmd分解---------------------------
[u, u_hat, omega] = vmd(f, alpha, tau, k, dc, init, tol);
%[m,~]=size(u); %程序中omega就是中心频率,k为多少,分解的个数就为几个,
%omega就有几列,然后就每列的均值,程序里面有。
%% 浣滃浘
figure
subplot(size(u,1)+1,1,1);
plot(f,'k');grid on;
title('原始数据');
for i = 1:size(u,1)
subplot(size(u,1)+1,1,i+1);
plot(u(i,:),'k');
end
%% 预测模型
l=15; %嵌入维度
imf=u;
c=size(imf,1);
tre_result=[];
pre_result=[];
%% 对每个分量建模
for i=1:c
disp(['对第',num2str(i),'个分量建模'])
[x,y]=data_process(imf(i,:),l);
%归一化
[xs,mappingx]=mapminmax(x',0,1);x=xs';
[ys,mappingy]=mapminmax(y',0,1);y=ys';
%划分数据
n=size(x,1);
m=round(n*0.7);%前70%训练,对最后30%进行预测
xtrain=x(1:m,:)';
xtest=x(m+1:end,:)';
ytrain=y(1:m,:)';
ytest=y(m+1:end,:)';
numfeatures = size(xtrain,1);
numresponses = 1;
numhiddenunits = 200;
layers = [ ...
sequenceinputlayer(numfeatures)
lstmlayer(numhiddenunits)
fullyconnectedlayer(numresponses)
regressionlayer];
发表评论