bonjour,
comment je peux détecter les pics d'un signal sous scilab?
bonjour,
comment je peux détecter les pics d'un signal sous scilab?
Bonjour.
Cela dépend du signal. Une discussion là :
http://www.developpez.net/forums/d47...etection-pics/
bonjour phryte,
je travail sur scilab.
le code déja donné est sur matlab.
j'ai tapé ce code => il y a des erreurs.
variable non définie : inf
variable non définie : end
comment je peux faire la meme chose sur scilab.
merci.
Voici la version Scilab :
La valeur 99999 est choisie arbitrairement. Il suffit qu'elle soit supérieure à la valeur maximale de y
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 y = rand(1,30); plot(y) s = sign(diff([99999 y 99999])); idx = (s(2:$).*s(1:$-1))==-1; set(gca(),"auto_clear","off") plot(find(idx),y(idx),'ro')
Il y a peut être un équivalent Scilab pour la fonction Inf![]()
Ingénieur indépendant en mécatronique - Conseil, conception et formation
- Conception mécanique (Autodesk Fusion 360)
- Impression 3D (Ultimaker)
- Développement informatique (Python, MATLAB, C)
- Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)
« J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)
merci,
mais comment je détecte que les pics qui sont supérieur à "0"? car mon signal vari entre "-1" et "1".
et comment déterminer leurs coordonnés?
Bonjour Dut,
est ce que vous pouvez m'expliqué votre code?
comment ça marche "idx"?
Pour séparer les pics des creux :
C'est expliqué dans le 7ème message de l'autre discussion
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 y=rand(1,30); plot(y) s = sign(diff([-9999 y])); idxmax = strindex(char(s), char([1 -1])) idxmin = strindex(char(s), char([-1 1])) set(gca(),"auto_clear","off") plot(idxmax,y(idxmax),'ro',idxmin,y(idxmin),'go')
Ingénieur indépendant en mécatronique - Conseil, conception et formation
- Conception mécanique (Autodesk Fusion 360)
- Impression 3D (Ultimaker)
- Développement informatique (Python, MATLAB, C)
- Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)
« J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)
bonjour,
j'obtient les coordonnés des pics sur "x" comment je peut obtenir les coordonnées sur "y" (y=f(x))?
Regarde attentivement la dernière ligne du dernier bout de code que je t'ai donné![]()
Ingénieur indépendant en mécatronique - Conseil, conception et formation
- Conception mécanique (Autodesk Fusion 360)
- Impression 3D (Ultimaker)
- Développement informatique (Python, MATLAB, C)
- Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)
« J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)
merci Dut,
j'ai une autre question,
pourquoi l'algorithme fonctionne sur des signaux et pas sur des autres?
voici les figures.
Ingénieur indépendant en mécatronique - Conseil, conception et formation
- Conception mécanique (Autodesk Fusion 360)
- Impression 3D (Ultimaker)
- Développement informatique (Python, MATLAB, C)
- Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)
« J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)
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
28
29
30
31
32
33
34 n=600; [y,fs]=wavread('C:\v.wav',n); rs=y(1,:); plot2d(rs) s=sign(diff([-999 rs 999])); idxmax= strindex(char(s), char([1 -1])); idxmin= strindex(char(s), char([-1 1])); set(gca(),"auto_clear","off") plot(idxmax,rs(idxmax),'ro',idxmin,rs(idxmin),'go') k1=size(rs(idxmax)); h1=1; for c1=1:k1(2) if rs(idxmax(c1))>0; z1(h1)=rs(idxmax(c1)); c1=c1+1; h1=h1+1; end end k2=size(rs(idxmin)); h2=1; for c2=1:k2(2) if rs(idxmin(c2))>0; z2(h2)=rs(idxmin(c2)); c2=c2+1; h2=h2+1; end end k11=size(z1); k22=size(z2); g1=sum(z1')/k11(1); g2=sum(z2')/k22(1);
messagece message ce répete plusieur fois ça dépent le signal.ATTENTION:
ascii: Wrong value for input argument #1: Must be between 0 and 255.
merci pour votre aide.
Tu pourrais attacher un fichier wav (dans une archive zip ou rar) pour lequel le code ne fonctionne pas ? Ou un jeu de données numériques équivalent ?
Ingénieur indépendant en mécatronique - Conseil, conception et formation
- Conception mécanique (Autodesk Fusion 360)
- Impression 3D (Ultimaker)
- Développement informatique (Python, MATLAB, C)
- Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)
« J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)
je n'ai pas bien compri ce que vous voulez dire.
j'ai maintenant un fichier "v.rar".
je fait quoi avec ce fichier?
merci
=> Nouveaux membres, débutants : lisez attentivement ceci
(voir le message Insérer des données ou des fichiers dans vos messages dans cette discussion)
Ingénieur indépendant en mécatronique - Conseil, conception et formation
- Conception mécanique (Autodesk Fusion 360)
- Impression 3D (Ultimaker)
- Développement informatique (Python, MATLAB, C)
- Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)
« J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)
je suis désolé, j'ai compri maintenant ce que vous voulez dire.
Pourquoi mettre un signe - au premier 999 ?
Le code suivant fonctionne parfaitement :
Maintenant si tu ne veux récupérer que les pics qui dont la valeur est supérieure à 0 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 n=600; [y,fs]=wavread('v2.wav',n); plot(y) s = sign(diff([-9999 y])); idxmax = strindex(char(s), char([1 -1])); idxmin = strindex(char(s), char([-1 1])); set(gca(),"auto_clear","off") plot(idxmax,y(idxmax),'ro',idxmin,y(idxmin),'go')
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 n=600; [y,fs]=wavread('v2.wav',n); plot(y) s = sign(diff([-9999 y])); idxmax = strindex(char(s), char([1 -1])); idxmin = strindex(char(s), char([-1 1])); set(gca(),"auto_clear","off") idxpos = y(idxmax)>0; suby = y(idxmax(idxpos)); subidxmax = idxmax(idxpos); plot(subidxmax,suby,'ro')
Ingénieur indépendant en mécatronique - Conseil, conception et formation
- Conception mécanique (Autodesk Fusion 360)
- Impression 3D (Ultimaker)
- Développement informatique (Python, MATLAB, C)
- Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)
« J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)
le meme code :il detecte que les 4 premiers pics.
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 n=600; [y,fs]=wavread('C:\v3.wav',n); plot(y) s = sign(diff([-9999 y])); idxmax = strindex(char(s), char([1 -1])); idxmin = strindex(char(s), char([-1 1])); set(gca(),"auto_clear","off") idxpos = y(idxmax)>0; suby = y(idxmax(idxpos)); subidxmax = idxmax(idxpos); plot(subidxmax,suby,'ro')
pourquoi? parce que le pics num 5 est < 0?
voici la figure et fichier .wav.
j'ai la version scilab-5.1.1
merci.
Aucun problème avec Scilab 4.1.2 sous Linux
Ingénieur indépendant en mécatronique - Conseil, conception et formation
- Conception mécanique (Autodesk Fusion 360)
- Impression 3D (Ultimaker)
- Développement informatique (Python, MATLAB, C)
- Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)
« J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)
avec scilab-5.1.1 sur windows xp ça marche pas.
mais avec scilab 4.1.1 ou 4.1.2 sur linux ça marche tres bien.
merci beaucoup.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager