Sound Pressure Level Calculator

版本 1.2.0.0 (120.6 KB) 作者: Chad Greene
Calculates sound pressure level in decibels, given a pressure signal in pascals.
4.5K 次下载
更新时间 2016/3/4

查看许可证

Calculate sound pressure level (in dB) of given pressure signal 'p_Pa'.
SYNTAX
spl_dB = spl(p_Pa,ref)
spl_dB = spl(p_Pa,ref,windowSize)
spl_dB = spl(p_Pa,ref,windowSize,Fs)

DESCRIPTION
spl_dB = spl(p_Pa,ref) returns sound pressure level in decibels referenced to reference pressure |ref| in pascals. This usage returns a scalar value of spl_dB for the entire p_Pa signal.
spl_dB = spl(p_Pa,ref,windowSize) returns a moving SPL calculation along the window size specified by windowSize, where the units of windowSize are number of time indicies.

spl_dB = spl(p_Pa,ref,windowSize,Fs) returns a moving SPL, where windowSize is not indices of time, but _units_of time equivalent to units of 1/Fs.

INPUTS:
p_Pa = vector of pressure signal in units of pascals. Can be other units if you declare a reference pressure of matching units.

ref = reference pressure in units matching p_Pa or simply 'air' or 'water' if p_Pa is in pascals.

windowSize = window size of moving spl calculation. If no windowSize is declared, the spl of the entire input signal will be returned as a scalar. If windowSize is declared, but Fs is not declared, the units of windowSize are number of elements of the input vector. If windowSize and Fs are declared, the units of windowSize are time given by 1/Fs.

Fs = (optional) sampling frequency. Note! including Fs changes how this function interprets the units of windowSize.

OUTPUT:
SPL = sound pressure level in decibels. If windowSize is declared SPL is a vector of the same length as p_Pa. If windowSize is not declared, SPL is a scalar.

Note that this does account for frequency content. A-weighted decibels (dBA) are frequency-dependent. This function does not compute dBA.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
EXAMPLES
* * * Example 1: * * *

load train % (let's assume y is has pascals as its units)
spl(y,'air')
ans =
84.6

* * * Example 2: Enter your own custom reference pressure: * * *

load train % (let's assume y is has pascals as its units)
spl(y,20*10^-6)
ans =
84.6

* * * Example 3: A moving window of 501 elements and plot: * * *

load train
SPL = spl(y,'air',501); % <-- Here's how to use the function.

t = cumsum(ones(size(y))/Fs);
figure
subplot(2,1,1)
plot(t,y)
axis tight
ylabel('pressure (Pa)')

subplot(2,1,2)
plot(t,SPL)
axis tight
ylabel('spl (dB)')
xlabel('time (s)')

* * * Example 3: A 10 ms moving window and plot: * * *

load train
SPL = spl(y,'air',0.010,Fs);

t = cumsum(ones(size(y))/Fs);
figure
subplot(2,1,1)
plot(t,y)
axis tight
ylabel('pressure (Pa)')

subplot(2,1,2)
plot(t,SPL)
axis tight
ylabel('spl (dB)')
xlabel('time (s)')

引用格式

Chad Greene (2024). Sound Pressure Level Calculator (https://www.mathworks.com/matlabcentral/fileexchange/35876-sound-pressure-level-calculator), MATLAB Central File Exchange. 检索时间: .

MATLAB 版本兼容性
创建方式 R2016a
兼容任何版本
平台兼容性
Windows macOS Linux
类别
Help CenterMATLAB Answers 中查找有关 Audio and Video Data 的更多信息

Community Treasure Hunt

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

Start Hunting!

spl_demo/

spl_demo/html/

版本 已发布 发行说明
1.2.0.0

slidefun now included in the function. Demo included.
MathWorks update: Added Live Script.

1.1.0.0

Version 2 now allows for a moving SPL calculation.

1.0.0.0