本节内容我们来看下如何用Matlab和Python计算声音的声压级和响度。
声压级
1. 声压级定义
首先来看声压级,这个就是指的我们平时所说的声音有多少分贝。声压定义为声波在某一点产生的逾量瞬时压强的均方根值。由于声压容易被人耳感知,也易于测量,因此,通常使用声压作为描述声波大小的物理量。
声压级以符号SPL(sound pressure level)表示,其定义为将待测声压有效值p(e)与参考声压p(ref)的比值取常用对数,再乘以20,即:
在空气中参考声压p(ref)一般取为2e-5帕,这个数值是正常人耳对800赫声音刚刚能觉察其存在的声压值,也就是800赫声音的可听阈声压。一般讲,低于这一声压值,人耳就再也不能觉察出这个声音的存在了。显然该可听阈声压的声压级即为零分贝。
指的是声压有效值,就是一段声音信号的均方根(RMS)。设语音长度为T, 离散点数为N, 则有效声压的计算公式为:
常见的声音分贝值:
声音种类
声压级(分贝)
烈性炸药爆炸声
170
火箭、导弹发射场
150
飞机发动机
120
发电机工作
100
卡车
90
正常谈话
50
轻声耳语
30
农村静夜
10
Matlab代码
由前面的定义可很容易写出SPL的代码,需要注意的是,程序中的输入信号是数字信号,与实际的模拟信号大小成倍数关系。
function spl = SPLCal(x)
len = length(x);
%%
% 有效声压计算,即求RMS
pa = sqrt(sum(x.^2)/len);
%% 声压级计算
% 声压级值spl=20*log10(pa/p0),单位为dB
p0 = 2e-5;
spl = 20*log10(pa/p0);
end
完整代码如下:
clear all;clc;close all;
%%
<