Prognostizieren Sie Gezeitentiefen mithilfe von ThingSpeak -Daten
Dieses Beispiel zeigt, wie die Gezeitentiefe in der Ockway Bay mithilfe von in einem ThingSpeak™ -Kanal gespeicherten Daten vorhergesagt wird. Die Vorhersage von Gezeitentiefen 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 Ockway Bay Echtzeit-Gezeitenmesser
Der 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 Gezeitentiefendaten. Lesen Sie die Daten mit der Funktion thingSpeakRead
aus Kanal 50289 an einem bestimmten Tag, zum Beispiel dem 1. 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 Datenmittelwert 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 Versatz 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
Prognostizieren Sie die Gezeitentiefe
Verwenden Sie die Funktion forecast
, um die Gezeitentiefe für den nächsten Tag vorherzusagen. Legen Sie die Anzahl der Stichproben der Vorhersagedaten 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. Führen Sie vor dem Plotten einen erneuten Trend der Daten durch.
numSamples = 288; [yf,x0,sysf,yf_sd,x,x_sd] = forecast(sys,IDdata,numSamples); IDdata = retrend(IDdata,trend); yf = retrend(yf,trend);
Zeichnen Sie die prognostizierte Reaktion auf
Zeichnen Sie die gemessenen Daten zusammen mit den prognostizierten Gezeitendaten auf. Zeichnen Sie außerdem die eine 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 einer Standardabweichung der Unsicherheitsgrenzen.