原创matlab递归神经网络RNN实现桨距控制控制风力发电机组研究数据分析报告论文附代码数据.docx
- 文档编号:4189728
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:10
- 大小:452.92KB
原创matlab递归神经网络RNN实现桨距控制控制风力发电机组研究数据分析报告论文附代码数据.docx
《原创matlab递归神经网络RNN实现桨距控制控制风力发电机组研究数据分析报告论文附代码数据.docx》由会员分享,可在线阅读,更多相关《原创matlab递归神经网络RNN实现桨距控制控制风力发电机组研究数据分析报告论文附代码数据.docx(10页珍藏版)》请在冰豆网上搜索。
原创matlab递归神经网络RNN实现桨距控制控制风力发电机组研究数据分析报告论文附代码数据
matlab递归神经网络RNN实现:
桨距控制控制风力发电机组研究数据分析报告
本文介绍了用于涡轮桨距角控制的永磁同步发电机(PMSG)和高性能在线训练递归神经网络(RNN)的混合模糊滑模损失最小化控制的设计。
反向传播学习算法用于调节RNN控制器。
PMSG速度使用低于额定速度的最大功率点跟踪,其对应于低风速和高风速,并且可以从风中捕获最大能量。
设计了具有积分运算切换面的滑模控制器,利用模糊推理机制估计不确定性的上界。
1.简介
最近,风力发电系统作为清洁和安全的可再生能源引起了极大的关注。
风力发电可以通过使用电力电子转换器的恒速和变速操作来操作。
由于风能产生的改善和闪烁问题的减少,变速发电系统比固定速度系统更具吸引力。
并且风力涡轮机能够在最大功率操作点关于各种风速下,通过调整轴速度最佳地在所有风速达到最高效率。
RNN变桨控制系统的设计
RNN的体系结构
RNN具有三层,即,输入,隐藏和输出。
在所示的三层神经网络图采用实施建议的RNN用于涡轮控制器。
图.RNN的体系结构。
matlab实现
%%RNN
clc;
clear;closeall;
setup;
dbstopiferror
[X,T]=simpleseries_dataset;
net=layrecnet(1:
2,10);
[Xs,Xi,Ai,Ts]=preparets(net,X,T);
net=train(net,Xs,Ts,Xi,Ai);
view(net)
Y=net(Xs,Xi,Ai);
perf=perform(net,Y,Ts)
numFeatures=12;
numHiddenUnits=100;
numClasses=9;
layers=[...
sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits,'OutputMode','last')
fullyConnectedLayer(numClasses)
softmaxLayer
classificationLayer];
numFeatures=12;
numHiddenUnits=100;
numClasses=9;
layers=[...
sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits,'OutputMode','sequence')
fullyConnectedLayer(numClasses)
softmaxLayer
classificationLayer];
numFeatures=12;
numHiddenUnits=125;
numResponses=1;
layers=[...
sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits,'OutputMode','last'
fullyConnectedLayer(numResponses)
regressionLayer];
numFeatures=12;
numHiddenUnits=125;
numResponses=1;
layers=[...
sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits,'OutputMode','sequence'
fullyConnectedLayer(numResponses)
regressionLayer];
inputSize=[28281];
filterSize=5;
numFilters=20;
numHiddenUnits=200;
numClasses=10;
layers=[...
sequenceInputLayer(inputSize,'Name','input')
sequenceFoldingLayer('Name','fold')
convolution2dLayer(filterSize,numFilters,'Name','conv')
batchNormalizationLayer('Name','bn')
reluLayer('Name','relu')
sequenceUnfoldingLayer('Name','unfold')
flattenLayer('Name','flatten')
lstmLayer(numHiddenUnits,'OutputMode','last','Name','lstm')
fullyConnectedLayer(numClasses,'Name','fc')
softmaxLayer('Name','softmax')
classificationLayer('Name','classification')];
lgraph=layerGraph(layers);
lgraph=connectLayers(lgraph,'fold/miniBatchSize','unfold/miniBatchSize');
numFeatures=12;
numHiddenUnits1=125;
numHiddenUnits2=100;
numClasses=9;
layers=[...
sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits1,'OutputMode','sequence')
dropoutLayer(0.2)
lstmLayer(numHiddenUnits2,'OutputMode','last')
dropoutLayer(0.2)
fullyConnectedLayer(numClasses)
softmaxLayer
classificationLayer];
numFeatures=12;
numHiddenUnits1=125;
numHiddenUnits2=100;
numClasses=9;
layers=[...
sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits1,'OutputMode','sequence')
dropoutLayer(0.2)
lstmLayer(numHiddenUnits2,'OutputMode','sequence')
dropoutLayer(0.2)
fullyConnectedLayer(numClasses)
softmaxLayer
classificationLayer];
sequenceLengths=cellfun(@(X)size(X,2),XTrain);
[sequenceLengthsSorted,idx]=sort(sequenceLengths);
XTrain=XTrain(idx);
mu=mean([XTrain{:
}],2);
sigma=std([XTrain{:
}],0,2);
XTrain=cellfun(@(X)(X-mu)./sigma,XTrain,'UniformOutput',false);
digitDatasetPath=fullfile(matlabroot,'toolbox','nnet',...
'nndemos','nndatasets','DigitDataset');
imds=imageDatastore(digitDatasetPath,...
'IncludeSubfolders',true,...
'LabelSource','foldernames');
numTrainingFiles=750;
[imdsTrain,imdsTest]=splitEachLabel(imds,numTrainingFiles,'randomize');
layers=[...
imageInputLayer([28281])
convolution2dLayer(5,20)
reluLayer
maxPooling2dLayer(2,'Stride',2)
fullyConnectedLayer(10)
softmaxLayer
classificationLayer];
options=trainingOptions('sgdm',...
'MaxEpochs',20,...
'InitialLearnRate',1e-4,...
'Verbose',false,...
'Plots','training-progress');
net=trainNetwork(imdsTrain,layers,options);
YPred=classify(net,imdsTest);
YTest=imdsTest.Labels;
accuracy=sum(YPred==YTest)/numel(YTest)
%
useGPU=true;
dataType='single';
backward=true;
input=InputLayer(struct('batchSize',5,'useGPU',useGPU,'dataType',dataType,'backward',backward,'reverse',true));
embedd1=EmbeddingLayer(struct('hidden_dim',512,'input_dim',input.vocabSize,'useGPU',useGPU,'dataType',dataType,'backward',backward));
rec1=RecurrentLayer(struct('hidden_dim',512,'input_dim',512,'useGPU',useGPU,'dataType',dataType,'backward',backward));
rec2=RecurrentLayer(struct('hidden_dim',512,'input_dim',512,'useGPU',useGPU,'dataType',dataType,'backward',backward));
loss=SoftmaxLayer(struct('hidden_dim',input.vocabSize,'input_dim',512,'useGPU',useGPU,'dataType',dataType,'backward',backward));
%train
MaxIter=10000;
history_cost=zeros(1,MaxIter);fori=1:
MaxIter
tic;
target=input.fprop(struct('reverse',false,'fprop',true));
loss.fprop(rec2.fprop(rec1.fprop(embedd1.fprop(target,size(target,2)),size(target,2)),size(target,2)),size(target,2));
history_cost(1,i)=gather(loss.getCost(target));
display(history_cost(1,i));
embedd1.bprop(rec1.bprop(rec2.bprop(loss.bprop(target))));
loss.update(@SGD);
rec2.update(@SGD);
rec1.update(@SGD);
embedd1.update(@SGD);
toc;
end
模拟结果
传统的比例积分(PI)型控制器由于其简单的控制结构,易于设计和低廉的成本而在工业中广泛使用。
然而,如果受控设备是高度非线性的或者期望的轨迹随着更高的频率变化,则PI型控制器可能不具有令人满意的性能。
对于变速风力涡轮机,通常采用机械致动器来改变叶片的桨距角以控制功率系数。
动态性能测试
图(a)显示了轴速;可以观察到系统跟踪额定发电机速度下的最大功率。
图6(b)显示了最大功率跟踪控制的验证。
图风速剖面的模拟结果:
(a)风廓线速度跟踪,(b)最大功率跟踪控制信号,(c)功率跟踪误差和(d)功率系数Cp。
效率性能测试
图显示了效率性能。
考虑到中高速范围内的转换器损耗几乎为80%。
模拟效率性能:
结论
本文介绍了用于变速风能系统的驱动PMSG系统的设计。
速度控制器设定发电机扭矩指令,这是通过电流控制回路实现的。
所提出的系统已经在实时应用中实现,具有商用PMSG和模拟风力涡轮机行为的直流驱动器。
仿真结果表明该系统具有良好的性能。
动态性能不仅在稳态而且在快速输入时显示出转速的准确估计,而传统的PI控制器不能确定各种风速的不确定性模型。
本研究成功实现了模糊滑模速度和RNN桨距控制器,用于控制WECS。
即使参数不确定,该技术也可以保持系统稳定性并达到所需的性能。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 原创 matlab 递归 神经网络 RNN 实现 控制 风力 发电 机组 研究 数据 分析 报告 论文 代码
![提示](https://static.bdocx.com/images/bang_tan.gif)
链接地址:https://www.bdocx.com/doc/4189728.html