acousticLoudness() function incorrect?

5 次查看(过去 30 天)
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 个评论
Mathieu NOE
Mathieu NOE 2024-8-29
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)

请先登录,再进行评论。

回答(2 个)

Jimmy Lapierre
Jimmy Lapierre 2024-9-3
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 2024-9-11
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

类别

Help CenterFile Exchange 中查找有关 Measurements and Spatial Audio 的更多信息

产品


版本

R2024a

Community Treasure Hunt

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

Start Hunting!

Translated by