Максимальная частота дискретизации для акселерометра в iphone - PullRequest
2 голосов
/ 02 августа 2011

Кто-нибудь знает, какова максимальная частота дискретизации акселерометра iphone? Я хочу иметь высокую скорость обновления. я установил для updateInterval значение 1.0 / 300.0 Но, похоже, у меня не так много обновлений.

Так что любой орган может сказать мне, какова максимальная частота обновления, которую мы можем получить, или как я могу получить высокую частоту обновления.

Ответы [ 3 ]

2 голосов
/ 31 мая 2015

Максимальная частота дискретизации акселерометра и гироскопа на iPhone 6 составляет 100 Гц .Вы можете эмпирически проверить это самостоятельно.Вот код.

/******************************************************************************/
// 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]);
          }

       }
    }];
}
1 голос
/ 14 июня 2018

Несмотря на то, что документация гласит: The maximum frequency at which you can request updates is hardware-dependent but is usually at least 100 Hz., мне кажется, что максимальная частота дискретизации по-прежнему равна 100 Гц .

Мой подход к выяснению заключался в использовании существующего примера кода для CoreMotion под названием MotionGraphs.и адаптируя функцию 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) для хорошей меры (в случае, если это глобальная ставка).

С этим кодом вместо для акселерометра и гироскопа Я подтверждаю, что iPhone 8 на iOS 11.4 по-прежнему максимально достигает 100 Гц для обоих.

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
1 голос
/ 02 августа 2011

Возможно, дубликат. Посмотрите на

установить частоту обновления для deviceMotionUpdateInterval это фактическая частота?

Фактическая частота обновлений движения устройства ниже ожидаемой, но увеличивается с настройкой

То же самое должно быть действительным, если используется старый интерфейс UIAccerometerDelegate.

...