Contenuto principale

Questa pagina è stata tradotta con la traduzione automatica. Fai clic qui per vedere l’originale in inglese.

Previsione delle profondità delle maree utilizzando i dati ThingSpeak

Questo esempio mostra come prevedere la profondità della marea a Ockway Bay utilizzando i dati memorizzati in un canale ThingSpeak ™. È fondamentale prevedere la profondità delle maree: se non si conosce la profondità dell'acqua, la barca può facilmente rimanere incastrata nel fango in una baia poco profonda.

Leggi i dati dal mareografo in tempo reale di Ockway Bay

Il canale 50289 di ThingSpeak ™ contiene dati sulla profondità delle maree a Ockway Bay. I dati vengono raccolti ogni 5 minuti. Il campo 1 del canale contiene i dati sulla profondità delle maree. Leggere i dati utilizzando la funzione thingSpeakRead dal canale 50289 in un giorno specifico, ad esempio il 1° luglio 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);

Adattare un modello AR ai dati

Utilizzare la funzione iddata per creare un oggetto iddata dei dati sulla profondità delle maree. Utilizzare detrend sui dati per far sì che la media dei dati sia zero. Poiché la profondità della marea varia nel tempo, utilizzare la funzione ar per adattare un modello autoregressivo a tempo discreto ai dati. Acquisire l'offset prima del detrending e quindi adattare un modello AR per rappresentare il sistema.

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                         
                                       

Prevedere la profondità delle maree

Utilizzare la funzione forecast per prevedere la profondità della marea per il giorno successivo. Impostare il numero di campioni dei dati di previsione su 288 poiché i dati sulla profondità di marea misurata vengono aggiornati ogni 5 minuti. yf è la risposta del modello previsto e yf_sd è la deviazione standard dell'output. Rivedere i dati di tendenza prima di tracciarli.

numSamples = 288;
[yf,x0,sysf,yf_sd,x,x_sd] = forecast(sys,IDdata,numSamples);
IDdata = retrend(IDdata,trend);
yf = retrend(yf,trend);

Tracciare la risposta prevista

Rappresentare graficamente i dati misurati insieme ai dati di marea previsti. Rappresentare anche la deviazione standard delle incertezze del modello previsto.

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');

Questo grafico mostra la risposta del sistema misurata e prevista insieme ai limiti di incertezza di una deviazione standard.

Vedi anche

Funzioni

  • | (System Identification Toolbox) | (System Identification Toolbox) | (System Identification Toolbox) | (System Identification Toolbox) | (System Identification Toolbox) | (System Identification Toolbox)