Я установил акселерометр для нескольких рыб в полевом эксперименте, чтобы понять их поведение. То, что я получил, было значениями сырого ускорения (X, Y, Z) рыб. Это необработанное ускорение раскладывается на часть, которая является stati c (из-за силы тяжести. Я называю это rmX
, rmY
и rmZ
) и часть Dynami c (из-за движения фи sh. Я называю это diX
, diY
и diZ
). Я хотел бы рассчитать крен моих рыб в различных обстоятельствах (во время плавания, отдыха и т. Д. c), поскольку эта информация может быть актуальной с экологической точки зрения.
Самый сложный аспект в Мой случай заключается в том, что акселерометры не остаются идеально выровненными со всем ускорением силы тяжести на оси Y и имеют значения X
и Z
= 0. Я всегда устанавливал акселерометр с одинаковой ориентацией, но ускорение stati c отличается среди рыбы из-за невозможности размещения акселерометра точно одинаково у всех рыб. Для всех людей, в их естественном положении (живот вниз и спинной плавник вверх), ускорение силы тяжести находится на всех 3 осях.
То, что я сделал для вычисления roll
, было так:
FR <- 12.0 # Recording frequency. 12 Hz in my case.
RM <- 2 * FR # Running mean (to calculate static and dynamic acceleration)
Individual1$rmX <-runmean(Individual1$X,RM) # To calculate static acceleration
Individual1$rmY <-runmean(Individual1$Y,RM)
Individual1$rmZ <-runmean(Individual1$Z,RM)
Individual1$disurge <- abs(Individual1$X-Individual1$rmX) # To calculate dinamic acceleration
Individual1$diheave <- abs(Individual1$Y-Individual1$rmY)
Individual1$disway <- abs(Individual1$Z-Individual1$rmZ)
Individual1$roll <- (asin(Individual1$rmZ))*180/pi # To calculate Roll!!
summary(Individual1$roll)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
-90.000 -53.953 -42.423 -26.456 -9.004 66.924 2186
Однако я получил NAs
для переменной roll
, Я думаю, что это связано с формулой, которую я использую. Если я использую формулу, которая появляется в этом посте в StackOverflow, я получаю следующее:
foo$roll<- atan2(foo$rmY, foo$rmZ) * 180/pi
summary(foo$roll)
Min. 1st Qu. Median Mean 3rd Qu. Max.
-179.97 100.45 113.13 96.76 143.81 179.97
Как вы можете видеть, результат существенно отличается между тем, что я делал, и тем, что у меня есть видел, что используется для других коллег. Я думаю, что имеет больше смысла, что я видел в посте (foo$roll<- atan2(foo$rmY, foo$rmZ) * 180/pi
), поскольку диапазон значений для броска -180 / +180. Я видел, что формула, которую я использовал, учитывает только Z-axis
, но формула, упомянутая в посте, использует также значение Y-axis
для расчета броска.
Кто-нибудь знает, как действовать в моем конкретном случае? Какая формула требует больше сенте?