Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > MATLAB > Signal
Signal Forum d'entraide sur le traitement du signal en 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 08/11/2012, 10h43   #1
Babacooll
Invité régulier
 
Étudiant
Inscription : septembre 2007
Messages : 20
Détails du profil
Informations personnelles :
Âge : 23
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2007
Messages : 20
Points : 6
Points : 6
Envoyer un message via MSN à Babacooll
Par défaut Conversion magnitude en dB

Bonjour à tous,

Pour un projet je dois pouvoir effectuer un traitement d'un enregistrement audio avec MatLab. Le but étant de ressortir les dB pour chacune des fréquences du signal.

Pour l'instant je teste sur un fichier wav qui est censé avoir une fréquence de 450 Hz constant.

En regardant votre forum j'en suis arrivé au résultat suivant :

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
30
31
32
33
file = 'C:\Users\Mick\Desktop\tuning_fork_A4';
[y,Fs,bits] = wavread(file);

Nsamps = length(y);
t = (1/Fs)*(1:Nsamps)          %Prepare time data for plot

%Do Fourier Transform
y_fft = abs(fft(y));            %Retain Magnitude
y_fft = y_fft(1:Nsamps/2);      %Discard Half of Points
f = Fs*(0:Nsamps/2-1)/Nsamps;   %Prepare freq data for plot

%Plot Sound File in Time Domain
figure
plot(t, y)
xlabel('Time (s)')
ylabel('Amplitude')
title('Tuning Fork A4 in Time Domain')

%Plot Sound File in Frequency Domain
figure
plot(f, y_fft)
xlim([0 1000])
xlabel('Frequency (Hz)')
ylabel('Amplitude')
title('Frequency Response of Tuning Fork A4')

%Plot Sound File in Frequency Domain
figure
plot(f, mag2db(y_fft))
xlim([0 1000])
xlabel('Frequency (Hz)')
ylabel('dB mag')
title('Frequency Response of Tuning Fork A4')

Le problème (enfin je pense que c'est un problème ...) étant que mon graphe de l'amplitude en fonction de la fréquence me montre bien un pic bien net à 450 Hz alors que celui des dB en fonction de la fréquence me montre un pic à 450 Hz mais une autre série de pics de moindre intensité autour. Pourtant ceux-ci sont à des valeurs assez hautes de dB (~ 1/2 du pic de 450 Hz).







Est-ce normal?
Babacooll est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/11/2012, 14h06   #2
tachmou
Membre éclairé
 
Jean-Charles
Doctorant automatique aéronautique
Inscription : janvier 2012
Messages : 243
Détails du profil
Informations personnelles :
Nom : Jean-Charles

Informations professionnelles :
Activité : Doctorant automatique aéronautique

Informations forums :
Inscription : janvier 2012
Messages : 243
Points : 301
Points : 301
Bonjour,

Oui, c'est normal : le calcul du gain en dB est par définition :

Ce qui fait que pour des valeurs de gains comprises entre 0 et 1 tu obtiens des valeurs négatives (ici tu en as peu) alors que pour des valeurs supérieures à 1, tu obtiens des valeurs positives, mais plus ton gain est grand, plus ton gain en dB sera grand, mais de moins en moins vite (à cause du log).

Exemple pour ton pic : log10(6000) est légèrement supérieur à 3 (car c'est 6*10^3)... donc c'est compris entre 3 et 4... et si tu multiplies ça par 20, tu obtiens bien un pic compris entre 3*20 = 60 et 4*20 = 80, et c'est ce que tu as sur ta courbe.

Pour les autres valeurs, elles valent peut-être 10 vu ton graphique (environ) ==> log10(10) vaut 1 et 20*log10(10) vaut donc 20 environ... ce sont les valeurs que tu observes...

Conclusion : ça m'a l'air tout à fait correct.

Pour t'en convaincre, tu n'as qu'à faire le chemin inverse :

Normalement, tu vérifies que Gbis = G.

Par ailleurs, pour la culture générale : le bruit blanc est à 10-20 dB, le bruit d'un frigo à 40 db, le bruit d'une voiture bruyante à 60 dB, le bruit d'un avion qui décolle au niveau de son réacteur environ 100 dB... le bruit des cachalots : 180dB dans l'eau (l'intensité maximale que je connaisse.... c'est monstreux ça signifie 10^(180/20) = 10^9 = 1 milliard en intensité pure... attention aux tympans... heureusement que l'eau absorbe une grande partie du bruit)

Cordialement,
__________________
Je ne réponds pas aux MP techniques. Le forum est là pour ça.
La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3
tachmou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2012, 18h48   #3
Babacooll
Invité régulier
 
Étudiant
Inscription : septembre 2007
Messages : 20
Détails du profil
Informations personnelles :
Âge : 23
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2007
Messages : 20
Points : 6
Points : 6
Envoyer un message via MSN à Babacooll
Un grand merci à toi pour cette réponse ;-)

J'ai posté un autre topic pour compléter celui-ci (j'aurai peut-être dû répondre ici, si c'est le cas excusez-moi :S).

Merci encore !
Babacooll est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h38.


 
 
 
 
Partenaires

Hébergement Web