dolfyn.adv.motion.CorrectMotion

class dolfyn.adv.motion.CorrectMotion(accel_filtfreq=None, vel_filtfreq=None, separate_probes=False)[source]

This object performs motion correction on an IMU-ADV data object. The IMU and ADV data should be tightly synchronized and contained in a single data object.

Parameters
accel_filtfreqfloat

the frequency at which to high-pass filter the acceleration signal to remove low-frequency drift.

vel_filtfreqfloat (optional)

a second frequency to high-pass filter the integrated acceleration. (default: 1/3 of accel_filtfreq)

separate_probesbool (optional: False)

a flag to perform motion-correction at the probe tips, and perform motion correction in beam-coordinates, then transform back into XYZ/earth coordinates. This correction seems to be lower than the noise levels of the ADV, so the defualt is to not use it (False).

Notes

Acceleration signals from inertial sensors are notorious for having a small bias that can drift slowly in time. When integrating these signals to estimate velocity the bias is amplified and leads to large errors in the estimated velocity. There are two methods for removing these errors,

  1. high-pass filter the acceleration signal prior and/or after integrating. This implicitly assumes that the low-frequency translational velocity is zero.

  2. provide a slowly-varying reference position (often from a GPS) to an IMU that can use the signal (usually using Kalman filters) to debias the acceleration signal.

Because method (1) removes real low-frequency acceleration, method (2) is more accurate. However, providing reference position estimates to undersea instruments is practically challenging and expensive. Therefore, lacking the ability to use method (2), this function utilizes method (1).

For deployments in which the ADV is mounted on a mooring, or other semi-fixed structure, the assumption of zero low-frequency translational velocity is a reasonable one. However, for deployments on ships, gliders, or other moving objects it is not. The measured velocity, after motion-correction, will still hold some of this contamination and will be a sum of the ADV motion and the measured velocity on long time scales. If low-frequency motion is known separate from the ADV (e.g. from a bottom-tracking ADP, or from a ship’s GPS), it may be possible to remove that signal from the ADV signal in post-processing. The accuracy of this approach has not, to my knowledge, been tested yet.

Examples

>>> from dolfyn.adv import api as avm
>>> dat = avm.read_nortek('my_data_file.vec')
>>> mc = avm.CorrectMotion(0.1)
>>> corrected_data = mc(dat)
__init__(self, accel_filtfreq=None, vel_filtfreq=None, separate_probes=False)[source]

Initialize self. See help(type(self)) for accurate signature.

Methods

__init__(self[, accel_filtfreq, …])

Initialize self.