Bonjour, je suis actuellement entrain de réaliser un projet dans lequel je dois relever le niveau d'intensité sonore en dB à l'aide de cette carte : SparkFun Electret Microphone Breakout - BOB-12758 - SparkFun Electronics
Je sais que le CAN renvoie une valeur comprise entre 0 et 1023 mais je ne vois pas du tout comment exploiter ces valeurs pour en ressortir des dB.
C'est là que j'aimerai avoir des éclaircissements par rapport à ça.
// consts
#define AmpMax (1024 / 2)
#define MicSamples (1024*2) // Three of these time-weightings have been internationally standardised, 'S' (1 s) originally called Slow, 'F' (125 ms) originally called Fast and 'I' (35 ms) originally called Impulse.
// modes
#define ADCFlow // read data from adc with free-run (not interupt). much better data, dc low. hardcoded for A0.
// calculate volume level of the signal and print to serial and LCD
void MeasureVolume()
{
long soundVolAvg = 0, soundVolMax = 0, soundVolRMS = 0, t0 = millis();
for (int i = 0; i < MicSamples; i++)
{
#ifdef ADCFlow
while (!(ADCSRA & /*0x10*/_BV(ADIF))); // wait for adc to be ready (ADIF)
sbi(ADCSRA, ADIF); // restart adc
byte m = ADCL; // fetch adc data
byte j = ADCH;
int k = ((int)j << 8) | m; // form into an int
#else
int k = analogRead(MicPin);
#endif
int amp = abs(k - AmpMax);
amp <<= VolumeGainFactorBits;
soundVolMax = max(soundVolMax, amp);
soundVolAvg += amp;
soundVolRMS += ((long)amp*amp);
}
soundVolAvg /= MicSamples;
soundVolRMS /= MicSamples;
float soundVolRMSflt = sqrt(soundVolRMS);
float dB = 20.0*log10(soundVolRMSflt/AmpMax);
// convert from 0 to 100
soundVolAvg = 100 * soundVolAvg / AmpMax;
soundVolMax = 100 * soundVolMax / AmpMax;
soundVolRMSflt = 100 * soundVolRMSflt / AmpMax;
soundVolRMS = 10 * soundVolRMSflt / 7; // RMS to estimate peak (RMS is 0.7 of the peak in sin)
// print
Serial.print("Time: " + String(millis() - t0));
Serial.print(" Amp: Max: " + String(soundVolMax));
Serial.print("% Avg: " + String(soundVolAvg));
Serial.print("% RMS: " + String(soundVolRMS));
Serial.println("% dB: " + String(dB,3));
}
Transformer une mesure en dB c'est juste une transformation du rapport entre deux mesures de puissance à l'aide des logarithmes décimaux .
Ce qui est plus compliqué c'est de comprendre les déci-Bel dans l'application acoustique.
Pour ma part je jongle sans difficulté avec les déci-Bels électriques parce que leur définition est simple --> par définition la référence de puissance est égale à 1 mW dans l'impédance considérée.
Mais je n'ai jamais compris qu'elle était la référence de puissance dans le cas d'une mesure acoustique.
Ce qu'il faut absolument connaître :
en acoustique quelle est la référence de puissance ?
comment relier une mesure de tension à une puissance ?
La "formule" est 10log(P/Pref) dans le cas général où on manipule des puissances.
Mais si on manipule des tensions on utilise 20log(U/Uref) puisque P = U2/R et que log(U2)= 2*log(U)
Si les tensions mesurées sont une image d'une puissance faut-il utiliser le multiplicateur 10 ou 20 --> voila la question .
Les dB électronique c'est simple et d'ailleurs c'est pour les télécom que le Bel a été introduit, sinon pourquoi aurait-on donné à cette unité le nom de l'inventeur du téléphone ?
Les dB acoustique c'est le foutoir !
Je connaissais la correction psophométrique utilisé dans les télécom mais pas la psychophysiologique, on en apprend tous les jours ( à moins que ce ne soit la même chose).
Ce qu'il faut pour faire un dBmètre (le d vient du multiplicateur "deci" il se met en toujours en minuscule, l'unité c'est le B le Bel) c'est une puissance dans la bande passante de l'oreile.
Le problème est que la bande passante de l'oreille n'est pas constante en fonction du niveau reçu --> l'oreille humaine possède des systèmes d'auto défense.
Autre difficulté le convert de l'ADC ne mesure que des échantillons de tension et à partir de ces échantillons il faut obtenir une puissance.
Les vrais puissancemètre utilisent le principe d'un thermo couple pour faire une intégration large bande et font une correction derrière.
Tout n'est perdu on sait réaliser des dBmètres acoustiques mais vraiment il faut lire de la documentation spécialisée.
Je pense que le code attendra que le principe de conversion soit au point.