input and feedback delay in narxnet
4 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Richa Singh
el 18 de Ag. de 2017
Comentada: Greg Heath
el 22 de Ag. de 2017
if true
% code
endHello,
I have recently started working on neural network with MATLAB. I am dealing with gas turbine dynamic model and facing problems in determining optimal value of input and feedback delays. I have gone through similar posts that suggests to look for target auto-correlation and input target cross-correlation but I am unable to read the graph to determine delays.I am attaching the graph for target auto-correlation and input target cross-correlation along with the code.(Code is taken from one of the example given for simplenarx data)
close all, clear all, clc,
tic
plt=0;
%[X,T] = simplenarx_dataset; % simplenarx_dataset;
load GT_complete.dat %data
FuelFlowLhr = GT_complete(:,12);
N1RPM = GT_complete(:,15);
x_1 = FuelFlowLhr(150:800,:);
t_1 = N1RPM(150:800,:);
X1 = x_1';
T1 = t_1';
X = con2seq(X1);
T = con2seq(T1);
x = cell2mat(X);
t = cell2mat(T);
[ I N ] = size(x); % [ 1 651 ]
[ O N ] = size(t); % [ 1 651 ]
% Define data for training
Ntrn = N-2*round(0.15*N) % Default 0.7/0.15/0.15 trn/val/tst ratios
trnind = 1:Ntrn;
Ttrn = T(trnind);
Ntrneq = prod(size(Ttrn)) % Product of element
MSE00 = var(t',1) % 0.1021
% Calculate Z-Score for input (x) and target (t)
zx = zscore(x, 1);
zt = zscore(t, 1);
zxtrn = zscore(x(trnind), 1);
zttrn = zscore(t(trnind), 1);
% Plot Input & Output for both original and transformed (Z-scored)
plt = plt+1,figure(plt);
subplot(221)
plot(x)
title('Fuelflow INPUT SERIES')
subplot(222)
plot(zx)
title('STANDARDIZED INPUT SERIES')
subplot(223)
plot(t)
title('RPM OUTPUT SERIES')
subplot(224)
plot(zt)
title('STANDARDIZED OUTPUT SERIES')
rng('default')
L = floor(0.95*(2*N-1))
for i = 1:1000 % Number of repetations to use for estimating summary statistics
% This is for Target (T) Autocorrelation
n = zscore(randn(1,N),1);
autocorrn = nncorr( n,n, N-1, 'biased');
sortabsautocorrn = sort(abs(autocorrn));
thresh95T(i) = sortabsautocorrn(L);
% This is for Input-Target (IT) Crosscorelation
nx = zscore(randn(1,N),1);
nt = zscore(randn(1,N),1);
autocorrnIT = nncorr( nx,nt, N-1, 'biased');
sortabsautocorrnIT = sort(abs(autocorrnIT));
thresh95IT(i) = sortabsautocorrnIT(L);
end
% For Target Autocorrelation
sigTthresh95 = median(thresh95T)
meanTthresh95 = mean(thresh95T)
minTthresh95 = min(thresh95T)
medTthresh95 = median(thresh95T)
stdTthresh95 = std(thresh95T)
maxTthresh95 = max(thresh95T)
% For Input-Target Autocorrelation
sigITthresh95 = median(thresh95IT)
meanITthresh95 = mean(thresh95IT)
mintIThresh95 = min(thresh95IT)
medtIThresh95 = median(thresh95IT)
stdtIThresh95 = std(thresh95IT)
maxtIThresh95 = max(thresh95IT)
%%CORRELATIONS
%%%%%TARGET AUTOCORRELATION %%%%%%%
%
autocorrt = nncorr(zttrn,zttrn,Ntrn-1,'biased');
sigflag95 = -1+ find(abs(autocorrt(Ntrn:2*Ntrn-1))>=sigTthresh95);
sigflag95(sigflag95==0)=[];
%
plt = plt+1, figure(plt);
hold on
plot(0:Ntrn-1, -sigTthresh95*ones(1,Ntrn),'b--')
plot(0:Ntrn-1, zeros(1,Ntrn),'k')
plot(0:Ntrn-1, sigTthresh95*ones(1,Ntrn),'b--')
plot(0:Ntrn-1, autocorrt(Ntrn:2*Ntrn-1))
plot(sigflag95,autocorrt(Ntrn+sigflag95),'ro')
title('SIGNIFICANT TARGET AUTOCORRELATIONS (FD)')
%
%%%%%%INPUT-TARGET CROSSCORRELATION %%%%%%
%
crosscorrxt = nncorr(zxtrn,zttrn,Ntrn-1,'biased');
sigilag95 = -1 + find(abs(crosscorrxt(Ntrn:2*Ntrn-1))>=sigITthresh95)
plt = plt+1, figure(plt);
hold on
plot(0:Ntrn-1, -sigITthresh95*ones(1,Ntrn),'b--')
plot(0:Ntrn-1, zeros(1,Ntrn),'k')
plot(0:Ntrn-1, sigITthresh95*ones(1,Ntrn),'b--')
plot(0:Ntrn-1, crosscorrxt(Ntrn:2*Ntrn-1))
plot(sigilag95,crosscorrxt(Ntrn+sigilag95),'ro')
title('SIGNIFICANT INPUT-TARGET CROSSCORRELATIONS (ID)')
0 comentarios
Respuesta aceptada
Greg Heath
el 19 de Ag. de 2017
1. Ntrn ~ 0.7*651 ~ 456
2. Use Ntrn for significant correlation threshold estimates
3. 1000 repetitions seems extreme. How much difference if
you only use 100 or 200?
4. Mislabeled crosscorr as autocorr
5. Print out all significant correlations. Do not try to
read them from the graphs.
Hope this helps.
Thank you for formally accepting my answer*
Greg
2 comentarios
Bhagyashri Somani
el 19 de Ag. de 2017
Can you please clarify the point 5.
'Print out all significant correlations. Do not try to read them from the graphs.'
How to do that?
Greg Heath
el 22 de Ag. de 2017
If you design hundreds like I do, it is ridiculous to try to read values from graphs.
To print them out just leave off the ending semicolon.
Greg
Más respuestas (0)
Ver también
Categorías
Más información sobre Linear Algebra en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!