Gezeitentiefen mit ThingSpeak-Daten vorhersagen
Dieses Beispiel zeigt, wie die Gezeitentiefe in der Ockway Bay mithilfe von in einem ThingSpeak™-Kanal gespeicherten Daten vorhergesagt wird. Die Vorhersage der Gezeitentiefe ist von entscheidender Bedeutung: Wenn Sie die Wassertiefe nicht kennen, kann Ihr Boot in einer flachen Bucht leicht im Schlamm stecken bleiben.
Lesen Sie Daten vom Echtzeit-Gezeitenmesser der Ockway Bay
ThingSpeak ™ Kanal 50289 enthält Daten zur Gezeitentiefe in der Ockway Bay. Die Daten werden alle 5 Minuten erfasst. Feld 1 des Kanals enthält Daten zur Gezeitentiefe. Lesen Sie die Daten mit der Funktion thingSpeakRead aus Kanal 50289 an einem bestimmten Tag, beispielsweise dem 01. Juli 2016.
startDate = datetime('July 1, 2016 12:01:00 AM'); endDate = datetime('July 2, 2016 12:02:00 AM'); dateRange = startDate:endDate; data = thingSpeakRead(50289,'DateRange',dateRange,'Fields',1);
Passen Sie ein AR-Modell an die Daten an
Verwenden Sie die Funktion iddata, um ein IDData-Objekt der Gezeitentiefendaten zu erstellen. Verwenden Sie detrend für die Daten, um den Mittelwert der Daten auf Null zu setzen. Da die Gezeitentiefe mit der Zeit variiert, verwenden Sie die Funktion ar, um ein zeitdiskretes autoregressives Modell an die Daten anzupassen. Erfassen Sie den Offset vor der Trendbereinigung und passen Sie dann ein AR-Modell an, um das System darzustellen.
sampleTime = 5; IDdata = iddata(data,[],sampleTime,'OutputName',{'Tidal Depth'},'TimeUnit','minutes') trend = getTrend(IDdata,0); IDdata = detrend(IDdata,0); modelOrder = 8; sys = ar(IDdata,modelOrder);
IDdata =
Time domain data set with 288 samples.
Sample time: 5 minutes
Outputs Unit (if specified)
Tidal Depth
Vorhersage der Gezeitentiefe
Verwenden Sie die Funktion forecast, um die Gezeitentiefe für den nächsten Tag vorherzusagen. Legen Sie die Anzahl der Stichproben der Prognosedaten auf 288 fest, da die gemessenen Gezeitentiefendaten alle 5 Minuten aktualisiert werden. yf ist die prognostizierte Modellantwort und yf_sd ist die Standardabweichung der Ausgabe. Überprüfen Sie den Trend der Daten vor dem Plotten.
numSamples = 288; [yf,x0,sysf,yf_sd,x,x_sd] = forecast(sys,IDdata,numSamples); IDdata = retrend(IDdata,trend); yf = retrend(yf,trend);
Plotten Sie die prognostizierte Antwort
Stellen Sie die gemessenen Daten zusammen mit den prognostizierten Gezeitendaten grafisch dar. Plotten Sie auch die Standardabweichung der Unsicherheiten des prognostizierten Modells auf.
figure; UpperBound = iddata(yf.OutputData+1*yf_sd,[],yf.Ts,'Tstart',yf.Tstart,'TimeUnit','minutes'); LowerBound = iddata(yf.OutputData-1*yf_sd,[],yf.Ts,'Tstart',yf.Tstart,'TimeUnit','minutes'); plot(IDdata(:,:,[]),'r',yf(:,:,[]),'b'); hold on plot(UpperBound,'k--',LowerBound,'k--'); legend({'measured','forecasted','1 sd uncertainty'},'Location','best'); xlabel('Time'); ylabel('Tidal depth (inches)'); title('Measured and Forecasted Tidal Wave Depths');

Dieses Diagramm zeigt die gemessene und prognostizierte Systemreaktion zusammen mit den Unsicherheitsgrenzen einer Standardabweichung.