Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > MATLAB
MATLAB Forum d'entraide sur MATLAB. Avant de poster : FAQs MATLAB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 18/01/2013, 09h57   #1
Howyd
Invité de passage
 
Homme
Inscription : février 2012
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Finlande

Informations forums :
Inscription : février 2012
Messages : 6
Points : 1
Points : 1
Par défaut Sauts dans les valeurs calculees

Bonjour,
je souhaite tracer la vitesse de groupe d 'un filtre analogique.
J'ai tape ce code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function [] = gen_butter()

ordre=1;

    [b,a]=butter(ordre, 10, 's');
    [h,w]=freqs(b,a);

    for jj=2:length(w)-1
        tgd(jj)=-(unwrap(angle(h(jj+1)))-unwrap(angle(h(jj-1))))/(w(jj+1)-w(jj-1));
    end
    
    
    tgd(1)=tgd(2);
    tgd(length(w))=tgd(length(w)-1);
    semilogx(w,tgd)

end
Ca a l'air ok pour ordre=1 ou 2 mais des pics apparaissent pour les valeurs superieures.

Merci.

(Clavier qwerty, teste sur Matlab 2012a et 2010a.)
Howyd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2013, 11h40   #2
Howyd
Invité de passage
 
Homme
Inscription : février 2012
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Finlande

Informations forums :
Inscription : février 2012
Messages : 6
Points : 1
Points : 1
Alors je ne sais pas pourquoi mais avec une variable intermediaire, ca marche (variable "un").
Si quelqu'un connait la raison,...
Code :
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
28
29
function [] = gen_butter()

ordre=10;
w=1:0.1:100;

for ii=1:ordre

%     [b,a]=cheby1(ii,0.5, 10, 's');
    [b,a]=butter(ii,10, 's');
    [h,w]=freqs(b,a,w);
    un=unwrap(angle(h));
    
    for jj=2:length(w)-1
%         tgd(jj)=-(unwrap(angle(h(jj+1)))-unwrap(angle(h(jj-1))))/(w(jj+1)-w(jj-1));
        tgd(jj)=-(un(jj+1)-un(jj-1))/(w(jj+1)-w(jj-1));
    end
    
    
    tgd(1)=tgd(2);
    tgd(length(w))=tgd(length(w)-1);
    
    
    semilogx(w,tgd)
    hold all
    clear tgd
end
hold off

end
Howyd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2013, 14h17   #3
Winjerome
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 5 350
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 26
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations forums :
Inscription : septembre 2009
Messages : 5 350
Points : 13 477
Points : 13 477
Bonjour,

La fonction unwrap effectue une comparaison des valeurs successives pour savoir s'il doit les réajuster.
Si tu ne fournis qu'une seule valeur (comme dans ton premier code), la même valeur sera retournée, il n'y aura donc aucune correction effectuée.
__________________
Avant de poser votre question : FAQ, Tutoriels et recherche sur le forum
Une erreur ? C'est par ici : Messages d'erreur et avertissements
"Ça ne marche pas" n'apporte aucune information utile permettant de vous aider. Expliquez clairement votre problème (erreurs, résultats non attendus...).

Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Pas de question technique par MP, Merci - Retrouvez-moi sur le chat de developpez.com
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2013, 16h03   #4
Howyd
Invité de passage
 
Homme
Inscription : février 2012
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Finlande

Informations forums :
Inscription : février 2012
Messages : 6
Points : 1
Points : 1
J'avais dépouillé les matrices calculées pour unwrap(angle(h)) et w. Dans les deux toutes les valeurs "se suivaient", mais au moment de faire
Code :
tgd(jj)=-(unwrap(angle(h(jj+1)))-unwrap(angle(h(jj-1))))/(w(jj+1)-w(jj-1));
, pour certaines valeurs de jj (aléatoires), mon tgd avaient des pics.

Histoire de faire encore plus bizarre, ma seconde fonction laisse des pics avec un filtre elliptique
Code :
[b,a]=ellip(ii, 0.5, 60, 1, 's');
. J'ai ajusté les valeurs à la main et à la louche.
Howyd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2013, 16h27   #5
Winjerome
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 5 350
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 26
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations forums :
Inscription : septembre 2009
Messages : 5 350
Points : 13 477
Points : 13 477
Comme tu ne semble pas comprendre, je te laisse exécuter et regarder ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ordre=10;
w=1:0.1:100;

for ii=1:ordre
    [b,a] = butter(ii,10, 's');
    [h,w] = freqs(b,a,w);
    un = unwrap(angle(h));
    plot(w,angle(h), w, un , '-g')
    hold on
    for jj = 1:length(w)
        un(jj) = unwrap(angle(h(jj))); % une seule valeur => un(jj) == angle(jj)
    end
    plot(w,un,'r.')
    legend('angle original' , 'unwrap' , 'unwrap(jj)')
    pause
    hold off
end
__________________
Avant de poser votre question : FAQ, Tutoriels et recherche sur le forum
Une erreur ? C'est par ici : Messages d'erreur et avertissements
"Ça ne marche pas" n'apporte aucune information utile permettant de vous aider. Expliquez clairement votre problème (erreurs, résultats non attendus...).

Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Pas de question technique par MP, Merci - Retrouvez-moi sur le chat de developpez.com
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2013, 16h41   #6
Howyd
Invité de passage
 
Homme
Inscription : février 2012
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Finlande

Informations forums :
Inscription : février 2012
Messages : 6
Points : 1
Points : 1
Ok. J'ai compris.
Merci.
Howyd est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h20.


 
 
 
 
Partenaires

Hébergement Web