M2 daily data set documentation

This data set contains observations from MBARI OASIS mooring M2. Each variable has been gridded to a common daily time axes after filtering the hourly data to remove tidal and inertial energies. The PL33 low-pass filter was used. It has a half-power point at 33 hours and is describe below.

The data in this data set are available via DODS at
http://dods.shore.mbari.org/cgi-bin/nph-nc/data/OASISdata/netcdf/hourlyM2.nc

and through the DODS html form mechanism:
http://dods.shore.mbari.org/cgi-bin/nph-nc/data/OASISdata/netcdf/.html

Below is the Ferret script (and following is the output) that produced this file from the original hourly data set (which is also available via DODS and on this Live Access Server at http://dods.shore.mbari.org/cgi-bin/nph-nc/data/OASISdata/netcdf/hourlyM2.nc).


The Ferret commands that produced this daily file

! Description: Create daily filtered OASIS data file from hourly gridded data
! Automatically generated by ./hourly2daily.pl on Sat Nov 17 20:31:58 2001.
! 
! All data sets have U_UNCORRECTED_HR variable.  Use it to get axis time limits
! Filter to remove tidal and inertial signals
! Regrid from 1 hour to 1 day to reduce # file size and number of points
!
!
! Leslie / Fred's plweight.m for 33 hour filter
!
DEFINE AXIS/X=-33:33:1 XAX1
DEFINE GRID/X=XAX1 G1
FILE/VAR=WEIGHTS33/GRID=G1 "./33hrfilt"
SET VAR/TITLE="33 Hour Filter Weights" WEIGHTS33
LIST WEIGHTS33

!
! Original hourly data file
!
USE "http://dods.shore.mbari.org/cgi-bin/nph-nc/data/OASISdata/netcdf/hourlyM2.nc"
DEFINE SYMBOL TBEG="`U_UNCORRECTED_HR,return=tstart`"
DEFINE SYMBOL TEND="`U_UNCORRECTED_HR,return=tend`"
DEFINE AXIS/T=($TBEG):($TEND):1/unit=day TIME_DAY
SPAWN "/bin/rm -f dailyM2.nc"
LET W33=XSEQUENCE(WEIGHTS33[D=1])



LET RELATIVE_HUMIDITY_FILT = CONVOLVEL(RELATIVE_HUMIDITY_HR,W33)
LET RELATIVE_HUMIDITY_DAY = RELATIVE_HUMIDITY_FILT[GT=TIME_DAY]
SET VAR/TITLE="Daily Relative Humidity"/UNITS="%" RELATIVE_HUMIDITY_DAY
STAT RELATIVE_HUMIDITY_DAY
SAVE/APPEND/FILE="dailyM2.nc" RELATIVE_HUMIDITY_DAY
CANCEL VAR RELATIVE_HUMIDITY_DAY RELATIVE_HUMIDITY_FILT


LET AIR_TEMPERATURE_FILT = CONVOLVEL(AIR_TEMPERATURE_HR,W33)
LET AIR_TEMPERATURE_DAY = AIR_TEMPERATURE_FILT[GT=TIME_DAY]
SET VAR/TITLE="Daily air_temperature"/UNITS="Celsius" AIR_TEMPERATURE_DAY
STAT AIR_TEMPERATURE_DAY
SAVE/APPEND/FILE="dailyM2.nc" AIR_TEMPERATURE_DAY
CANCEL VAR AIR_TEMPERATURE_DAY AIR_TEMPERATURE_FILT


LET WIND_DIR_FILT = CONVOLVEL(WIND_DIR_HR,W33)
LET WIND_DIR_DAY = WIND_DIR_FILT[GT=TIME_DAY]
SET VAR/TITLE="Daily Wind Direction Magnetic (from)"/UNITS="Degrees" WIND_DIR_DAY
STAT WIND_DIR_DAY
SAVE/APPEND/FILE="dailyM2.nc" WIND_DIR_DAY
CANCEL VAR WIND_DIR_DAY WIND_DIR_FILT


LET REL_WIND_DIR_FILT = CONVOLVEL(REL_WIND_DIR_HR,W33)
LET REL_WIND_DIR_DAY = REL_WIND_DIR_FILT[GT=TIME_DAY]
SET VAR/TITLE="Daily Relative wind direction"/UNITS="Degrees" REL_WIND_DIR_DAY
STAT REL_WIND_DIR_DAY
SAVE/APPEND/FILE="dailyM2.nc" REL_WIND_DIR_DAY
CANCEL VAR REL_WIND_DIR_DAY REL_WIND_DIR_FILT


LET V_UNCORRECTED_FILT = CONVOLVEL(V_UNCORRECTED_HR,W33)
LET V_UNCORRECTED_DAY = V_UNCORRECTED_FILT[GT=TIME_DAY]
SET VAR/TITLE="Daily North-South Velocity Towards(+N/-S) True"/UNITS="cm/s" V_UNCORRECTED_DAY
STAT V_UNCORRECTED_DAY
SAVE/APPEND/FILE="dailyM2.nc" V_UNCORRECTED_DAY
CANCEL VAR V_UNCORRECTED_DAY V_UNCORRECTED_FILT


LET E1_FILT = CONVOLVEL(E1_HR,W33)
LET E1_DAY = E1_FILT[GT=TIME_DAY]
SET VAR/TITLE="Daily Beam1 Echo Intensity data per beam"/UNITS="Counts" E1_DAY
STAT E1_DAY
SAVE/APPEND/FILE="dailyM2.nc" E1_DAY
CANCEL VAR E1_DAY E1_FILT


LET E3_FILT = CONVOLVEL(E3_HR,W33)
LET E3_DAY = E3_FILT[GT=TIME_DAY]
SET VAR/TITLE="Daily Beam3 Echo Intensity data per beam"/UNITS="Counts" E3_DAY
STAT E3_DAY
SAVE/APPEND/FILE="dailyM2.nc" E3_DAY
CANCEL VAR E3_DAY E3_FILT


LET PRESSURE_FILT = CONVOLVEL(PRESSURE_HR,W33)
LET PRESSURE_DAY = PRESSURE_FILT[GT=TIME_DAY]
SET VAR/TITLE="Daily Pressure"/UNITS="db" PRESSURE_DAY
STAT PRESSURE_DAY
SAVE/APPEND/FILE="dailyM2.nc" PRESSURE_DAY
CANCEL VAR PRESSURE_DAY PRESSURE_FILT


LET WIND_SPEED_FILT = CONVOLVEL(WIND_SPEED_HR,W33)
LET WIND_SPEED_DAY = WIND_SPEED_FILT[GT=TIME_DAY]
SET VAR/TITLE="Daily Wind Speed"/UNITS="m/s" WIND_SPEED_DAY
STAT WIND_SPEED_DAY
SAVE/APPEND/FILE="dailyM2.nc" WIND_SPEED_DAY
CANCEL VAR WIND_SPEED_DAY WIND_SPEED_FILT


LET AIR_PRESS_FILT = CONVOLVEL(AIR_PRESS_HR,W33)
LET AIR_PRESS_DAY = AIR_PRESS_FILT[GT=TIME_DAY]
SET VAR/TITLE="Daily Air Pressure"/UNITS="mbar" AIR_PRESS_DAY
STAT AIR_PRESS_DAY
SAVE/APPEND/FILE="dailyM2.nc" AIR_PRESS_DAY
CANCEL VAR AIR_PRESS_DAY AIR_PRESS_FILT


LET SALINITY_FILT = CONVOLVEL(SALINITY_HR,W33)
LET SALINITY_DAY = SALINITY_FILT[GT=TIME_DAY]
SET VAR/TITLE="Daily Salinity"/UNITS="none" SALINITY_DAY
STAT SALINITY_DAY
SAVE/APPEND/FILE="dailyM2.nc" SALINITY_DAY
CANCEL VAR SALINITY_DAY SALINITY_FILT


LET TEMPERATURE_FILT = CONVOLVEL(TEMPERATURE_HR,W33)
LET TEMPERATURE_DAY = TEMPERATURE_FILT[GT=TIME_DAY]
SET VAR/TITLE="Daily Temperature"/UNITS="Celsius" TEMPERATURE_DAY
STAT TEMPERATURE_DAY
SAVE/APPEND/FILE="dailyM2.nc" TEMPERATURE_DAY
CANCEL VAR TEMPERATURE_DAY TEMPERATURE_FILT


LET BUOY_HEADING_FILT = CONVOLVEL(BUOY_HEADING_HR,W33)
LET BUOY_HEADING_DAY = BUOY_HEADING_FILT[GT=TIME_DAY]
SET VAR/TITLE="Daily Buoy heading Magnetic"/UNITS="Degrees" BUOY_HEADING_DAY
STAT BUOY_HEADING_DAY
SAVE/APPEND/FILE="dailyM2.nc" BUOY_HEADING_DAY
CANCEL VAR BUOY_HEADING_DAY BUOY_HEADING_FILT


LET U_UNCORRECTED_FILT = CONVOLVEL(U_UNCORRECTED_HR,W33)
LET U_UNCORRECTED_DAY = U_UNCORRECTED_FILT[GT=TIME_DAY]
SET VAR/TITLE="Daily East-West Velocity Towards(+E/-W) True"/UNITS="cm/s" U_UNCORRECTED_DAY
STAT U_UNCORRECTED_DAY
SAVE/APPEND/FILE="dailyM2.nc" U_UNCORRECTED_DAY
CANCEL VAR U_UNCORRECTED_DAY U_UNCORRECTED_FILT


LET E2_FILT = CONVOLVEL(E2_HR,W33)
LET E2_DAY = E2_FILT[GT=TIME_DAY]
SET VAR/TITLE="Daily Beam2 Echo Intensity data per beam"/UNITS="Counts" E2_DAY
STAT E2_DAY
SAVE/APPEND/FILE="dailyM2.nc" E2_DAY
CANCEL VAR E2_DAY E2_FILT


LET E4_FILT = CONVOLVEL(E4_HR,W33)
LET E4_DAY = E4_FILT[GT=TIME_DAY]
SET VAR/TITLE="Daily Beam4 Echo Intensity data per beam"/UNITS="Counts" E4_DAY
STAT E4_DAY
SAVE/APPEND/FILE="dailyM2.nc" E4_DAY
CANCEL VAR E4_DAY E4_FILT


LET CONDUCTIVITY_FILT = CONVOLVEL(CONDUCTIVITY_HR,W33)
LET CONDUCTIVITY_DAY = CONDUCTIVITY_FILT[GT=TIME_DAY]
SET VAR/TITLE="Daily Conductivity"/UNITS="Siemens/m" CONDUCTIVITY_DAY
STAT CONDUCTIVITY_DAY
SAVE/APPEND/FILE="dailyM2.nc" CONDUCTIVITY_DAY
CANCEL VAR CONDUCTIVITY_DAY CONDUCTIVITY_FILT
QUIT

The script's output (contains filter weights & variable statistics)

 	NOAA/PMEL TMAP
 	Program FERRET  
 	Version 5.22 - 07/27/00
 	17-Nov-01 20:31     

yes? ! Description: Create daily filtered OASIS data file from hourly gridded
 DEFINE SYMBOL TBEG="29-JUN-1998 00:00"
yes? DEFINE SYMBOL TEND="`U_UNCORRECTED_HR,return=tend`"
 !-> DEFINE SYMBOL TEND="12-APR-2001 23:00"
yes? DEFINE AXIS/T=($TBEG):($TEND):1/unit=day TIME_DAY
 !-> DEFINE AXIS/T="29-JUN-1998 00:00":"12-APR-2001 23:00":1/unit=day TIME_DAY
yes? SPAWN "/bin/rm -f dailyM2.nc"
yes? LET W33=XSEQUENCE(WEIGHTS33[D=1])
yes? 
yes? 
yes? 
yes? LET RELATIVE_HUMIDITY_FILT = CONVOLVEL(RELATIVE_HUMIDITY_HR,W33)
yes? LET RELATIVE_HUMIDITY_DAY = RELATIVE_HUMIDITY_FILT[GT=TIME_DAY]
yes? SET VAR/TITLE="Daily Relative Humidity"/UNITS="%" RELATIVE_HUMIDITY_DAY
yes? STAT RELATIVE_HUMIDITY_DAY
 
             Daily Relative Humidity
             LONGITUDE: 122.4W
             LATITUDE: 36.7N
             DEPTH (m): 3.5
             TIME: 28-JUN-1998 12:00 to 13-APR-2001 12:00
             DATA SET: http://dods.shore.mbari.org/cgi-bin/nph-nc/data/OASISdata/netcdf/hourlyM2.nc
 
 Total # of data points: 1020 (1*1*1*1020)
 # flagged as bad  data: 936
 Minimum value: 78.635
 Maximum value: 99.501
 Mean    value: 89.403       (unweighted average)
 Standard deviation: 5.2646
yes? SAVE/APPEND/FILE="dailyM2.nc" RELATIVE_HUMIDITY_DAY
 LISTing to file dailyM2.nc
yes? CANCEL VAR RELATIVE_HUMIDITY_DAY RELATIVE_HUMIDITY_FILT
yes? 
yes? 
yes? LET AIR_TEMPERATURE_FILT = CONVOLVEL(AIR_TEMPERATURE_HR,W33)
yes? LET AIR_TEMPERATURE_DAY = AIR_TEMPERATURE_FILT[GT=TIME_DAY]
yes? SET VAR/TITLE="Daily air_temperature"/UNITS="Celsius" AIR_TEMPERATURE_DA


The 33 hour low-pass filter

A 33 hour low-pass filter is applied to the hourly time series. The plot below was created with these Ferret commands (33hrfilt is a local file containing the filter weights, the weight values are shown in the output above)

DEFINE AXIS/T=-33:33:1/UNITS=hour TAX1
DEFINE GRID/t=TAX1 g2
FILE/VAR=WEIGHTS33T/GRID=G2 "./33hrfilt"
SET VAR/TITLE="33 Hour Filter Weights" WEIGHTS33T
PLOT WEIGHTS33T 
FRAME/FILE=weights33.gif

The plot below shows an example of the high diurnal and tidal frequency energies contained in mooring time series data. The red line is the fourier transform of the above filter. Its sharp cutoff at 33 hours helps preserve low frequency energies and virtually eliminate the high frequency energies which could be aliased to lower frequencies if we did not apply this filter before sub-sampling to one day intervals. Below are the Ferret commands which produced this plot

USE "http://dods.shore.mbari.org/cgi-bin/nph-nc/data/OASISdata/netcdf/hourlyM4.nc"

! Define the time series at a point in space.
! Set the FFT, using explicit time specification.
! Plot the amplitude spectrum vs frequency.

LET FFT_uwndtmp = U_UNCORRECTED_HR[Z=30]                ! 30 meters depth
LET FFT_uwndtim = MISSING(FFT_uwndtmp, 0.0)             ! ffta needs data, assign to 0
LET FFT_uwndfft = ffta(FFT_uwndtim)
SET VARIABLE/TITLE="U Velocity Energy Spectrum"/units=Amplitude FFT_uwndfft

! For easier interpretation, invert the frequency axis and plot the 
! spectrum vs period: hours/cycle

! Get the frequency increment used in the FFT.
LET FFT_nf = `FFT_uwndfft,return=lend`
LET FFT_nyquist = 0.5
LET FFT_freq1 = FFT_nyquist/ FFT_nf

! Define a frequency axis.
DEFINE AXIS/T=`FFT_freq1`:`FFT_nyquist`:`FFT_freq1` faxis
DEFINE GRID/T=faxis gfftfreq
LET a = T[g=gfftfreq]

! Define the period from the frequency axis.
LET per = 1./a

! Plot as a "Y VS X" plot, showing the first 72 hours where the most energy is.
! The PPL ccommands clean up the plot appearance.

SET WIN/SIZE=0.5
PLOT/VS/LINE/HLIMITS=0:72:3/VLIMITS=0:2/TITLE="Amplitude Spectrum"/SET_UP per[l=1:`FFT_nf`], FFT_uwndfft
PPL XFOR (I2)
PPL XLAB Period, hours/cycle
PPL YLAB Energy of M4 ADCP U Velocity Component at 30m
go unlabel 4
go unlabel 5
go unlabel 6
go unlabel 8
PPL PLOT

! Plot the filter's transform

DEFINE AXIS/T=-33:33:1/UNITS=hour TAX1
DEFINE GRID/t=TAX1 g2
FILE/VAR=WEIGHTS33T/GRID=G2 "./33hrfilt"
SET VAR/TITLE="33 Hour Filter Weights" WEIGHTS33T

LET FFT_filt = ffta(WEIGHTS33T)
LET FFT_filt_nf = `FFT_filt,return=lend`
LET FFT_filt_freq1 = FFT_nyquist/ FFT_filt_nf

!  Define a frequency axis.
DEFINE AXIS/T=`FFT_filt_freq1`:`FFT_nyquist`:`FFT_filt_freq1` filtaxis
DEFINE GRID/T=filtaxis gfiltfftfreq
LET af = T[g=gfiltfftfreq]

!  Define the period from the frequency axis.
LET perfilt = 1./af

! Plot the filter over the transform of the data
LET W33NORM = FFT_filt*31.43
SET VAR/TITLE="33 Hour Filter Transform" W33NORM
PLOT/OVER/LINE/VS perfilt[l=1:`FFT_filt_nf`], W33NORM
FRAME/FILE=w33_freq.gif

 

To use FFTA on data from other moorings which have multiple deployments, and hence gaps in the time axis you need to first regrid the data onto a regular time axis. Here are the Ferret command to do that:

set mem/size=20
def sym tst="`U_UNCORRECTED_HR,return=tstart`"
def sym ten="`U_UNCORRECTED_HR,return=tend`"
def axis/t=():():1/units=hour treg
let u_reg = U_UNCORRECTED_HR[gt=treg]

! Can now pass u_reg to FFTA, or save it to a file...



Last updated: Sat Nov 17 20:31:58 2001 by $Id: hourly2daily.pl,v 1.4 2001/09/20 22:28:15 mccann Exp $