poctave() return value for acoustics analysis
14 次查看(过去 30 天)
显示 更早的评论
Hi all,
I need some assistance understanding the "units" of the data that is returned when calling the MATLAB function [p,cf] = poctave();
I am analysing an audio signal that has been recorded with a microphone. The data is imported into the MATLAB workspace and converted to a calibrated pressure value with units of Pascals (Pa). So the units of the data that I pass to poctave() are Pascals (Pa). The following code snippet shows how I'm using poctave().
flims = [20 Fs/2]; % set the frequency limits of my analysis
bpo = 3; % Third-Octave analysis required
opts = {'FrequencyLimits',flims,'BandsPerOctave',bpo}; % prepare these options for passing to poctave()
% apply the 3rd-Octave filter-bank to my data
[p, cf] = poctave(pressureData,Fs,opts{:});
(Where "pressureData" is my audio data to be filtered, and "Fs" is the sampling frequency of the data.)
My first question is:
1) What are the units of the octave spectrum data returned unto variable 'p'?
I need to know this for my conversion of the data into a dB value using 10*log10(p/pref).
I understand that if I use poctave() as follows:
poctave(pressureData,Fs,opts{:})
then by default it assigns "pref" a value of 1 and the results are as in the following image:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/196221/image.png)
Without units though, the result seems meaningless...
My second question is:
2) what is pref in the previous equation to ensure correct dB values that correlate with a sound pressure level? do I use:
pref = 0.00002; % 20 micro Pascals reference sound pressure level
or:
pref = 0.00002^2; % 20 micro Pascals (squared); i.e. is p returned from poctave() a pressure squared value or a power value??
I want to create a resulting 3rd-Octave spectrum whos dB values match those as though it was being displayed on a Sound Level Meter. I will then correlate these values with those on our Sound Level Meter to validate the data to be processed within MATLAB.
Thanks so much for any assistance you can offer!!
5 个评论
Michiel Heyns
2024-8-24,13:01
You can easily test the algorithm with a sine wave. See below:
% This program test the accuracy of the sounanalysismain program with known
% signals.
% Programmed by: Dr Michiel Heyns
% 2024-08-24
% Functions used
LI=@(Lp) 10*log10(sum(10.^(Lp/10))); % To calculate the equivalent sound pressure level.
% Define parameters and frequencies.
P0=20e-6; % The reference pressure [Pa].
I0=1e-12; % The reference sound intensity [W/m^2].
Fs=98304; % Sampling frequency of the signal [Ha].
F=500; % Frequency of pressure signal.
dB=90; % The dB value to be constructed. Note that rms values are used in L_eq calculations.
ti=0;te=5; t=linspace(ti,te,(te-ti)*Fs);
P=10.^(dB/20)*P0; % But, this is rms amplitude. To determine the amplitude of the sine wave:
P=sqrt(2)*P; % The amplitude of the sine wave that will give the rms pressure above.
Pressure=P*sin(2*pi*F*t);
X=Pressure/P0;
options1={'FrequencyLimits',[30 16000],'BandsPerOctave',3,'Weighting','A','FilterOrder',8};
options2={'FrequencyLimits',[30 16000],'BandsPerOctave',3,'FilterOrder',8};
options3={'spectrogram','FrequencyLimits',[30 16000],'BandsPerOctave',48,...
'OverlapPercent',50,'Weighting','A','FilterOrder',8};
[Lp1,f] = poctave(X,Fs,options1{:});
[Lp2,f] = poctave(X,Fs,options2{:});
[Lp3,f] = poctave(X,Fs,options3{:});
Leq1=round(LI(10*log10(Lp1)),1);
Leq2=round(LI(10*log10(Lp2)),1);
Leq3=round(LI(10*log10(Lp3)),1);
% To see the octave plot, use the command as follows:
figure
poctave(X,Fs,options1{:})
title('1/3 - Octave Spectrum, A-weighted, L_eq = ', num2str(Leq1))
figure
poctave(X,Fs,options2{:})
title('1/3 - Octave Spectrum, No weighting, L_eq = ', num2str(Leq2))
figure
poctave(X,Fs,options3{:})
title('1/48 - Spectrogram, A-weighted, L_eq = ', num2str(Leq3))
采纳的回答
更多回答(3 个)
andytodd.msp
2023-12-27
Hi All, I'm just curious as to the solution to this - as we are in a similar position (using calibrated input data and trying to have results displayed in typical dB SPL values).
I've tryed using the methods above, but I'm not sure if I'm missing something - as we do not seem to get reasonable answers using this method.
For example, the output of poctave at 1kHz is -14.7dB (Average Power). We know the SPL at 1kHz is actually 79.4dB (SPL). I'm struggling to find the link between these two values so that we can convert between the two.
Any help is much appreciated!
Andy
3 个评论
andytodd.msp
2024-1-8
Hi Mark,
No - the data we are importing is already in Pascal units. Its coming from a calibrated measurement system.
What I'm trying to do, is have poctave display the octave values as dB re 20 micropascals - rather than the default 'dB Average Power'.
Does that make sense?
Aitor
2024-5-17
Thank you @Mark Thompson. Now the calibrated values are stored in source.ThirdOctdB. But how do you plot them?Bar plot?
Thanks in advance
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Measurements and Spatial Audio 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!