Spectre audio Scilab

Résolu/Fermé
funbreizhou Messages postés 76 Date d'inscription samedi 10 octobre 2009 Statut Membre Dernière intervention 3 novembre 2011 - 8 janv. 2010 à 18:23
 Ben - 4 déc. 2015 à 00:07
Bonjour,
Je fais actuellement un projet tuteuré sur le traitement d'un signal sonore. Je dois traiter le signal avec scilab, représenter la FFT et le filtrer afin de garder uniquement le fondamental. Jusque là tout va bien.
Seulement j'ai un problème avec le spectre qui (à mon avis) n'est pas ce lui que je devrais trouver (je le considère à l'envers ...)! Si quelqu'un pouvait me dire si mon spectre est bon, ou si il y a une phrase à modifier dans le programme, ça serait vraiment sympa ! ça me bloque depuis maintenant 2 mois et je peux difficilement avoir de l'aide avec les professeurs ... Si jamais je n'ai pas été clair (ce que je peux comprendre ! =] ) posez vos questions ! Merci d'avance !!


Voici mon programme :


clear;


[y,fe,bits]=wavread("C:\Users\Thibault\Documents\Projet Tuteuré 2009\BANJO_HI.wav");fe,bits


playsnd(y,fe)

//Caractéristiques de départ
sig=y';
[L,C]=size(sig);
N=length(sig);

//Transformée de Fourrier du signal
spect=fft(sig,-1);


f=fe*(0:N-1)/N;
n=size(f,'*');
Te=1/fe
t=Te*(0:N-1);

Z=[spect(1:N)];
//définition du filtre du filtre passe bas, butteworth d'ordre 10

G=analpf(10,'butt',[0 0],2*%pi*1000);
GAIN=freq(G(2),G(3),%i*2*%pi*f);
G=[GAIN(1:N)];
//
//filtrage
SIGPB=G'.*spect;
sigpb=fft(SIGPB,1);

//Affichage du spectre
xset("window",2); xbasc(0); xset("font size",4);
plot2d(f,abs(Z/N))

//affichage des graphes
//N°1
xset("window",0); xbasc(0) ; xset("font size",4);
plot2d(f,abs(spect(1:n))/N)
plot2d(f,abs(G(1:n)))
xtitle("Représentation du filtre utilisé","fréquence(Hz)","amplitude (V)")

//N°2
xset("window",1); xbasc(1) ; xset("font size",4);
plot2d(f,abs(SIGPB(1:n))/n)
xtitle("Représentation du spectre filtré","fréquence (Hz)", "ampltide (V)")

//N°3
xset("window",3); xbasc(3) ; xset("font size",4);
plot2d(t,sig(1:N))
plot2d(t,sigpb,2)
xtitle("Signal + signal filtré en fonction du temps","temps (s)", "amplitude (V)")

playsnd(sigpb',fe)
A voir également:

3 réponses

funbreizhou Messages postés 76 Date d'inscription samedi 10 octobre 2009 Statut Membre Dernière intervention 3 novembre 2011 11
12 janv. 2010 à 16:51
salut,
oui ça ressemble à ce que je dois trouver, après de là à dire que c'est ça ... j'en suis moins sûr !
j'vais rechercher sur ces forums !

merci de ton aide.

Thibault
1
funbreizhou Messages postés 76 Date d'inscription samedi 10 octobre 2009 Statut Membre Dernière intervention 3 novembre 2011 11
7 févr. 2010 à 13:50
J'ai eu ma réponse, au cas où ça intéresse du monde !
En fait je voyais 2 spectres puisque mon signal était échantillonné à 22 KHz ! il n'y avait donc pas de symétrie, c'était une superposition en gros des spectres. Habituellement ce genre de fichier son est échantillonné à 44 KHz ... mon programme et mes spectres étaient donc bons, c'est juste que je n'avais pas bien assimilé la notion d'échantillonnage.

Thibault
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
9 janv. 2010 à 01:15
salut, je ne connais pas scilab, mais si tu mets ton fichier son et des screenshots de ton programme à dsposition (par ex. avec http://dl.free.fr/ ), j'essaierai de te dire si c'est ok ou pas.
0
funbreizhou Messages postés 76 Date d'inscription samedi 10 octobre 2009 Statut Membre Dernière intervention 3 novembre 2011 11
9 janv. 2010 à 11:24
Salut,
merci de me venir en aide !

Alors que je t'explique :
pour la première capture (http://dl.free.fr/getfile.pl?file=/GYA2o36T j'ai un spectre qui pour moi est bilatéral. je l'ai donc centré en 0, et c'est là qu'il est inversé avec un fondamental qui est à 17000 Hz (incohérent). En + les harmoniques seraient avant le fondamental ... bref ! bizarre

Pour la deuxième capture (http://dl.free.fr/getfile.pl?file=/foPUCtLd j'ai le même spectre, seulement je ne l'ai pas centré en 0. Là le résultat est cohérent puisque j'ai mon fondamental à #1100 Hz. Si ce spectre évoluait entre 0 et 11000 Hz, ça serait celui que j'attendais. Seulement à partir de 11000 Hz, je ne comprends plus rien ... je suis un peu perdu !

Alors soit :
-mon premier spectre est bon (ce qui m'étonnerait) et mon problème est résolu.
-j'ai fait une faute dans mon programme ce qui engendre cette "inversion" !

voici le son que j'analyse (http://dl.free.fr/getfile.pl?file=/0YP0W2M5

Merci d'avance.

Thibault
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
9 janv. 2010 à 15:53
ton premier spectre est bon, d'après moi (je ne suis pas un expert, mais ça ressemble bien à ce que j'ai étudié un peu, j'obtiens le même spectre en regardant sur un autre programme) .

Mais attention : la fondamentale n'est pas la plus "forte", car les intensités sont différentes aussi.

Il me semble bien que l'idée c'est que tous tes "pics" sont parfaitement séparés par le même intervalle, qui est la fondamentale (puisque toutes les harmoniques sont des multiples de la fondamentale). Vérifie en "mesurant" la différence entre tes différents pics si ça ne fait pas 1100 Hz ;) (personnellement à vu de nez je dirai plutot 800 ou 900 Hz)

Vérifie éventuellement en allant voir un forum spécialisé de son et de musique.
0
Bonjour, je ne comprend pas vraiment cette ligne
SIGPB=G'.*spect;

Scilab m'indique qu'il y a une erreur de code (erreur 9999)

Pouvez-vous m'aider ? Merci
0