许多音频事件监测实验可以使用公开的固定的数据集,但是某些情况下,使用公开的数据集会面临许多问题,因为我们无法对已经合成的音频进行进一步的处理以得到我们所需要的具有某种特征的音频样本集,这里有两种场景。
场景一、所需的事件音在现实当中非常的稀少,所以找到含有大量的这种事事件音的样本集会变得非常困难。比如一些非常罕见的异常事件,比如枪声,爆炸声,叫喊声,玻璃破碎的声音。这些音频事件一般都带有一定的恐怖性质,可能在许多恐怖电影当中会听到,但是现实当中却很少有机会去遇到这样的音频事件。但是对这些音频事件的监测却具有非常重要的意义,正是出于这些事件音的危害性。如何检测这些事件音是具有重大意义的。 在这种情况下,为了获取大量的样本数据集,必须使用合成的方式。
场景二、我们需要对多场景的情况进行评估。比如对于相同的事件音,我们要对其抵抗噪声的能力进行检测试验,这是我们需要获得对背景噪音的控制。如果使用现成的音频样本进行检测(一般是在单一噪声背景下录制的音频),将会是试验无法进行。
正式基于这样的考虑和需求,使用合成技术得到我们需要的音频流是进行相关研究工作的前提。下面我们对这个问题进行详细的讨论。
一、信噪比
reference:http://en.wikipedia.org/wiki/Signal-to-noise_ratio
所谓信噪比是非噪声信号与噪声信号的比例。一般我们会使用RMS信号能量统计作为每种信号的能力的大小的度量,使用分贝作为信噪比的表现形式。具体定义如下:
我们假设音频原始WAV信号为$wav=[v_{1},v_{2},v_{3},...,v_{n}]$,则
$RMS = sqrt(frac{sum_{i=1}^{n}}{n}wav(i)*wav(i))$
$SNR = 10log_{10}frac_{RMS(event)}^{RMS(noise)}$
这里需要注意的是在分贝的计算中log的底数使用的不是在计算机中常用的2,而是10。
二、音频合成
如何将事件音合成到背景音频上去?
事假音频为:
背景音频为:
我们现在的任务是要将事件音频叠加在背景音频上,但是原始两者的信噪比并不一定是符合我们的需要的,因此我们需要对其进行统一的线性变换,即在需要叠加的数字信号上乘以一个比例系数
下面我们来看一下这个比例系数和信噪比之间的关系。
假设对噪音信号乘以了比例系数$alpha$,假设我们需要的信噪比为$snr$
则
$RMS(event)/RMS(noise)=10^{snr/10}$
为了符号的简单,我们另 $10^{snr/10}$ 简记为ratio
则
$frac_{sum_{i=1}^{n1}(alpha*wavnoise{i})^{2}}^{sum_{i=1}^{n2}wavevent{i}^{2}}=ratio^2$
通过化简我们可以得到
$frac_{alpha^2}^{1}=ratio^2$
则
$alpha=frac_{ratio}^{1}$
因此我们得到了若要得到我们需要的信噪比,需要在噪声信号上所要乘积的系数。
为了防止溢出,需要在两种信号上分别乘以一个值,即
synthesis=a*event+b*noise;
并且a+b=1;
我们知道
$a=frac^{1}_{1+alpha}$
$b=frac^{alpha}_{1+alpha}$
问题得解