Hace unos días recuperé un antiguo script de Matlab para realizar un análisis de armónicos de marea astronómica con la sorpresa de que, al ejecutarlo, obtenía un error donde antes no había problema. Por tanto, decidí buscar en la red algún otro script, guía o foro para solucionarlo, sin mucho éxito y sin encontrar apenas información. Finalmente conseguí solucionarlo y me motivé para dejar a medias la entrada que estaba preparando y abordar este tema en una nueva entrada en el blog.
La descripción y análisis de la marea resulta imprescindible en la mayoría de los estudios costeros, siendo especialmente interesante en los estudios de estuarios y desembocaduras. El objetivo de este post consiste en ofrecer una guía rápida y sencilla para realizar un análisis de armónicos de la marea astronómica usando la herramienta T_TIDE [1,3] en Matlab (que además es libre).
.
Puesta a punto antes de comenzar
El nivel de marea se puede definir como el nivel del mar sin tener en cuenta la acción del oleaje, y resulta al considerar la marea astronómica y la marea meteorológica.
La marea meteorológica es de tipo aleatorio y se define como la oscilación del nivel del mar inducida por la acción de gradientes de presión atmosférica (marea barotrópica) o por la tensión tangencial del viento sobre la superficie del agua.
La marea astronómica es de carácter determinista y se define como la oscilación periódica del nivel del mar inducida por fuerzas gravitacionales que actúan sobre las partículas de agua en la superficie de la Tierra.
El estudio de la marea astronómica puede abordarse desde tres puntos de vista:
a) Teoría de equilibrio de Newton (1686) basado en las fuerzas generadoras de la marea.
b) Teoría dinámica (Laplace, Bernouilli, Euler): Resolución de las ecuaciones fundamentales de la hidrodinámica.
c) Análisis armónico: Basado en las componentes periódicas de la marea.
El análisis de armónicos es el método más práctico para el estudio de la marea astronómica. Se basa en el conocimiento de que la marea observada está formada por un número de componentes armónicas cuyos periodos han sido perfectamente establecidos y que coinciden con los períodos de algunos de los movimientos astronómicos relativos entre tierra-sol-luna.
La marea astronómica se aproxima por:
donde:
En la siguiente tabla se muestran los componentes armónicos principales:
Partiendo de un registro del nivel del mar y de la elección de N componente (mediante un análisis espectral), el análisis de armónicos consiste en realizar un ajuste por mínimos cuadrados, es decir, calcular minimizando el cuadrado de las diferencias entre los niveles observados y los estimados en el método [1].
A continuación se detallan los pasos para realizar un análisis espectral de marea astronómica de forma sencilla y eficaz mediante la herramienta T_TIDE.
Pasos de un análisis de armónicos con T_TIDE
1. Definimos los objetivos que se conseguirán tras el análisis:
- Descomposición de la variación del nivel del mar en la componente astronómica y la componente meteorológica.
- Descomposición de la marea astronómica en sus componentes armónicas
- Selección de los armónicos principales
2. Obtención de la herramienta
Descargamos la herramienta T_TIDE en la siguiente dirección: http://www.eos.ubc.ca/~rich/t_tide/t_tide_v1.1.zip
3. Obtención de los datos de entrada
La entrada de esta herramienta consiste en la variación del nivel del mar de la zona de estudio.
Puertos del estado posee una red de mareógrafos de con información de nivel del mar en diferentes puntos alrededor de la península y de diferentes años.
A nivel global, el Centro de Variación del Nivel del Mar de la Universidad de Hawaii posee información de mareógrafos de todo el mundo.
El ejemplo que se analiza en este post corresponde a datos del mareógrafo de Valencia del año 1997 (pinche aquí para descargarlo).
4. Realizamos un script en Matlab para el pre y prostproceso
Utilizar la función T_TIDE en Matlab es muy sencillo. Siguiendo las instrucciones de sus autores, básicamente hay que llamar a la función de la siguiente forma:
[NAME,FREQ,TIDECON,XOUT]=T_TIDE(XIN])
o de la siguiente forma para que lo almacene en un archivo:
[NAME,FREQ,TIDECON,XOUT]=T_TIDE(XIN,’output’,’nombrefichero.txt’)
NAME es nombre del armónico
FREQ es la frecuencia
TIDECON la amplitud y fase con sus respectivos errores
XOUT la serie temporal de marea astronómica
XIN la serie temporal de variación de nivel del mar (los datos de entrada del mareógrafo)
Cada uno puede elaborarse su script de pre y postproceso para analizar los resultados. A continuación os ofrezco mi script con explicaciones detalladas de su uso (pinche aquí para descargar el script). Para usarlo, únicamente hay que modificar los directorios de las carpetas y los nombres de los ficheros. Los apartados a modificar se señalan de la siguiente forma:
%%%%%%%%%%%%%%%%%%%Modificar%%%%%%%%%%%%%%%%%%%%
cosas a modificar…
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
No olviden que hay que guardar este script dentro de la carpeta t_tide_v1.1 para llamar a la función T_TIDE.
5. Obtención de resultados
– Documento con la lista completa de armónicos, donde se detalla el nombre, frecuencia, amplitud y fase.
(pinchar aquí para descargar los resultados del ejemplo propuesto)
– Representación gráfica de las series temporales de variación del nivel del mar, merea astronómica y marea meteorológica.
Con la frecuencia, amplitud y fase de los armónicos más representativos, representamos la marea astronómica como la suma de armónicos.
Además, A partir de la amplitud de los principales armónicos diurnos (K1 y O1) y semidirunos (M2 y S2) es posible calcular un parámetro denominado factor de forma (F) que define que tipo de componentes dominan la marea.
En función del valor del factor de forma F, la marea astronómica suele clasificarse en: marea de
tipo semidiurno (F≤0,25), marea de tipo mixto con predominio semidiurno (0,25 < F < 1,5),
marea de tipo mixto con predominio diurno (1,5<F<3) y marea de tipo diurna (F>3).
En este caso, tenemos una marea de tipo diurno, con un factor de forma F=2,3. El armónico principal es el K1 (24h).
Para cualquier duda no duden en escribirme 😉
¡Y si os ha sido útil también! ¡¡Que me pongo muy contenta!! 😀
Anexo: El error que antes no ocurría
Como expliqué al principio, la motivación para escribir esta entrada fue la aparición de un error al llamar a la función T_TIDE que antes no ocurría. Supuse que podría ser de la versión de Matlab. Aún no sé exactamente si la causa es esa, pero si al utilizar T_TIDE os da un error al utilizar debido a “finite”, no hay nada más que entrar en el código T_TIDE y sustituir todos los “finite” por “isfinite”, de este modo se soluciona el problema y el programa funcionará correctamente.
Referencias:
[1] R. Pawlowicz, B. Beardsley, and S. Lentz, “Classical tidal harmonic analysis including error estimates in MATLAB using T_TIDE”, Computers and Geosciences 28 (2002), 929-937.
[2] Atlas de inundación del litoral peninsular español. Grupo de Ingeniería Oceanográfica y Costas, Universidad de Cantabria.
[3] Web T_TIDE: Rich Pawlowicz’s Matlab Stuff
I personally seem to go along with all the stuff that
ended up being put into writing throughout Bamboo Shades “Análisis de armónicos de marea astronómica con T_TIDE | Fluyendo Libre-mente”.
I am grateful for all the actual info.Thank you,Freddie
Hola Isabel Como es el formato del archivo .txt para que el matlab reconosca fecha y desnivelaciones?
Saludos
Hola Sebastian, muchas gracias por tu comentario porque había un error en el enlace del fichero de entrada que estaba enlazado con el de salida, ya está corregido. Ahora puedes ver cual es el formato del archivo .txt de fechas y variaciones del nivel del mar. Un saludos.
Excelente post! fácil de entender y con ejemplo.
Muchas gracias Isabel!!!…..soy un estudiante de doctorado, y buscando por la red he caído en tu blog como el que cae en un paraíso…el tutorial de T_Tide es exactamente lo que necesitaba!
Espero poder ayudar a alguien algún día con lo que hago como tu has hecho conmigo!…hay algo más bonito que eso?
Muchas gracias de nuevo!
Saludos!
Muchas gracias Juanpe, comentarios como el tuyo me animan mucho a darle caña al blog, en los próximos días lo voy a retomar con muchas ganas. Saludos!!
Isabel, muchas gracias por tu aporte, nos ayudaste a resolver un inconveniente que teníamos para poder correr la rutina
Excelente, gran aporte
Me olvidaba hay algunas cosas del script que me dejan con dudas espero me puedas dar una ayuda 😀
Por supuesto! Pregunta! O si lo prefieres en el apartado “Sobre mi” tienes mi mail.
Buenas! estoy realizando una tesina donde analizo datos de las columnas de agua obtenidos por unos correntimetros fondeados en la desembocadura del Nervión en Bilbao, donde esta el puerto. Uno de ellos esta fondeado ya en aguas abiertas a unos 67 m de prof. y no consigo explicar porque la columna de agua gira hacia la izquierda, contrariamente a lo establecido por la espiral de Ekman que tendria que girar a la derecha por estar en Hemisferio Norte.
Toda idea puede ser de gran ayuda. Mil gracias!!
Buenas! estoy realizando una tesina sobre el analisis de las columnas de agua medidas por unos correntimetros en la desembocadura del río Nervión, en el puerto de Bilbao y sus alrededores y me han surgido unas dudas con los resultados de un conrrentimetro. Esta fondeado ya en aguas abiertas justo delante de la desembocadura y fuera del puerto a unos 67m de profundidad. El caso es que los resultados obtenidos muestran un giro a la izquierda de la columna de agua, contrariamente a lo establecido por la espiral de Ekman, que deberia girar a la derecha por estar en Hemisferio Norte. Para el analisis he utilizado el tutorial de MATLAB WORLD CURRENTS, muy parecido al WORLD TIDES pero lee velocidades en lugar de datos de superficie.
Cualquier idea puede ser de gran ayuda! Mil gracias!
Hola Albert, en la desembocadura, puede haber efecto de la escorrentía del flujo de agua dulce hacia el mar, es importante saber si hay variaciones estacionales en el flujo de la desembocadura. Sin dudas pueden haber importantes forzantes mareales, pero se debe tener claro a que profundidad de superficie y del fondo quedó el equipo. Si está cerca de superficie puede haber inducción de movimiento por forzamiento superficial (Shear stress del viento), si quedó próxima a fondo incluso podrían existir contracorrientes por stress sobre el fondo de la propia corriente.
Saludos
Cordial saludos, ijalonrojas.
Interesante tu post y realmente de gran ayuda. ¿Tienes algún formato de ejemplo para correr el scrit de Matlab con información descargada del “Centro de Variación del Nivel del Mar de la Universidad de Hawaii” ?
Muchas gracias por tu ayuda.
Att;
Kastor.
Hola, tengo una consulta. Si la serie original quiero quitarle todos los armónicos de la marea, que tendría hacer.
saludos
Hola Juan, no sé por qué pero no había visto tu mensaje hasta ahora, lo siento, la verdad es que suelo contestar bastante rápido. Aunque sea un poco tarde te respondo: si quitamos todos los armónicos a la serie original lo que estamos haciendo es quitar la componente astronómica o determinística y calculando la marea meteorológica. Para eso hay un paso en el script, es el paso 5 (variable meteo). Espero poderte haber ayudado aunque sea con tanto retraso. Un saludo!
Hola, gracias por la ayuda. Tengo una consulta adicional.
A la serie del mareógrafo quiero remover o quitar la marea astronómica (esto lo realizo t_tide) y la marea meteorológica, mi consulta es: como quito el efecto de la marea meteorológica a los datos del mareografo?
Hola Juan, pues si quitamos la marea meteorológica a los datos del mareógrafo solo quedaría la astronómica, que nos lo da ya T_TIDE (variable XOUT del script). Si esa no era tu pregunta me vuelves a escribir. Saludos!
hola isabel, yo estoy tratando de hacer un análisis de armónicos con la funcion T_Tide en matlab, la verdad es que soy nuevo usando matlab, en esta parte %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Modificar%%%%%%%%%%%
path_par=’F:\t_tide_v1.1\’; %directorio del fichero de entrada
fichero=’REMAR_HOR_HIS_Valencia97.txt’; %nombre del fichero de entrada
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% que debo poner yo ?
en realidad quiero hacer un script propio para mis zona de estudio y estoy un poco en blanco..
cualquier ayuda eternamente agradecido …
Hola César, en “path_par” deberías poner el directorio de la carpeta donde guardas el fichero de tus datos de partida, y en “fichero” el nombre del fichero que almacena tus propios datos. Si es un fichero que viene de la red REDMAR al igual que el mío, mi script puede servirte sin modificar prácticamente nada. En caso contrario, si tienes problemas, puedes volverme a escribir para ver si puedo echarte una mano. Ya me cuentas qué tal te va. ¡Saludos!
Muchas Gracias por el aporte, me ha servido mucho para mi trabajo. Solo tengo una pequeña duda, cuando explicas sobre las variables de T_TIDE mencionas que la salida XOUT es la serie temporal de marea meteorológica, pero en tus comentarios explicas que T_TIDE te da la marea astronómica lo cual sería la salida XOUT. Además en el script pones “meteo = nivelmar-XOUT”. Entonces XOUT es la serie temporal de marea astronómica????
Muchas gracias por tu comentario Katherine, efectivamente hay un error en la explicación de las variables. XOUT es la serie temporal de marea astronómica y no meteorológica, el error ya está corregido 😉 Saludos!!
Hola Isabel, excelente blog, es de gran utilidad. Respecto a la salida denominada XOUT, he visto que está corregido en el cuerpo del blog, sin embargo en el script que anexas sigue diciendo que “En XOUT se guarda la serie temporal de marea meteorológica”, lo que podría ocasionar confusión. Muchas gracias por tu ayuda.
Hola Lida, gracias por tu comentario, intentaré corregirlo lo antes posible. Saludos
Hola, Isabel. Muchas gracias por toda información.
Tan sólo una consulta. Respecto al análisis general de series temporales, se recomienda que sea de al menos 1 año para que sea “representativo”. ¿Es posible el uso de la función t_tide para series temporales de sólo meses y no es representativo? Mi intención es filtrar el efecto de los componentes mayoritarios de la marea de mis datos.
Gracias y un cordial saludo,
Alberto.
Hola Alberto,
gracias por tu comentario. Pues como bien dices, mientras más larga sea la serie temporal, más “representativa” es la descomposición de armónicos. Aún así puedes usarla para menos tiempo, asumiendo las limitaciones que pueden suponer, como el filtrado de los armónicos de gran periodo.
Por otro lado, si tu objetivo es comparar los armónicos de dos periodos distintos de un mismo año, ahora hay algoritmos más sofisticados que hacen análisis de armónicos no estacionarios (NS_TIDE), es decir, te dan la variación temporal de la amplitud y fase de los armónicos. Te dejo la referencia por si pudiera interesarte. Matte, P., Jay, D.A., Zaron, E.D., 2013. Adaptation of classical tidal harmonic analysis to nonstationary tides, with application to river tides. J. Atmos. Ocean. Technol. 30, 569–589. doi:10.1175/JTECH-D-12-00016.1
En esta artículo por ejemplo, aplican T_TIDE en cortos periodos de tiempo, así como el NS_TIDE: Guo, L., Van-der-Wegen, M., Jay, D.A., Matte, P., Wang, Z.B., Roelvink, D., He, Q., 2015. River-tide dynamics: Exploration of nonstationary and nonlinear tidal behavior in the Yangtze River estuary. J. Geophys. Res. – Ocean. 120, 3499–3521. doi:10.1002/2014JC010491
Espero haberte podido ayudar.
Saludos,
Isabel
Muchas gracias, me ha sido muy útil.
Un cordial saludo.
Holaaa, quería consultar si sabes como incorporar las constituyentes de aguas someras, mediante “shallow”.
Hola Michelle, creo que respondo a tu pregunta un poco tarde, no vi pasar en mi correo la notificación y hasta ahora no me he dado cuenta. Lo siento. Pues para incluir los componentes de aguas someras sólo tienes que incluir la propiedad ‘shallow’ como bien indicas y a continuación la lista componentes a incluir entre corchetes. Ahí va un ejemplo:
[NAME,FREQ,TIDECON,XOUT]=t_tide(nivelmar,’shallow’,{‘M10});
Siento de nuevo el retraso.
Un saludo
Saludos si alguien podría darme el Link para descargar el software Open source Gnotide…Saludos desde Costa Rica…..
Hola a tod@s!
Hace ya un tiempo le pregunté a Isabel sobre esta magnífica ayuda. Me sirvió de mucho en su día, y me abrió más puertas de investigación. En cuanto a esto, he utilizado otros códigos, como el NS_TIDE que comenta Isabel, pero Alberto, si lo que quieres es usar directamente tus datos de velocidades y direcciones, te aconsejo U_TIDE:
http://www.po.gso.uri.edu/~codiga/utide/utide.htm
Está basado en T_TIDE, pero incluye varias mejoras y además te permite trabajar con velocidad y dirección. Además, tiene un archivo PDF (U_TIDE Report, Codiga 2011) muy bien explicado.
Espero haber ayudado, al igual que Isabel me ayudó a mi!
Saludos.
Gracias por tu comentario Juampe, sin ninguna duda actualmente es mucho mejor utilizar U_TIDE que como dices contiene varias mejoras. Yo aún no lo he usado porque no me ha vuelto a hacer falta utilizar un análisis de armónicos estacionario (ahora estudio estuarios para los que es mucho más útil utilizar análisis no estacionarios) pero me consta que se usa de manera similar a T_TIDE, así que al igual que Juampe os animo a utilizar esta nueva versión de análisis de armónicos. Y por supuesto mi blog está disponible para todo comentario al respecto 😉
Gracias Isabel!
En cuanto a procesos no estacionarios, has utilizado Continuous Wavelet Transform?
Yo lo estoy utilizando como herramienta de filtrado para datos de nivel piezométrico afectado por la marea. De momento me ha resultado muy útil, aunque he tenido que desarrollar algunos scripts para adaptarlo a este fin, y que aún tengo en desarrollo.
Era solo eso, por si te sirve de algo la idea. Y si tienes conocimiento de algún trabajo en especial que exista sobre esto, me vendría bien saberlo!
Gracias de nuevo!
Juampe.
Pues precisamente en mi último artículo he probado varias técnicas espectrales para el análisis de series temporales de alta frecuencia en medio acuáticos, entre ellas la CWT. Te adjunto el link. Si no tienes acceso al documento completo y te interesa puedo enviártelo por email. A ver si cuando acabe la tesis me tomo unas vacaciones y hago tutoriales sobre todas estas técnicas.
http://onlinelibrary.wiley.com/doi/10.1002/lom3.10097/abstract
Saludos!!
Tengo una pregunta, a partir de las salidas del T_tide quiero calcular el residual. Residuo = Nivel del Mar – Predicción, mi duda es como calcular la predicción? para obtener la residual
Buenas noches Isabel, muy interesante tu blog, una excelente iniciativa.
Aprovecho para hacerte una consulta. El script t_readme de T_tide indica que las correcciones nodales realizadas con la aplicación no pueden ser demasiado precisas para series temporales mayores a 1 año, y sugiere por tanto que si se necesita realizar correcciones nodales (periodos inferiores a 19 años) es preciso partir la serie en secciones anuales; y que si no se necesitan las correcciones por contar con series más largas de lo indicado debe reescribirse el código para que todos los componentes se analicen sin corrección nodal.
Debo analizar una serie superior a 19 años y no sé qué parte del código de T_tide se debe modificar para realizar el análisis con la serie completa.
Te agradecería si me pudieras ayudar,
Saludos,
Hola Lida,
muchas gracias por tu comentario. Nunca he utilizado series temporales tan largas y por tanto nunca he necesitado la corrección nodal, pero creo que hay que incluir dos opciones adicionales cuando llamamos a la función t_tide: la fecha (en formato matlab, datenum) del inicio de la serie temporal y la latitud de tus datos. Te escribo la descripción literal de los autores:
% ‘start time’ [year,month,day,hour,min,sec]
% – min,sec are optional OR
% decimal day (matlab DATENUM scalar)
% ‘latitude’ decimal degrees (+north) (default: none).
Te pongo un ejemplo:
fecha_ini=datenum([2016 7 4 10 0 0]); %imaginemos que ésta es la fecha inicial de tus medidas
[NAME,FREQ,TIDECON,XOUT]=t_tide(nivelmar,’start time’,fecha_ini,’latitude’,45);
o bien
[NAME,FREQ,TIDECON,XOUT]=t_tide(nivelmar,’start time’,[2016 7 4 10 0 0],’latitude’,45);
Espero que te funcione. Suerte y saludos!
Isabel
Isabel muchísimas gracias por tu orientación, eres muy amable.
Hola Isabel, quería hacerte una pregunta.
Has descrito el uso de la función “t_tide” de Pawlowicz & cia. para describir y analizar las mareas. Dices claramente que la XOUT constituye la “marea astronómica”, por tanto si la restamos de nuestra señal original, obtendremos la “marea meteorológica”. He estado leyendo literatura al respecto y nombran mucho los “residuals” y en la mayoría de fuentes afirman que es simplemente la resta de la “señal original” – la “predicción” = ¿marea meteorológica?
Además de niveles de marea, estoy trabajando con datos de velocidades de corriente provenientes de Gliders. He visto que algunos autores han sido capaces de extraer los efectos de los constituyentes de marea en sus datos de velocidades. Mi pregunta es, ¿se podría seguir el mismo procedimiento para aislar los componentes principales de las mareas de mis datos de velocidad tal y como muestras con datos del nivel del mar con el método de Análisis Harmónico? ¿O es necesario algún otro procedimiento adicional?
Muchas gracias de antemano, un cordial saludo.
Hola Alberto,
gracias por tu comentario. Efectivamente la resta de la señal original menos la predicción (xout=marea astronómica) es el residual más bien que la marea meteorológica. En su día lo describí así ya que así fue como me lo enseñaron, pero efectivamente no podemos hablar de marea meteorológica ya que la metodología no es capaz de predecir toda la marea astronómica. Intentaré cambiarlo en el post cuando tenga un momento libre.
Por otro lado creo que no debería haber problema en utilizar esta metodología en datos de velocidad, sobre todo si es solo para discutir los componentes principales (M2, M4,…). Yo he descompuesto señales de velocidad en diferentes frecuencias a través de la “Demodulación compleja” (me gustaría hacer un post sobre eso así como sobre tantas otras cosas…) pero ahora mismo no veo inconveniente para utilizar el análisis de armónicos. Aún así intentaré discutir este tema con algunos compañeros y si tengo una respuesta mejor te comento.
Saludos!!
Muchas gracias por la información.
Cordiales saludos.
Hola Isabel,
Soy nuevo usuario de matlab por lo que estoy un poco perdido. Trato de iniciar el programa, sin embargo, me aparece el siguiente error:
“Error: File: analisis_armonicos_Valencia.m Line: 15 Column: 26
Unexpected MATLAB expression.”
A que se debe esto?
Espero que puedas ayudarme
Hola, a tod@s,
Alguien sabe como usar la función T_PREDICT de T_TIDE ?.
Muchísimas gracias por este post.
A mi me da este error al correr t_tide:
ndefined function or variable ‘msg’.
Error in t_tide (line 191)
if fid==-1, error(msg); end;
Le pasa a alguien más?
muy buenas tardes. primeramente, gracias por explicar todo muy bien y por tomarse el tiempo de subir este trabajo, escribo este mensaje para comentarte que abro los links de descarga y me indican que los archivos ya no existen, me gustaria saber como poder descargar esos archivos.sin mas por el momento me despido y buen dia
Muchas gracias por tu mensaje, ya está solucionado, parece que había un problemilla con Dropbox. Hasta pronto!
el archivo de resultados ya no esta disponible, podrias porfavor volver a ponerlo? gracias.
Hola, muchas gracias por esta publicación ha sido de gran ayuda. Tengo una consulta mas, con los valores que me da de amplitud debo hacer algún calculo mas para obtener el valor de amplitud?. Mis datos de niveles están en metros y los valores que me da como resultado en la amplitud son bastante raros. Gracias
Hola Lorena, pues no conozco tu caso en particular, pero T_TIDE si que da directamente los valores de amplitud, así que no habría que hacer ningún cálculo más. ¡Saludos!
Tengo datos de marea correspondientes a un año, datos cada 2 min. Yo se que la componente principal para este punto es M2, con una amplitud del por lo menos 1m. Sería posible que yo te envíe un mes de datos, tu lo pasaras por el T_tide, a ver si te da igual?. Porque no se que podría estar haciendo mal. Quedo atenta. Muchas Gracias.
Hola, muchas gracias por compartir esto, pero tengo un problema. Hice los ajustes necesarios para que funcione, y al menos para el ejemplo funciona todo bien. Mi problema viene cuando debo cambiar el fichero de entrada. Apenas trabajo con otros datos (modificando los datos del fichero de entrada) MATLAB me arroja esto:
Warning: PSD has been replaced by SPECTRUM objects. PSD still works but may be removed in the future. Use SPECTRUM (or its
functional form PWELCH) instead.
Warning: CSD has been replaced by CPSD. CSD still works but may be removed in future. Use CPSD instead
dando como resultado un vector XOUT=NaN. He tratado de arreglar el fichero de entrada con tal de mantener la estructura del ejemplo, y aún así no funciona. Alguna ayuda con esto ??
Saludos
Ya lo solucioné, muchas gracias de todas maneras.
Hola, ¿cómo solucionaste esto?, lo necesito para mi tesis, gracias.
Hola muy buena tu información, tengo una duda pero ya es directamente con T_TIDE, y es el siguiente.
% The tidal analysis toolbox uses harmonic analysis to estimate
% tidal consitutents and their uncertainities in scalar and vector
% time series.
%
% A description of the theoretical basis of the toolbox and some
% implementation details can be found in:
%
% Pawlowicz, R., B. Beardsley, and S. Lentz, “Classical Tidal
% “Harmonic Analysis Including Error Estimates in MATLAB
% using T_TIDE”, Computers and Geosciences, 28 (2002), 929-937.
%
% (citation of this article would be appreciated if you find the
% toolbox useful).
%
% A demonstration program is included which tests many of the
% capabilities of this toolbox. To run the demonstration, type ‘t_demo’.
%
% This toolbox may call functions PSD and/or CSD in the Signal
% Processing Toolbox (see note below).
%
% ———————————————————————
% This package began as an attempt to translate a FORTRAN package
% developed by M. G. G. Foreman and coworkers at the Institute of Ocean
% Sciences (IOS). (The IOS tidal package and user manuals are available
% from Foreman at http://www.ios.bc.ca/ios/iap/pages/tidpack.htm.).
% S. Lentz and R. Beardsley (WHOI) began translating the code into
% MATLAB, and wrote a linear error estimation algorithm using MATLAB
% spectrum code. R. Pawlowicz (UBC) then completely rewrote it all,
% using complex (rather than real) math, adding inference, a user
% interface, and lots of other goodies, including an nonlinear error
% analysis. If you want to make use of the error analysis, it is
% strongly recommended that you read T_ERRORS.
%
% Caveats: – Presently the nodal corrections are done in such a way
% that they may not be too accurate for time series longer than a year
% or so (corrections are based on the middle time of the input series).
% The hand-me-down advice for this case is “break up your series into
% yearly chunks and do successive analyses”, unless you have 19 years
% or more data, in which case nodal corrections aren’t necessary, but
% in THAT case, you should rewrite the code so that all constituents
% are analyzed without the need for nodal corrections.
%
% Tidal predictions are also based on nodal corrections at the center
% time (the center of the time series being analyzed).
%
% Shallow water constituents are not used automatically. They can
% be used but you must specify them manually using ‘shallow’ input
% option to T_TIDE. You can get the names and frequencies of
% shallow water constituents from the CONST structure returned by
% T_GETCONSTS):
%
% CONST=t_getconsts;
% CONST.name(finite(CONST.ishallow))
%
% Note that T_TIDE has options for pretty much anything you could
% possibly want to do – type ‘help t_tide’ for more info (also look
% at the example in t_demo).
%
%———————————————————————-
%
% PSD and CSD: Currently the functions psd.m and csd.m from the SIGNAL
% PROCESSING toolbox are called when the default confidence interval
% calculation is used. If you don’t have these functions, you can still
% do things by specifying another algorithm, e.g.,
%
% […]=t_tide(…’error’,’wboot’)
En lineas generales me dice que no encuentra las herramientas y realmente no se como solucionarlo, espero que me puedas responder y ayudar.
Saludos
Esta es: Disiculpa
PSD has been deprecated. Use PERIODOGRAM or PWELCH instead.
Error in t_tide>residual_spectrum (line 879)
[Pxr,fx]=psd(real(xres),nx,1/dt); % Call to SIGNAL PROCESSING TOOLBOX – see note in t_readme. If you have an error here you are probably missing this toolbox
Error in t_tide>noise_realizations (line 763)
[fband,Pxrave,Pxiave,Pxcave]=residual_spectrum(xres,fu,dt);
Error in t_tide (line 417)
[NP,NM]=noise_realizations(xr(isfinite(xr)),fu,dt,nreal,errcalc);
Error in analisis_armonicos_Valencia (line 48)
[NAME,FREQ,TIDECON,XOUT]= t_tide(nivelmar,’output’,[path_des fichero_out])
Hola Omar,
pues parece que en las nuevas versiones de Matlab la función PSD ha sido sustituida por la función PWELCH. Yo intentaría abrir el script t_tide.m, ir a las líneas 879 y 880, y sustituir psd por pwelch.
¡Espero que funcione! Si es así escríbelo por aquí, porfa, para ayudar a futuros usuarios.
Gracias y saludos,
Isabel
Muy buena informacion. Tengo una duda que quizá me puedan resorlver.
Quiero usar T-Tide en un malla de 40×144 con 360 pasos de tiempo para obtener los valores de amplitud y fase de M2 y S2 en cada punto.
He probado con este bucle:
n=360; %time
i=zeros(40,144);%latitud and longitud
j=zeros(40,144);
for i=1:40
for j=1:144
for k=1:n
[A,B,C(i,j,k)]=t_tide(u(i,j,k),’start time’,[2016 11 01 00 00 00]);
end
end
end
Obtengo el siguiente error:
Error using .*
Matrix dimensions must agree.
Error in t_tide (line 323)
ap=ap.*corrfac;
Si discretizo un punto en concreto de la malla si me funciona. ¿Alguien tiene alguna idea de dónde puede estar el problema?
Un saludo y gracias de antemano.
Hola Miguel,
Creo que debe haber un punto concreto de la malla que da error, quizás porque existen nans o porque hay puntos de “tierra”. Una idea es utilizar un condicional para solo analizar los puntos que corresponden al dominio marino y evitar los puntos correspondientes a tierra. En cualquier caso, mi consejo es poner uno o varios breakpoints en la función t_tide, uno de ellos en la linea 323 y así comprender de dónde viene el error.
Espero que ésto pueda ayudarte. ¡Mucha suerte!
Saludos,
Isabel
Hola! Hace unos días tuve el mismo problema que Omar y no buscaba la solución.
Efectivamente, hay que cambiar la función psd por pwelch, lo que conlleva que también hay que cambiar los input que se le dan a la función, pero esto afecta a líneas de comando posteriores que usaban los output del psd. Esto me pareció raro, me extrañaba que no hubieran actualizado una nueva versión de t_tide, así que busqué y de hecho hay una versión “t_tide v1.3 beta”, que prevé esto. En las líneas 1036-1038 de esta versión de t_tide, la llamada a la función psd está comentada, y en las líneas siguientes, está la función pwelch:
%[Pxr,fx]=psd(real(xres),nx,1/dt); % Call to SIGNAL PROCESSING TOOLBOX – see note in t_readme. If you have an error here you are probably missing this toolbox
%[Pxi,fx]=psd(imag(xres),nx,1/dt); % Call to SIGNAL PROCESSING TOOLBOX – see note in t_readme.
%[Pxc,fx]=csd(real(xres),imag(xres),nx,1/dt); % Call to SIGNAL PROCESSING TOOLBOX – see note in t_readme.
[Pxr,fx]=pwelch(real(xres),hanning(nx),ceil(nx/2),nx,1/dt); % Call to SIGNAL PROCESSING TOOLBOX – see note in t_readme. If you have an error here you are probably missing this toolbox
Pxr=Pxr/2/dt;
[Pxi,fx]=pwelch(imag(xres),hanning(nx),ceil(nx/2),nx,1/dt); % Call to SIGNAL PROCESSING TOOLBOX – see note in t_readme.
Pxi=Pxi/2/dt;
[Pxc,fx]=cpsd(real(xres),imag(xres),[],[],nx,1/dt); % Call to SIGNAL PROCESSING TOOLBOX – see note in t_readme.
Pxc=Pxc/2/dt;
Posiblemente, si alguien ha tenido este problema es que tiene una versión de t_tide anterior (¡Como me pasó a mí!)
¡Espero que pueda servir a alguien!
Sirve completamente con los datos que facilita Isabel, yo tuve el error que mencionas y actualizando las funciones del tide a la que comentaste ya obtuve las gráficas.
Gracias a ambos.
El link de descarga a la versión 1.3 beta lo obtuve de aquí: https://www.eoas.ubc.ca/~rich/#T_Tide
Hola Isabel muchas gracias por tu ayuda! a mi me sale este error al correr el código 🙁 que puede ser?
Undefined function or variable ‘msg’.
Error in t_tide (line 191)
if fid==-1, error(msg); end;
Error in analisis_armonicos_Valencia (line 48)
[NAME,FREQ,TIDECON,XOUT]=t_tide(nivelmar,’output’,[path_des fichero_out])
Hola Alexander,
pues no estoy 100% segura pero creo que el error está relacionado con el fichero de entrada en la función t_tide: [path_des fichero_out]. Revisa bien que variables path_des y fichero_out corresponden a la carpeta que alberga el fichero y al nombre del fichero, respectivamente.¡Buena suerte!
Saludos,
Isabel
Isabel muchas gracias por tu respuesta. Infortunadamente no he podido solucionar el problema. Lo raro es que estoy tratando de reproducir tu análisis de mareas con la misma información. Obviamente he cambiado la ubicación de los ficheros.
Hola Isabel!
Gracias por la orientación
Alexander!
tengo el mismo problema,¿ lo lograste resolver?
Hola, muchas gracias por tu aporte, mi duda no va tanto en la programación como en la teoría, si necesito determinar la amplitud máxima del muelle o punto de estudio solo tengo que sumar todas las amplitudes de cada armónico o se realiza un procedimiento diferente?
Hola Antonio, creo que llego un poco tarde a tu pregunta, lo siento. Respondo aún así por si acaso. Pues para calcular la amplitud de la marea no necesitas hacer un anális de armónicos. Tienes que identificar los diferentes ciclos de marea de tu serie temporal y, para cada ciclo, el valor del nivel mínimo y máximo. La amplitud de marea es la diferencia entre esos valores máximos y mínimos.
Saludos,
Isabl
El problema es, creo, que la línea 12 del script tiene el nombre del archivo a leer malo
dice:
fichero=’REMAR_HOR_HIS_Valencia97.txt’; %nombre del fichero de entrada
debe decir
fichero=’REDMAR_HOR_HIS_Valencia97.txt’; %nombre del fichero de entrada
(falta una D)