acousticLoudness() function incorrect?

6 views (last 30 days)
Max
Max on 27 Aug 2024
Commented: Jimmy Lapierre on 11 Sep 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 Comment
Mathieu NOE
Mathieu NOE on 29 Aug 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)

Sign in to comment.

Answers (2)

Jimmy Lapierre
Jimmy Lapierre on 3 Sep 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 on 11 Sep 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

Categories

Find more on Measurements and Spatial Audio in Help Center and File Exchange

Products


Release

R2024a

Community Treasure Hunt

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

Start Hunting!