Main Content

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

Pronosticar las profundidades de las mareas utilizando datos de ThingSpeak

Este ejemplo muestra cómo pronosticar la profundidad de las mareas en Ockway Bay utilizando datos almacenados en un canal ThingSpeak™. Predecir la profundidad de las mareas es vital: si no eres consciente de la profundidad del agua, tu barco puede quedarse atascado fácilmente en el barro en una bahía poco profunda.

Leer datos del mareógrafo en tiempo real de Ockway Bay

El canal ThingSpeak™ 50289 contiene datos sobre la profundidad de las mareas en Ockway Bay. Los datos se recopilan una vez cada 5 minutos. El campo 1 del canal contiene datos de profundidad de marea. Leer los datos usando la función thingSpeakRead del canal 50289 en un día en particular, por ejemplo, 01 de julio de 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);

Ajustar un modelo AR a los datos

Utilice la función iddata para crear un objeto iddata de los datos de profundidad de marea. Utilice detrend en los datos para que los datos tengan una media cero. Dado que la profundidad de la marea varía con el tiempo, utilice la función ar para ajustar un modelo autorregresivo de tiempo discreto a los datos. Capture el desplazamiento antes de eliminar la tendencia y luego ajuste un modelo AR para representar el 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                         
                                       

Pronosticar la profundidad de las mareas

Utilice la función forecast para pronosticar la profundidad de la marea para el día siguiente. Establezca el número de muestras de los datos de pronóstico en 288, ya que los datos de profundidad de marea medidos se actualizan una vez cada 5 minutos. yf es la respuesta prevista del modelo y yf_sd es la desviación estándar de la salida. Vuelva a modificar la tendencia de los datos antes de trazarlos.

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

Trazar la respuesta prevista

Trazar los datos medidos junto con los datos de marea pronosticados. Trace también la desviación estándar de las incertidumbres del modelo pronosticado.

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

Este gráfico muestra la respuesta del sistema medida y pronosticada junto con los límites de incertidumbre de una desviación estándar.

Consulte también

Funciones

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