2013-07-22 5 views
1

Я столкнулся с этим решением, чтобы удалить значения силы тяжести из исходных значений аселерометра, но я не могу понять, почему alpha = 0.8, а не только 0.997.Значение альфы при снятии силы тяжести от данных аселерометра

public void onSensorChanged(SensorEvent event) 
{ 
     // alpha is calculated as t/(t + dT) 
     // with t, the low-pass filter's time-constant 
     // and dT, the event delivery rate 

     final float alpha = 0.8; 

     gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0]; 
     gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1]; 
     gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2]; 

     linear_acceleration[0] = event.values[0] - gravity[0]; 
     linear_acceleration[1] = event.values[1] - gravity[1]; 
     linear_acceleration[2] = event.values[2] - gravity[2]; 
} 
+0

что начальное значение силы тяжести [я]? – inquisitive

ответ

1

В соответствии с комментарием на коде: альфа = т/(T + дт), так что альфа просто быть вычислена в соответствии с параметрами фильтра времени длины и частоты дискретизации акселерометра.

Если ваше решение устанавливает альфа = 0,8, это просто означает, что dT = 0,025 t или, с другой стороны, t = 40dt.

Если увеличить частоту дискретизации акселерометра, уменьшая дТ вы будете иметь альфа указывая asyntotically 1.

+0

Так что моя частота дискретизации при 100 Гц и длительности равна 30 секундам ... Я вроде как новый в фильтрации. – SamuelNLP

+0

извините, не заметил твой комментарий. Если вы установите частоту дискретизации на частоте 100 Гц, значит, dT = 1/100s = 10 мс. Таким образом, при t = 30 сек. Альфа будет 30/(30 + 0,01) = 0,999, что является фактическим «почти» 1, как сказано. –

+0

@CristianoZambom не должен быть постоянным значением времени 1 с? – SamuelNLP

Смежные вопросы