IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Equivalent 'transfer fcn' en code


Sujet :

MATLAB

  1. #1
    Membre expérimenté Avatar de lecteur1001
    Inscrit en
    Mai 2009
    Messages
    1 526
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1 526
    Points : 1 554
    Points
    1 554
    Par défaut Equivalent 'transfer fcn' en code
    Bonjour,

    je possède des résultats d'expérience dans un fichier.mat
    Ces données sont quelque peu bruitées, je souhaite donc les filtrer à l'aide d'un filtre du 1er ordre avec une constante de temps de 10s.
    Sous Simulink, rien de plus bête : j'utilise la fonction 'from Worskpace' avec comme paramètre Je relie ce bloc à un bloc 'transfer fcn' dont les arguments sont '1' pour le numérateur et '[10 1]' pour le dénominateur. Et en sortie j'obtiens le signal filtré.
    Ma question est bête mais existe-t-il une fonction en code MATLAB qui soit équivalente à ce modèle Simulink ? Je ne m'en sors pas avec la function 'tf'. Suis-je obligé de passer par une intégration avec une fonction ode par exemple ?

    Merci de vos réponses
    À lire avant de poster : qu'est ce qu'un ECM (Exemple Complet Minimal) ?
    Règles des forums LaTeX. Quand votre problème est réglé, mettez votre discussion en
    Pour débuter en LaTeX je conseille fortement Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander (merci Woody Allen ), livre téléchargeable gratuitement ou en vente dans le commerce pour 15 €

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Je sais pas si ca réponds à ta question mais il y a un exemple de filtre simple dans l'aide de la fonction FILTER.

    Duf
    Simulink & Embedded Coder

    Au boulot : Windows 7 , MATLAB r2016b
    A la maison : ArchLinux mais pas MATLAB

  3. #3
    Membre expérimenté Avatar de lecteur1001
    Inscrit en
    Mai 2009
    Messages
    1 526
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1 526
    Points : 1 554
    Points
    1 554
    Par défaut
    Si ça pourrait mais le problème est que la fonction filter définit un filtre discret. Moi je recherche quelque chose de continu.

    J'aimerai vraiment savoir quel code se cache derrière le bloc 'Transfer fcn'...
    À lire avant de poster : qu'est ce qu'un ECM (Exemple Complet Minimal) ?
    Règles des forums LaTeX. Quand votre problème est réglé, mettez votre discussion en
    Pour débuter en LaTeX je conseille fortement Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander (merci Woody Allen ), livre téléchargeable gratuitement ou en vente dans le commerce pour 15 €

  4. #4
    Membre expérimenté Avatar de lecteur1001
    Inscrit en
    Mai 2009
    Messages
    1 526
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1 526
    Points : 1 554
    Points
    1 554
    Par défaut
    Bon ben... j'ai opté pour la solution de facilité "pas très joli" : j'ai créé un modèle Simulink auquel je fais appel grâce à la fonction 'sim'.
    Si quelqu'un a une solution plus élégante je suis preneur
    À lire avant de poster : qu'est ce qu'un ECM (Exemple Complet Minimal) ?
    Règles des forums LaTeX. Quand votre problème est réglé, mettez votre discussion en
    Pour débuter en LaTeX je conseille fortement Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander (merci Woody Allen ), livre téléchargeable gratuitement ou en vente dans le commerce pour 15 €

  5. #5
    Membre éclairé Avatar de tubaas
    Homme Profil pro
    Acousticien
    Inscrit en
    Août 2009
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Acousticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 641
    Points : 825
    Points
    825
    Par défaut
    bonjour
    je veux bien essayé de t'aider mais je ne connais pas Simulink.
    Citation Envoyé par lecteur1001
    Ces données sont quelque peu bruitées, je souhaite donc les filtrer à l'aide d'un filtre du 1er ordre avec une constante de temps de 10s.
    Je suppose que tu veux appliquer un filtre passe-bas du premier ordre. Cependant 10s me paraît énorme comme constante de temps.
    Citation Envoyé par lecteur1001
    Si ça pourrait mais le problème est que la fonction filter définit un filtre discret. Moi je recherche quelque chose de continu.
    Quelque chose de continu... c'est à dire un filtre analogique ? Parce que Simulink applique nécessairement un filtre numérique, et tes données sont discrétisées si je ne m'abuse.
    En fait il te faut la fonction de transfert de ton filtre (des vecteurs avec les coefficients du numérateurs et du dénominateur, a et b dans la doc de filter).
    Pour les construire si tu ne les connais pas tu as par exemple les fonctions CHEBY1, CHEBY2, BUTTER,... suivant le type de filtre que tu souhaites utilisé mais il faut avoir la Signal Processing Toolbox.
    Sinon ça doit pouvoir se trouver si tu précises bien le type de filtre, son ordre, sa fréquence de coupure, éventuellement gain et facteur de qualité...

  6. #6
    Membre expérimenté Avatar de lecteur1001
    Inscrit en
    Mai 2009
    Messages
    1 526
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1 526
    Points : 1 554
    Points
    1 554
    Par défaut
    Citation Envoyé par tubaas Voir le message
    bonjour
    je veux bien essayé de t'aider mais je ne connais pas Simulink.

    Je suppose que tu veux appliquer un filtre passe-bas du premier ordre. Cependant 10s me paraît énorme comme constante de temps.
    Ben tout dépend de la dynamique des données que j'ai à filtrer. Dans le cas présent, 10s est tout à fait adapté.

    Citation Envoyé par tubaas Voir le message
    Quelque chose de continu... c'est à dire un filtre analogique ? Parce que Simulink applique nécessairement un filtre numérique.
    Oui et non... C'est juste qu'avec un filtre discret, tu spécifies la période d'échantillonnage dans le filtre alors qu'avec un filtre "continue", la période d'échantillonnage est celle appliquée au modèle Simulink.
    Citation Envoyé par tubaas Voir le message
    En fait il te faut la fonction de transfert de ton filtre (des vecteurs avec les coefficients du numérateurs et du dénominateur, a et b dans la doc de filter).
    Je ne les connais pas... En revanche, je les connais dans le domaine de Laplace. D'où ma volonté initiale de passer par la fonction 'tf'. Du coup, je ne comprends pas quel est l'intérêt de cette fonction finalement.
    Citation Envoyé par tubaas Voir le message
    Pour les construire si tu ne les connais pas tu as par exemple les fonctions CHEBY1, CHEBY2, BUTTER,... suivant le type de filtre que tu souhaites utilisé mais il faut avoir la Signal Processing Toolbox.
    Sinon ça doit pouvoir se trouver si tu précises bien le type de filtre, son ordre, sa fréquence de coupure, éventuellement gain et facteur de qualité...
    Sans faire preuve de mauvaise volonté, je t'assure que j'ai déjà cherché une solution dans ce sens et je n'y ai rien trouvé. Après, j'ai peut-être mal cherché...
    Ce que je ne comprends pas finalement, c'est pourquoi je ne peux pas faire un truc aussi simple via Simulink en code ? Dans Simulink, tu mets ton signal à l'entrée, ton filtre du 1er ordre (dans le domaine de Laplace) et tu obtiens le signal de sortie dans l'intervalle de temps désiré. Là, j'ai l'impression d'être obligé de passer par une fonction de transfert discrète, de chercher les coefficients correspondants...
    À lire avant de poster : qu'est ce qu'un ECM (Exemple Complet Minimal) ?
    Règles des forums LaTeX. Quand votre problème est réglé, mettez votre discussion en
    Pour débuter en LaTeX je conseille fortement Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander (merci Woody Allen ), livre téléchargeable gratuitement ou en vente dans le commerce pour 15 €

  7. #7
    Membre éclairé Avatar de tubaas
    Homme Profil pro
    Acousticien
    Inscrit en
    Août 2009
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Acousticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 641
    Points : 825
    Points
    825
    Par défaut
    n'y a-t-il pas une relation entre ton filtre dans le domaine de Laplace et les filtres discrets de MATLAB ?
    Citation Envoyé par Wikipedia
    La transformée en Z est un outil mathématique de traitement du signal, qui est l'équivalent discret de la transformée de Laplace.

    Elle est utilisée entre autres pour le calcul de filtres numériques à réponse impulsionnelle infinie et en automatique pour modéliser des systèmes dynamiques de manière discrète.
    (je ne suis pas sûr là)

    Citation Envoyé par lecteur1001
    C'est juste qu'avec un filtre discret, tu spécifies la période d'échantillonnage dans le filtre alors qu'avec un filtre "continue", la période d'échantillonnage est celle appliquée au modèle Simulink.
    Tu ne la connais pas cette fréquence d'échantillonage ?
    Sinon il me semble que le code suivant fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [b,a] = butter(1,Wn); % Wn fréquence de coupure normalisée
    filter(b,a,x); % x signal à filtrer
    Voilà je ne pourrais pas t'aider plus, désolé.

  8. #8
    Membre expérimenté Avatar de lecteur1001
    Inscrit en
    Mai 2009
    Messages
    1 526
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1 526
    Points : 1 554
    Points
    1 554
    Par défaut
    Citation Envoyé par tubaas Voir le message
    n'y a-t-il pas une relation entre ton filtre dans le domaine de Laplace et les filtres discrets de MATLAB ?
    Si si, bien sûr... C'est juste que je voudrais éviter de le faire à la main

    Citation Envoyé par tubaas Voir le message
    Sinon il me semble que le code suivant fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [b,a] = butter(1,Wn); % Wn fréquence de coupure normalisée
    filter(b,a,x); % x signal à filtrer
    Voilà je ne pourrais pas t'aider plus, désolé.
    Oui effectivement, ce pourrait être une solution.

    Mais par exemple, si je définis un filtre ayant cette fonction de transfert :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
             5s²-10s+1
    H(s) = -------------
             18s²+s-1
    Comment je fais ?

    Citation Envoyé par tubaas Voir le message
    Voilà je ne pourrais pas t'aider plus, désolé.
    Oh ne t'excuse surtout pas ! Merci de ton aide, c'est très gentil
    À lire avant de poster : qu'est ce qu'un ECM (Exemple Complet Minimal) ?
    Règles des forums LaTeX. Quand votre problème est réglé, mettez votre discussion en
    Pour débuter en LaTeX je conseille fortement Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander (merci Woody Allen ), livre téléchargeable gratuitement ou en vente dans le commerce pour 15 €

  9. #9
    Membre éclairé Avatar de tubaas
    Homme Profil pro
    Acousticien
    Inscrit en
    Août 2009
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Acousticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 641
    Points : 825
    Points
    825
    Par défaut
    bon là je ne t'aide plus mais je recherche avec toi

    Citation Envoyé par lecteur1001
    Mais par exemple, si je définis un filtre ayant cette fonction de transfert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
             5s²-10s+1
    H(s) = -------------
             18s²+s-1
    Comment je fais ?
    Peut-être regarder du côté de la fonction BILINEAR, il semble que ce soit la relation entre le domaine de Laplace et les filtres discrets.

    [Edit] : dans la doc de la Signal Processing Toolbox il y a tout une partie sur le design de filtres "analogiques" (Special Topics in IIR Filter Design) et une partie Continuous-Time System Models.

  10. #10
    Membre expérimenté Avatar de lecteur1001
    Inscrit en
    Mai 2009
    Messages
    1 526
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1 526
    Points : 1 554
    Points
    1 554
    Par défaut
    Excuse-moi pour la réponse tardive mais j'ai trouvé, pour le cas simple d'un filtre du 1er ordre. Il fallait effectivement passer par la fonction butter... Toutes mes excuses !
    Puis ensuite utiliser la fonction filtfilt pour effectivement appliquer le filtre.
    Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    time = 1:length(indata); % vecteur temps des données à filtrer
    tau = 10; % constante de temps du filtre
    dt = mean(diff(time)); % moyenne du temps d'échantillonnage s'il n'est pas constant (même si dans le cas présent il est toujours de 1 mais c'est pour l'exemple)
    [B,A] = butter(1,2*dt/tau); % coefficients du filtre
    outdata = filtfilt(B,A,indata); % filtrage des données
    plot(time,indata,'b',time,outdata,'k')
    Voilà voilà ! Merci en tout cas de m'avoir mis sur la voie !

    Je vais continuer à chercher du côté de bilinear pour pouvoir trouver les coefficients d'un filtre discret à partir d'une fonction de transfert en Laplace et je reposterai un message pour expliquer comment faire.
    À lire avant de poster : qu'est ce qu'un ECM (Exemple Complet Minimal) ?
    Règles des forums LaTeX. Quand votre problème est réglé, mettez votre discussion en
    Pour débuter en LaTeX je conseille fortement Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander (merci Woody Allen ), livre téléchargeable gratuitement ou en vente dans le commerce pour 15 €

  11. #11
    Membre expérimenté Avatar de lecteur1001
    Inscrit en
    Mai 2009
    Messages
    1 526
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1 526
    Points : 1 554
    Points
    1 554
    Par défaut
    Ben c'était tout simple. Voici donc le même filtre que précédemment mais calculé à partir de la fonction bilinear :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    time = 1:length(indata); % vecteur temps des données à filtrer
    tau = 10; % constante de temps du filtre
    dt = mean(diff(time)); % moyenne du temps d'échantillonnage s'il n'est pas constant (même si dans le cas présent il est toujours de 1 mais c'est pour l'exemple)
    [B,A] = butter(1,2*dt/tau); % coefficients du filtre
    outdata = filtfilt(B,A,indata); % filtrage des données
    [NUMd,DENd] = BILINEAR(1,[tau 1],1e-3) % 1e-3 : fréquence d'échantillonnage : valeur arbitraire prise faible pour plus de précision
    outdata2 = filtfilt(NUMd,DENd,indata)
    plot(time,outdata,'b',time,outdata2,'k')
    On voit qu'une légère différence entre les deux signaux est à noter. Cela est du à la fréquence d'échantillonnage des deux filtres qui n'est pas identique je pense...

    Merci beaucoup en tout cas
    À lire avant de poster : qu'est ce qu'un ECM (Exemple Complet Minimal) ?
    Règles des forums LaTeX. Quand votre problème est réglé, mettez votre discussion en
    Pour débuter en LaTeX je conseille fortement Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander (merci Woody Allen ), livre téléchargeable gratuitement ou en vente dans le commerce pour 15 €

  12. #12
    Membre expérimenté Avatar de lecteur1001
    Inscrit en
    Mai 2009
    Messages
    1 526
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1 526
    Points : 1 554
    Points
    1 554
    Par défaut
    Me revoilà sur ce sujet, car j'ai encore une différence notable entre la fameuse transfer fcn et bilinear/butter que je ne comprends pas
    En effet, regardez l'imprim écran suivant :

    En bleu, le signal original, en pointillés rouges le signal filtré par une transfer fcn ayant pour fonction de transfert
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
              1
    H(s) = --------
            10s+1
    et en pointillés noirs le signal filtré avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dt = mean(diff(time));
    tau = 10;
    [B,A] = bilinear(1,[tau 1],dt)  
    signal_f = filtfilt(B,A,signal);
    Le filtrage par la transfer fcn me paraît beaucoup plus réaliste car il n'anticipe pas la soudaine variation de mon signal original. Je ne comprends pas comment arriver à un signal identique avec bilinear et/ou butter.

    Est-ce que quelqu'un a une idée svp ? Je suis vraiment bloqué là

    Merci beaucoup d'avance à ceux qui pourrait me venir en aide
    À lire avant de poster : qu'est ce qu'un ECM (Exemple Complet Minimal) ?
    Règles des forums LaTeX. Quand votre problème est réglé, mettez votre discussion en
    Pour débuter en LaTeX je conseille fortement Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander (merci Woody Allen ), livre téléchargeable gratuitement ou en vente dans le commerce pour 15 €

  13. #13
    Membre éclairé Avatar de tubaas
    Homme Profil pro
    Acousticien
    Inscrit en
    Août 2009
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Acousticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 641
    Points : 825
    Points
    825
    Par défaut
    salut
    il y a la possibilité que 'TransferFcn' n'applique pas un filtre de type Butter... à voir
    tu peux également changer l'ordre de ton filtre pour voir les incidences.
    Ensuite peux-tu m'expliquer pourquoi tu utilises FILTFILT et non FILTER ?
    je ne comprends pas ceci dans l'aide de FILTFILT
    After filtering in the forward direction, the filtered sequence is then
    reversed and run back through the filter; Y is the time reverse of the
    output of the second filtering operation. The result has precisely zero
    phase distortion and magnitude modified by the square of the filter's
    magnitude response. Care is taken to minimize startup and ending
    transients by matching initial conditions.

  14. #14
    Membre expérimenté Avatar de lecteur1001
    Inscrit en
    Mai 2009
    Messages
    1 526
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1 526
    Points : 1 554
    Points
    1 554
    Par défaut
    Citation Envoyé par tubaas Voir le message
    Ensuite peux-tu m'expliquer pourquoi tu utilises FILTFILT et non FILTER ?
    je ne comprends pas ceci dans l'aide de FILTFILT
    J'allais justement m'auto-répondre en disant qu'avec la fonction filter ça fonctionne effectivement comme je le souhaite. Il ne s'agit donc pas d'un problème avec butter ou bilinear.
    Citation Envoyé par Doc de filtfilt
    After filtering in the forward direction, the filtered sequence is then
    reversed and run back through the filter; Y is the time reverse of the
    output of the second filtering operation. The result has precisely zero
    phase distortion and magnitude modified by the square of the filter's
    magnitude response. Care is taken to minimize startup and ending
    transients by matching initial conditions.
    Je ne comprends pas bien non plus. Il s'agit à mon avis d'une différence au niveau du coefficient a(1), car en en comparant les équations récursives de filter et filtfilt on observe :
    Code filtfilt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb)
                           - a(2)*y(n-1) - ... - a(na+1)*y(n-na)
    Code filter : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb)
                              - a(2)*y(n-1) - ... - a(na+1)*y(n-na)

    Cependant, une dernière chose serait vraiment super pour améliorer mon filtrage de données : comment faire pour que la première valeur filtrée soit égale au signal brut et non à zéro comme c'est le cas actuellement ? Cela diminuerait le "temps de convergence" du filtre...

    Merci en tout cas de ton aide tubaas
    À lire avant de poster : qu'est ce qu'un ECM (Exemple Complet Minimal) ?
    Règles des forums LaTeX. Quand votre problème est réglé, mettez votre discussion en
    Pour débuter en LaTeX je conseille fortement Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander (merci Woody Allen ), livre téléchargeable gratuitement ou en vente dans le commerce pour 15 €

  15. #15
    Membre éclairé Avatar de tubaas
    Homme Profil pro
    Acousticien
    Inscrit en
    Août 2009
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Acousticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2009
    Messages : 641
    Points : 825
    Points
    825
    Par défaut
    je ne pense pas que la différence ne vient pas du paramètre a(1) car c'est une normalisation, et dans ton cas ce coefficient ne vaut-il pas 1 ? (à vérifier). Apparemment vu ce qui est dit et vu le nom de la fonction, il y a deux opérations de filtrage. Je ne sais pas pourquoi.
    Citation Envoyé par lecteur1001
    Cependant, une dernière chose serait vraiment super pour améliorer mon filtrage de données : comment faire pour que la première valeur filtrée soit égale au signal brut et non à zéro comme c'est le cas actuellement ? Cela diminuerait le "temps de convergence" du filtre...
    et bien si tu regardes ton équation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) - a(2)*y(n-1)
    filtre du premier ordre tu vois que tu as besoin des valeurs à l'instant t-1 donc effectivement je ne sais pas comment se débrouille exactement la fonction filter mais tu auras toujours un problème pour le premier échantillon et je ne vois pas comment "diminuer le temps de convergence du filtre".
    Tu peux toujours a posteriori modifier cette valeur.

  16. #16
    Membre expérimenté Avatar de lecteur1001
    Inscrit en
    Mai 2009
    Messages
    1 526
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 1 526
    Points : 1 554
    Points
    1 554
    Par défaut
    Citation Envoyé par tubaas Voir le message
    je ne pense pas que la différence ne vient pas du paramètre a(1) car c'est une normalisation, et dans ton cas ce coefficient ne vaut-il pas 1 ? (à vérifier).
    Oui tu as raison...

    Citation Envoyé par tubaas Voir le message
    Apparemment vu ce qui est dit et vu le nom de la fonction, il y a deux opérations de filtrage. Je ne sais pas pourquoi.
    Ça expliquerait pourquoi lors de l'utilisation de cette fonction, le filtrage "anticipe" les variations du signal brut. Mais effectivement, je n'en saisis pas la subtilité.

    Citation Envoyé par tubaas Voir le message
    et bien si tu regardes ton équation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) - a(2)*y(n-1)
    filtre du premier ordre tu vois que tu as besoin des valeurs à l'instant t-1 donc effectivement je ne sais pas comment se débrouille exactement la fonction filter mais tu auras toujours un problème pour le premier échantillon et je ne vois pas comment "diminuer le temps de convergence du filtre".
    Tu peux toujours a posteriori modifier cette valeur.
    Ben à mon avis pour l'instant t-1, elle prend zéro. C'est pourquoi le signal filtré débute à une valeur nulle.

    Merci des conseils
    À lire avant de poster : qu'est ce qu'un ECM (Exemple Complet Minimal) ?
    Règles des forums LaTeX. Quand votre problème est réglé, mettez votre discussion en
    Pour débuter en LaTeX je conseille fortement Tout ce que vous avez toujours voulu savoir sur LaTeX sans jamais oser le demander (merci Woody Allen ), livre téléchargeable gratuitement ou en vente dans le commerce pour 15 €

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Equivalent Java d'un code C# basé sur les delegates
    Par flow10000 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 13/05/2013, 22h20
  2. equivalent AS3 d'un code en AS2
    Par bigboy dans le forum ActionScript 3
    Réponses: 3
    Dernier message: 07/11/2009, 23h07
  3. Réponses: 2
    Dernier message: 19/02/2009, 12h15
  4. Réponses: 12
    Dernier message: 28/04/2007, 09h43
  5. Equivalent de ce code sous IE?
    Par Death83 dans le forum Général JavaScript
    Réponses: 25
    Dernier message: 28/12/2005, 00h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo