[Users-fr] Filtrer des données

Binoyte binoyte at gmail.com
Mar 10 Déc 08:24:45 CET 2013


Bonjour,

Je fais face aujourd'hui à une problématique de traitement du signal, ce
qui n'est pas du tout ma spécialité. J'ai fait l'acquisition d'un signal
qui est assez propre mais quand je le dérive, ça devient inexploitable tant
le bruit est important.

Je décide donc de filtrer le signal avant la dérivée en appliquant un
filtre passe-bas de type Butterworth ayant une fréquence de coupure de 1/3
F échantillonnage.

Je défini d'abord l'objet filtre `oFiltre` :

    [pols , gain] = zpbutt(ordre, omega_c);
    oFiltre = gain / real(poly(pols,'s'));
    oFiltre.dt='c';

J'applique ensuite ce filtre à mes données :

    num = coeff( numer(oFiltre) );
    den = coeff( denom(oFiltre) );
    filtrees = filter(num, den, donnees);

Les résultats ne sont pas du tout satisfaisants. En comparant avec ce que
j'obtiens avec d'autres logiciels, comme Labview par exemple, je constate
que les réponses en fréquence des filtres Scilab et Labview sont
identiques, mais que les données filtrées sont différentes.

Je pense qu'il y a une erreur dans mon script Scilab, car un détail me
dérange. Nul part n’apparaît la fréquence d'échantillonnage. La variable
`donnees` n'est qu'un vecteur et la fonction `filter()` n'a aucun moyen
pour deviner le pas de temps. Je pense qu'il doit me manquer une mise à
l'échelle, à l'instar de la fonction `diff()`

    diff(y,deg) * fs;

Si quelqu'un à des pistes je suis preneur !

Merci d'avance,

Benoît
-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <https://lists.scilab.org/pipermail/users-fr/attachments/20131210/1b9499df/attachment.htm>


Plus d'informations sur la liste de diffusion users-fr