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).
! 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
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 griddedDEFINE 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 $