track3D.Rd
The track3D function will use data from a tag to reconstruct a track by fitting a state space model using a Kalman filter. If no x,y observations are provided then this corresponds to a pseudo-track obtained via dead reckoning and extreme care is required in interpreting the results.
track3D( z, phi, psi, sf, r = 0.001, q1p = 0.02, q2p = 0.08, q3p = 1.6e-05, tagonx, tagony, enforce = T, x, y )
z | A vector with depth over time (in meters, an observation) |
---|---|
phi | A vector with pitch over time (in Radians, assumed as a known covariate) |
psi | A vector with heading over time (in Radians, assumed as a known covariate) |
sf | A scalar defining the sampling rate (in Hz) |
r | Observation error |
q1p | speed state error |
q2p | depth state error |
q3p | x and y state error |
tagonx | Easting of starting position (in meters, so requires projected data) |
tagony | Northing of starting position (in meters, so requires projected data) |
enforce | If TRUE (the default), then speed and depth are kept strictly positive |
x | Direct observations of Easting (in meters, so requires projected data) |
y | Direct observations of Northing (in meters, so requires projected data) |
A list with 10 elements:
p: the smoothed speeds
fit.ks: the fitted speeds
fit.kd: the fitted depths
fit.xs: the fitted xs
fit.ys: the fitted ys
fit.rd: the smoothed depths
fit.rx: the smoothed xs
fit.ry: the smoothed ys
fit.kp: the kalman a posteriori state covariance
fit.ksmo: the kalman smoother variance
Output sampling rate is the same as the input sampling rate.
Frame: This function assumes a [north,east,up] navigation frame and a [forward,right,up] local frame. In these frames, a positive pitch angle is an anti-clockwise rotation around the y-axis. A positive roll angle is a clockwise rotation around the x-axis. A descending animal will have a negative pitch angle while an animal rolled with its right side up will have a positive roll angle.
This function output can be quite sensitive to the inputs used, namely those that define the relative weight given to the existing data, in particular regarding (x,y)=(lat,long); increasing q3p, the (x,y) state variance, will increase the weight given to independent observations of (x,y), say from GPS readings
if (FALSE) { p <- a2pr(A = beaked_whale$A$data) h <- m2h(M = beaked_whale$M$data, A = beaked_whale$A$data) track <- track3D(z = beaked_whale$P$data, phi = p$p, psi = h$h, sf = beaked_whale$A$sampling_rate, r = 0.001, q1p = 0.02, q2p = 0.08, q3p = 1.6e-05, tagonx = 1000, tagony = 1000, enforce = T, x = NA, y = NA) par(mfrow = c(2, 1), mar = c(4, 4, 0.5, 0.5)) plot(-beaked_whale$P$data, pch = ".", ylab = "Depth (m)", xlab = "Time") plot(track$fit.rx, track$fit.ry, xlab = "X", ylab = "Y", pch = ".") points(track$fit.rx[c(1, length(track$fit.rx))], track$fit.ry[c(1, length(track$fit.rx))], pch = 21, bg = 5:6) legend("bottomright", cex = 0.7, legend = c("Start", "End"), col = c(5, 6), pt.bg = c(5, 6), pch = c(21, 21)) }