Main Content

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

Prévoir les profondeurs des marées à l'aide des données ThingSpeak

Cet exemple montre comment prévoir la profondeur des marées à Ockway Bay à l'aide des données stockées dans un canal ThingSpeak ™. Prévoir la profondeur des marées est vital : si vous n'êtes pas conscient de la profondeur de l'eau, votre bateau peut facilement rester coincé dans la vase d'une baie peu profonde.

Lire les données du marégraphe en temps réel d'Ockway Bay

Le canal ThingSpeak ™ 50289 contient des données sur la profondeur des marées à Ockway Bay. Les données sont collectées une fois toutes les 5 minutes. Le champ 1 du canal contient des données sur la profondeur des marées. Lisez les données à l'aide de la fonction thingSpeakRead du canal 50289 un jour particulier, par exemple le 1er juillet 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);

Ajuster un modèle AR aux données

Utilisez la fonction iddata pour créer un objet iddata des données de profondeur de marée. Utilisez detrend sur les données pour que les données soient moyennes à zéro. Étant donné que la profondeur de marée varie avec le temps, utilisez la fonction ar pour ajuster un modèle autorégressif en temps discret aux données. Capturez le décalage avant de supprimer la tendance, puis ajustez un modèle AR pour représenter le système.

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                         
                                       

Prévoir la profondeur des marées

Utilisez la fonction forecast pour prévoir la profondeur des marées pour le lendemain. Définissez le nombre d'échantillons des données de prévision sur 288 car les données de profondeur de marée mesurées sont mises à jour toutes les 5 minutes. yf est la réponse prévue du modèle, et yf_sd est l'écart type de la sortie. Retendre les données avant de tracer.

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

Tracer la réponse prévue

Tracez les données mesurées avec les données de marée prévues. Tracez également le seul écart type des incertitudes du modèle prévu.

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

Ce graphique montre la réponse mesurée et prévue du système ainsi que les limites d'incertitude d'un écart type.

Voir aussi

Fonctions

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