2011-10-29 6 views
0

Je suis un peu perplexe par les taux de lecture du capteur dans Android. Le code ci-dessous signale des retards de ~ 53 ms (ZTE Blade, les événements du capteur de vitesse sont réglés sur SENSOR_DELAY_FASTEST).Android: Comment contrôler le taux d'échantillonnage onSensorChange

public void onSensorChanged(SensorEvent event) { 
synchronized (this) { 
    switch (event.sensor.getType()) { 
    case Sensor.TYPE_MAGNETIC_FIELD: 
    TimeNew = event.timestamp; 
    delay = (long)((TimeNew - TimeOld)/1000000); 
    TimeOld = TimeNew; 
    Log.d("Test", delay + " ms"); 
    break; 
    } 
    } 
    } 

Le journal:

DEBUG/Test(23024): 52 ms 
DEBUG/Test(23024): 53 ms 
DEBUG/Test(23024): 54 ms 
DEBUG/Test(23024): 56 ms 
DEBUG/Test(23024): 52 ms 
DEBUG/Test(23024): 52 ms 
DEBUG/Test(23024): 55 ms 
DEBUG/Test(23024): 52 ms 

Si nous voulons dire en moyenne 100 échantillons, puis enregistrer les données, le temps entre chaque échantillon 100e varie considérablement. C'est probablement parce que la valeur du capteur ne change pas dans les périodes de temps régulières.

Mais ai-je oublié quelque chose? Existe-t-il un moyen d'obtenir des mesures (plus) régulières (par exemple, 100 ms)? Ou peut-être que je devrais aller pour faire la moyenne sur une période de temps spécifique au lieu de non d'échantillons?

Aussi 50ms semble être un peu long temps. Cela pourrait-il être une limitation matérielle de l'appareil? Ce nombre variera-t-il sur différentes plates-formes?

Un conseil est apprécié.

Répondre

1

Je ferais la moyenne sur une période de temps plutôt qu'un certain nombre d'échantillons. Je m'attendrais à ce que des appareils différents avec des capacités de périphériques différentes génèrent des résultats sensiblement différents si vous adoptiez l'approche basée sur le nombre. Si vous souhaitez une gestion plus régulière de l'échantillonnage, je déconnecterais probablement le test de l'événement et je ferais simplement un sondage de l'appareil à la fréquence que vous souhaitez.

Questions connexes