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.