Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提高iPhone'的准确性;s加速度计的计数步长_Iphone_Objective C_Navigation - Fatal编程技术网

提高iPhone'的准确性;s加速度计的计数步长

提高iPhone'的准确性;s加速度计的计数步长,iphone,objective-c,navigation,Iphone,Objective C,Navigation,我目前正在使用以下代码来计算用户在我的室内导航应用程序中采取的步骤数。当我把手机放在胸前,屏幕朝上的时候,我的步子数计算得很好。但常见的操作,如轻触屏幕或通过地图寄存器平移步骤也很重要。这是非常令人沮丧的,因为在平面图中跟踪我的移动将变得非常不准确。在这种情况下,有人知道我如何提高跟踪的准确性吗?任何意见将不胜感激!为了更好地了解我正在尝试做什么,你们可以在上查看一个类似的Android应用程序。谢谢 -(无效)加速计:(UIAccelerator*)加速计DID加速度:(UIAccelerat

我目前正在使用以下代码来计算用户在我的室内导航应用程序中采取的步骤数。当我把手机放在胸前,屏幕朝上的时候,我的步子数计算得很好。但常见的操作,如轻触屏幕或通过地图寄存器平移步骤也很重要。这是非常令人沮丧的,因为在平面图中跟踪我的移动将变得非常不准确。在这种情况下,有人知道我如何提高跟踪的准确性吗?任何意见将不胜感激!为了更好地了解我正在尝试做什么,你们可以在上查看一个类似的Android应用程序。谢谢

-(无效)加速计:(UIAccelerator*)加速计DID加速度:(UIAcceleration*)加速度{
浮动xx=加速度x;
浮点数yy=加速度y;
float zz=加速度.z;
浮点数=(px*xx)+(py*yy)+(pz*zz);
浮点数a=ABS(sqrt(px*px+py*py+pz*pz));
浮点数b=ABS(sqrt(xx*xx+yy*yy+zz*zz));
dot/=(a*b);

如果(点来自加速计的数据基本上是一维(时间)三维矢量信号的非均匀采样。计算步数的最佳方法是编写一个应用程序,在一定时间内记录和存储样本,然后将数据导出到Wolfram的Mathematica等数学应用程序中进行分析和可视化。请记住,采样是非均匀的,您可能希望也可能不希望将其转换为均匀采样的数字信号

然后,您可以尝试不同的信号处理算法,看看哪种算法效果最好


可以知道,一旦你知道加速度计数据中的一个步骤的基本形状,你就可以用简单的卷积来识别它们。

是否更容易注意到电话总是被保持在一个固定的位置?我能简单地考虑Z分量吗?它会更容易,因为函数域会减少到标量而不是向量。我不知道从其他类型的运动中辨别出一个步骤是否足够。使用Mathematica或Matlab或类似工具的全部要点是,根据信号形状,找出是什么使一个步骤成为一个步骤。我建议你记录所有三个分量并分析数据。如果从中得到的图形表明只有z分量是你可以在最后的实现中使用它。你知道关于这个问题的任何现有实现吗?我从来没有遇到过这个问题,所以我从来没有寻找过任何现有的实现。
-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {

float xx = acceleration.x;
float yy = acceleration.y;
float zz = acceleration.z;

float dot = (px * xx) + (py * yy) + (pz * zz);
float a = ABS(sqrt(px * px + py * py + pz * pz));
float b = ABS(sqrt(xx * xx + yy * yy + zz * zz));

dot /= (a * b);
if (dot <= 0.9989) {
    if (!isSleeping) {
        isSleeping = YES;
        [self performSelector:@selector(wakeUp) withObject:nil afterDelay:0.3];
        numSteps += 1;
    }
}  
px = xx; py = yy; pz = zz;
}