1
我正在写一个测量位置变化的高度的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(N-1 * 10) +(n-2 * 9)/ 10! (其中!表示阶乘而不是非算子)来给出加权平均值?请让我知道这不是你在说什么 –