Bonsoir à tous,
j'ai des données issues d'un accéléromètre 3D (x,y,z) . en fait, l’accéléromètre mesure l'accélération dynamique (due au mouvement du l'objet) et l'accélération statique ( due à la gravité (g)). mon but c'est de filtrer ces données afin d'éliminer la gravité sur chaque axe.
aprés une recherche sur le net, la majorité des internautes ont utilisé "Filtre passe haut " pour filtrer les données , ainsi j'ai trouvé un code qui utilise un filtre passe bas en premier lieu puis un filtre passe haut. donc ma question c'est: Est-il vrai que le filtre passe haut peut me servir afin de supprimer la gravité?
existe t-il des fonctions pré-définies en Matlab pour utiliser ce filtre?
voilà le code :
Si quelqu'un peut m'aider à ce sujet je lui en serais très reconnaissante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 #define kFilteringFactor 0.1 - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { // Use a basic low-pass filter to keep only the gravity component of each axis. accelX = (acceleration.x * kFilteringFactor) + (accelX * (1.0 - kFilteringFactor)); accelY = (acceleration.y * kFilteringFactor) + (accelY * (1.0 - kFilteringFactor)) accelZ = (acceleration.z * kFilteringFactor) + (accelZ * (1.0 - kFilteringFactor)); // Use the acceleration data. } If you are using accelerometer data to detect just the instant motion of a device, you need to be able to isolate sudden changes in movement from the constant effect of gravity. You can do that with a high-pass filter. Listing 2 shows a simplified high-pass filter computation. The acceleration values from the previous event are stored in the accelX, accelY, and accelZ member variables of the class. This example computes the low-pass filter value and then subtracts it from the current value to obtain just the instantaneous component of motion. Listing 2 Getting the instantaneous portion of movement from accelerometer data #define kFilteringFactor 0.1 - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { // Subtract the low-pass value from the current value to get a simplified high-pass filter accelX = acceleration.x - ( (acceleration.x * kFilteringFactor) + (accelX * (1.0 - kFilteringFactor)) ); accelY = acceleration.y - ( (acceleration.y * kFilteringFactor) + (accelY * (1.0 - kFilteringFactor)) ); accelZ = acceleration.z - ( (acceleration.z * kFilteringFactor) + (accelZ * (1.0 - kFilteringFactor)) ); // Use the acceleration data. }
Merci d'avance
Partager