【问题标题】:Maximum sampling rate for accelerometer in iphoneiphone中加速度计的最大采样率
【发布时间】:2011-10-18 03:35:06
【问题描述】:

有谁知道iphone加速度计的最大采样率是多少。 我想要有高更新率。我将它设置为 updateInterval 为 1.0/ 300.0 但似乎我没有得到那么高的更新率。

那么任何人都可以告诉我我们可以获得的最大更新率是多少,或者我如何才能获得高更新率。

【问题讨论】:

    标签: iphone ios4 accelerometer uiaccelerometer


    【解决方案1】:

    iPhone 6 上的最大加速度计和陀螺仪采样率为 100Hz。您可以自己进行经验测试。这是代码。

    /******************************************************************************/
    // First create and initialize two NSMutableArrays. One for accel data and one
    // for gyro data. Then create and initialize CMMotionManager.  Finally,
    // call this function
    
    - (void) TestRawSensors
    {
       speedTest = 0.0001; // Lets try 10,000Hz
       motionManager.accelerometerUpdateInterval = speedTest;
       motionManager.gyroUpdateInterval = speedTest;
    
    
        [motionManager startAccelerometerUpdatesToQueue: [NSOperationQueue currentQueue]
        withHandler: ^(CMAccelerometerData  *accelerometerData, NSError *error)
        {
           [rawAccelSpeedTest addObject: [NSNumber numberWithDouble: accelerometerData.timestamp]];
           [rawAccelSpeedTest addObject: [NSNumber numberWithDouble: accelerometerData.acceleration.x]];
    
           if (error)
           {
              NSLog(@"%@", error);
           }
    
           if (rawAccelSpeedTest.count > 100)
           {
              [motionManager stopAccelerometerUpdates];
    
              for (uint16_t i = 0; i < rawAccelSpeedTest.count; i+=2)
              {
                 NSLog(@"Time: %f   Accel: %f", [rawAccelSpeedTest[i] doubleValue],
                                                [rawAccelSpeedTest[i+1] doubleValue]);
              }
           }
        }];
    
    
       [motionManager startGyroUpdatesToQueue: [NSOperationQueue currentQueue]
                                  withHandler: ^(CMGyroData *gyroData, NSError *error)
        {
           [rawGryoSpeedTest addObject: [NSNumber numberWithDouble: gyroData.timestamp]];
           [rawGryoSpeedTest addObject: [NSNumber numberWithDouble: gyroData.rotationRate.x]];
    
           if (error)
           {
              NSLog(@"%@", error);
           }
    
           if (rawGryoSpeedTest.count > 100)
           {
              [motionManager stopGyroUpdates];
    
              for (uint16_t i = 0; i < rawGryoSpeedTest.count; i+=2)
              {
                 NSLog(@"Time: %f   Rate: %f", [rawGryoSpeedTest[i] doubleValue],
                                               [rawGryoSpeedTest[i+1] doubleValue]);
              }
    
           }
        }];
    }
    

    【讨论】:

    • 您能否详细说明一下。我得到了原始数据,但我应该如何解释它?还有标准差呢。谢谢!
    【解决方案2】:

    尽管文档说 The maximum frequency at which you can request updates is hardware-dependent but is usually at least 100 Hz. 在我看来,最大采样率仍然是 100Hz

    我的解决方法是采用名为 MotionGraphs 的 CoreMotion 的现有示例代码,并将 startUpdates 函数修改为如下所示:

    func startUpdates() {
        guard let motionManager = motionManager, motionManager.isGyroAvailable else { return }
    
        sampleCount = 0
        let methodStart = Date()
    
        motionManager.gyroUpdateInterval = TimeInterval(1.0/100000.0) // Hardcoded to something verfy fast
        motionManager.startGyroUpdates(to: .main) { gyroData, error in
            self.sampleCount += 1
            //...view update code removed
            if (self.sampleCount >= 100) {
                let methodFinish = Date()
                let executionTime = methodFinish.timeIntervalSince(methodStart)
                print("Duration of 100 Gyro samples: \(executionTime)")
                self.stopUpdates()
            }
        }
    }
    

    我还设置了motionManager.deviceMotionUpdateInterval = TimeInterval(1.0/100000.0) 以进行良好的衡量(以防万一它是全球汇率)。

    有了加速度计和陀螺仪的代码,我确认 iOS 11.4 上的 iPhone 8 的最大频率仍然在 100Hz 左右。

    Duration of 100 Accelerometer samples: 0.993090987205505
    Duration of 100 Accelerometer samples: 0.995925068855286
    Duration of 100 Accelerometer samples: 0.993505954742432
    Duration of 100 Accelerometer samples: 0.996459007263184
    Duration of 100 Accelerometer samples: 0.996203064918518
    
    Duration of 100 Gyro samples: 0.989820957183838
    Duration of 100 Gyro samples: 0.985687971115112
    Duration of 100 Gyro samples: 0.989449977874756
    Duration of 100 Gyro samples: 0.988754034042358
    

    【讨论】:

      【解决方案3】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-15
        • 1970-01-01
        • 2018-07-05
        • 1970-01-01
        相关资源
        最近更新 更多