Skip to content

ADCP motion correction #466

Description

@browniea

When doing transects, the motion of the boat (and ADCP) needs to be filtered out. WinRiver does this correction automatically and saves the configuration for it in the .mmt file. There's several different refence points for this correction (bottom trach, GPS GGA, and GPS VTG) are all common and have advantages and disadvantages.

One idea is to import the .mmt file, this is also where all the configuration setting are saved from the deployment. Including magnetic declination and transducer depth.

Activity

  1. browniea commented on Sep 9, 2026

    @browniea
    ContributorAuthor

    adding a note that could be a separate issue. The depths for the 'River pro` ADCP sampled using 3 verry depending on depth through time. The range index should be changed to something like "depth bin" and the depth can be listed as a variable through time.

  2. jmcvey3 commented on Sep 9, 2026

    @jmcvey3
    Contributor

    Hi Emily,

    So yes, Dolfyn leaves it up to the user to do motion correction. This is normally as simply as subtracting (or adding, depending on the sign convention), one velocity from the other. I've had some cases where I'll use both bottom track and GPS for corrections, which involves some quality control.
    I wasn't aware of the .mmt file, but that could be interesting to incorporate similarly to the .json sidecar file.

    The RiverPro issue you bring up was something I spent quite some time on. I discovered that their software updates the bin size and profiling range depending on the total water depth in real-time while writing the file, so the only way of knowing what all the bin sizes and depth bins are is by reading the file and keeping track. When you read in a datafile, their software automatically averages to the largest common denominator in terms of the bin size and the total number of bins. Failing to do so results in an incomprehensible dataset.
    If you really want the smaller bins in the shallow water areas, specifying the "nens" parameter will net you the smaller bins and shorter range. If you specify the "debug" parameter, I set up the logging to record when the cell size and total range increases.

    def save_profiles(self, dat, cfg, nm, en, iens):

    def read_fixed(rdr, bb=False):

    def read_fixed_sl(rdr):

  3. browniea commented on Sep 9, 2026

    @browniea
    ContributorAuthor

    Thanks, James! To calculate boat speed did you use the GPS coordinates vs time? I also wasn't sure how to get pitch and roll.

    That makes sense, I remember this boing a whole issue. The results look pretty good with the averaging; I'll compare it to the results using the depth in real-time.

  4. jmcvey3 commented on Sep 9, 2026

    @jmcvey3
    Contributor

    Thanks, James! To calculate boat speed did you use the GPS coordinates vs time? I also wasn't sure how to get pitch and roll.

    That makes sense, I remember this boing a whole issue. The results look pretty good with the averaging; I'll compare it to the results using the depth in real-time.

    The best way is to use the VTG sentence data. If you only have GPS coordinates, it's usually a good idea to convert to UTM and then use a finite difference method with some smoothing.

    Pitch/roll is a whole different can of worms. Ideally pitch/roll are less than +/- 5 degrees, and if not it's best to just redo the transect. If pitch and roll are too high, you'll need to do bin remapping.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions