acousticLoudness() function incorrect?

5 visualizzazioni (ultimi 30 giorni)
Max
Max il 27 Ago 2024
Commentato: Jimmy Lapierre il 11 Set 2024
I decided to verify acousticLoudness function using ISO532-1 test method using ISO provided test signals and compare to stated sone levels.
According to ISO532-1 test signal wav data should be calibrated: " For the calibration of the WAVE files, 0 dB (relative to full scale) shall correspond to a sound pressure level of 100 dB." The calibration factor works out to be =2. This could be immediately verified by comparing test frequency amplitude after calibration with file name e.g. "Test signal 6 (tone 250 Hz 30 dB - 80 dB).wav". The max amplitude is 0.2 Pa (80dB).
I used these function parameters to calculate loudness of time varying noise signals:
LoudnessISO532=acousticLoudness(signal,48000,'SoundField','free','TimeVarying',true);
acousticLoudness() produces loudness nearly twice the value of the ISO calculation. I discovered, however, that if I do not calibrate the wav file, function produces correct results.
Thus, it seems to me, to obtain correct results, calibrated SPL (Pa) signal should be reduced by half.
Did anybody try to verify the function using ISO532-1 test wav files? Did you calibrate them?
Thanks!
  1 Commento
Mathieu NOE
Mathieu NOE il 29 Ago 2024
acording to the doc , you can use a reference pressure and a calibration factor - I am not sure to read in your post how you used them, seems to me you did a manual correction but not used the function the way it's documented.
Call acousticLoudness with no output arguments to plot the specific loudness. Assume a calibration factor of 0.15 and a reference pressure of 21 micropascals. To determine the calibration factor specific to your audio system, use the calibrateMicrophone function.
calibrationFactor = 0.15;
refPressure = 21e-6;
acousticLoudness(audioIn,fs,calibrationFactor,'PressureReference',refPressure)

Accedi per commentare.

Risposte (2)

Jimmy Lapierre
Jimmy Lapierre il 3 Set 2024
No need to modify your "signal". You can use calibrateMicrophone with a 1kHz tone that you specify the SPL level, and that will give you a calibration value for all the acoustic* functions and splMeter. In real life, you play a 1 kHz tone a place a SPL meter next to the microphone to measure the level and you give that to the calibration function.
To answer your other question, yes, the acousticLoudness function is tested against all the ISO test vectors. The default calibration works for those files.
In case it helps, here's how you can try ISO 532-1:2017, Annex B, section B.3 :
[xtest,FS] = audioread("02_250Hz_80dB.wav");
[sone,spec] = acousticLoudness(xtest,FS,'SoundField','free');

Max
Max il 11 Set 2024
Jimmy, thank you for the answer.
After reading ISO532 code and Matlab documentation I got to the bottom of it. The 16bit wave files in ISO532-1 require scaling factor of sqrt(8) to achieve stated dB-RMS amplitude. The default calibration factor in acousticLoudness function is ... sprt(8). Thus, acousticLoudness calculates correctly with default calibration factor and signal from "raw" (unscaled) 16bit wave files from the standard.
The function will work correctly if proper calibration factor is explicitly provided. By the way, ISO532-1 also contains a few 32-bit wave files which are already scaled.... I guess, to make things even more interesting.
Best regards

Categorie

Scopri di più su Measurements and Spatial Audio in Help Center e File Exchange

Prodotti


Release

R2024a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by