Я пишу приложение Android, которое измеряет высоту при изменении местоположения.Алгоритм сглаживания, который не пропускает кривую колокола
Я хочу, чтобы пользователь поднялся на холм или на холм (на лифте или на горном велосипеде). естественно, когда вы спускаетесь, у вас будут небольшие подъемы, и когда вы поднимаетесь на холм, вы можете немного спуститься.
У меня есть алгоритм сглаживания, который принимает среднее значение из предыдущих десяти значений высоты и среднее значение следующей десяти, а затем сравнивает два для увеличения или уменьшения.
Этот грубоватый эффект, который я ищу, кроме него пропускает кривую колокола, и есть еще некоторые области, где есть провал в общем подъёме, который я не хочу видеть.
статистика не моя сильная сторона, но есть ли лучший способ сгладить эти данные?
вот мой код
qu="SELECT ID,SPEED,ALTITUDE,ISCLIMB from trip_data where tripid="+Tripid+" order by gmttimestamp;";
c= db.rawQuery(qu, null);
if(c!=null && c.moveToFirst())
{
int av=10;
for(int i=av;i<c.getCount()-av;i++)
{
double prevAlt=0;
double nxtAlt=0;
for(int b=0;b<av;b++)
{
c.moveToPosition(i-b);
prevAlt+=c.getDouble(2);
}
prevAlt/=av;
lastAlt=curAlt;
c.moveToPosition(i);
int id=c.getInt(0);
curSpeed=c.getDouble(1);
curAlt=c.getDouble(2);
for(int b=1;b<av+1;b++)
{
c.moveToPosition(i+b);
nxtAlt+=c.getDouble(2);
}
nxtAlt/=av;
int isC=0;
Log.i("corrections", "preivous ="+prevAlt+" and the next is "+nxtAlt);
db.execSQL("UPDATE TRIP_DATA set PREVALT ="+prevAlt+", NEXTALT="+nxtAlt+", DALT="+(curAlt-lastAlt)+" where id="+id+"");
if(nxtAlt>prevAlt)
{
isC=1;
}else
{
isC=0;
}
String ins="UPDATE trip_data set ISCLIMB="+isC+" where ID="+id+";";
db.execSQL(ins);
Log.i("corrections", ins);
}
Есть ли преимущество у меня делает последнее десять ALT (п-1 * 10) + (n-2 * 9)/10! (где! означает факториал, а не не оператор), чтобы дать средневзвешенное значение? пожалуйста, дайте мне знать, если это не то, о чем вы говорите –