filtre numerique de butterworth

Sep 14, 2009 11 Replies

bonjour, je dois filtrer un signal échantillonné à 5Khz en temps réel et récupérer le fondamental. je connais la fréquence du signal à peut prés ( de 10hz à 100 Hz) J'ai récupérer l'algorithme ( filtre de butterworth a 2 pôles)

formatting link
et ça marche super bien y[2] = (x[0] + x[2]) + 2 * x[1] + ( A* y[0]) + ( B * y[1]); Par contre le site me donne les coefficients recalculés mais pas l'algorithmes et comme les coefficients A et B dépendent de la fréquence du signal , je dois les recalculer moi même et je ne sais pas comment faire. Si quelqu'un a un site explicatif simplifié ou peut me dire les formules ça serait sympa.



"Fred Kap" a écrit dans le message de news: snipped-for-privacy@NOt.com...

Bonjour,

la transmittance isochrone d'un Butterworth d'ordre 2, c'est:

1/ (1 + j sqrt(2) w/w0 - (w/w0)^2)

si vous voulez le réaliser en numérique, l'approximation classique est jw #

2 / Te * (1-z^(-1)) / (1+z^(-1))

où z^(-1) est l'opérateur retard (implicitement de Te) et Te la période d'échantillonnage.

par exemple, z^(-1) * x(n) = x(n-1)

Donc dans la transmittance isochrone vous remplacez jw par son approximation....puis quelques lignes de maths pour arriver à l'équation de récurrence....

Si vous n'y arrivez pas je vous donnerai le résultat.

Cordialement

Vincent

PS: la réponse n'est pas la même, bien sûr. Notamment, fréquence de coupure numérique = fe / pi * arctan( pi * f0 / fe)...choisir f0 en conséquence...

exemple: coupure du filtre numérique désirée à 1 kHz, fe = 5 kHz

f0 = fe / pi * (pi * fdes / fe) = 1156 kHz

c'est ce f0 là qui doit être utilisé dans la transmittance isochrone pour les calculs.

f0 = fe / pi * tan(pi * fdes / fe) = 1156 kHz

"Fred Kap" a écrit dans le message de news: snipped-for-privacy@NOt.com...

Bonjour,

Simple curiosité, ne serait ce pas un signal ECG pour avoir une bande passante de 10 à 100 Hz?

Cordialement pf

Je te remercie de ta réponse , pourrais tu me donner par exemple les valeurs A et B pour F=50 Hz.

Le Mon, 14 Sep 2009 14:27:20 +0200, Vincent Thiernesse a écrit :

Le Tue, 15 Sep 2009 10:06:02 +0200, Pierre-François (f5bqp_pfm) a écrit :

Non , c'est un signal courant de moteur.

"Fred Kap" a écrit dans le message de news: snipped-for-privacy@NOt.com...

d'abord, ta formulation est incomplète:

y[2] = 1 / C * (x[0] + x[2]) + 2 * x[1] + A* y[0]) + B * y[1])

avec:

*) C = 1 + a + b *) B = 2 * (b - 1) *) A = a - b - 1

où:

a = sqrt(2) * fe / (pi * f0) b = (fe / (pi * f0))^2

note que tu prends f0

"Vincent Thiernesse" a écrit dans le message de news:4aafa894$0$17759$ snipped-for-privacy@news.orange.fr...

rq: j'ai considéré fe = 5 kHz, comme dans ton post initial.

Le Tue, 15 Sep 2009 17:13:57 +0200, Vincent Thiernesse a écrit :

Super , je vais essayer ca , merci

Il manque des parentheses ou il y en a de trop y[2] = 1 / C * (x[0] + x[2]) + 2 * x[1] + A* y[0]) + B * y[1]) est ce que c'est ca ? y[2] = 1 / C * (x[0] + x[2] + 2 * x[1]) + A* y[0] + B * y[1]

ok c'est en fait y[2] = 1 / C * (x[0] + x[2] + 2 * x[1] + A* y[0] + B * y[1])

"Fred Kap" a écrit dans le message de news: snipped-for-privacy@NOt.com...

tout à fait !!!

si vous avez un doute, vous pouvez remplacer tous les Xn et Yn par 1 et vérifier l'égalité.

@+

Vincent

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required