Bottom Detection

Detecting the bottom in Echograms is often essential, because either the soudner detected bottom is not good enough or it simply wasn't exported. The sounder detected bottom can be particularly bad if the data is either very noisy (e.g. impulse or transient noise, from other equipment) or contains a lot of lost pings, due to bad weather conditions. If bottom correction is bad because of noise, it is recommended to first clean the data using a Background or TVG filter, an intermittent noise (spikes) filter and a transient noise filter. The latter two filters are available in Echoview since version 7. If the data contains a lot of lost pings, resampling might help cleaning the data a bit. Bottom detection should then be done on the resulting echogram.

Echoview offers different algorithms to detect the bottom:

9 different settings can be set to customise the algorithm: Start depth (m), Stop depth (m), Minimum Sv for good pick (dB), Discrimination level (dB), Backstep range (m), Peak threshold (dB), Maximum dropouts (samples), Window radius and Minimum peak asymmetry.
The scripting module can be used to detect the bottom on a selected variable, with custom settings.
The following scripts assume the EchoviewR functions are used, see Harisson et al. 2015 for details. The EchoviewR file can be downloaded here

# load EchoviewR functions 
# See Harisson et al. 2015 for details
# Open Echoview
EVAppObj <- COMCreate('EchoviewCom.EvApplication')
# Open an EV file (here it is called mySUperEVFile.EV)
EVFile <- EVOpenFile(EVAppObj, "mySUperEVFile.EV")$EVFile
#Select noise corrected Variable (here it is called Clean Echogram)
EVVar<-EVFile[["Variables"]]$FindByName("Clean Echogram") 
#Set Bottom detection settings
setlp <- EVFile[["Properties"]][["LinePick"]]
setlp[["Algorithm"]] <- 2 # 0 for Delta Sv, 1 for Maximum Sv, 2 for Best bottom Candidate
setlp[["StartDepth"]] <- 50
setlp[["StopDepth"]] <- 350
setlp[["MinSv"]] <- -70
setlp[["UseBackstep"]] <- "True"
setlp[["DiscriminationLevel"]] <- -50.0
setlp[["BackstepRange"]] <- -0.50
setlp[["PeakThreshold"]] <- -50.0
setlp[["MaxDropouts"]] <- 2
setlp[["WindowRadius"]] <- 8
setlp[["MinPeakAsymmetry"]] <- -1.0
#Detect Bottom
bottom<- EVFile[["Lines"]]$CreateLinePick(EVVar, T)
#Overwrite old bottom line (if needed)
oldbottom <- EVFindLineByName(EVFile,"bottom")

If the bottom line should be exported:

#Export Bottom detected Line
                 -1, -1)

The ExportLine function takes 3 input variables:

  1. The name of the line variable to be exported (bottom in this case)
  2. The filename of the export (ending in evl for the EchoView Line)
  3. The ping range (start,stop) to be extracted, set to -1,-1 for all pings