本文旨在于梳理“心理声学模型Ⅱ” 中,掩蔽阈值的计算。
一、概述
- 阈值:被信号能量所掩蔽的最大失真能量。(来自AAC标准 P122)
- 首先,在FFT的level上,计算bark带(临界频带)上的 掩蔽阈值; 对于bark带上的 FFT掩蔽阈值nb(b)的计算,考虑的因素有:其他bark频带对本频带的掩蔽作用,音调、非音调成分的掩蔽作用、安静听觉阈值的作用。
- 对于掩蔽阈值,从FFT域转换为MDCT域。 感知音频编码中,频域分析是采用MDCT分析滤波器组来获得频域参数的,而心理声学模型是基于FFT来做频谱分析的;而且bark带和比例因子带的划分有所不同。基于此,
- 对于FFT域的掩蔽阈值,bark带 –> 比例因子带,即
nb(b) ----> npart(n)
; - 对于比例因子带上的掩蔽阈值,FFT域 —-> MDCT域,即
npart(n) ----> Xmin(n)
。
Xmin(n)
就是我们想要得到的比例因子带上的MDCT域的阈值
。
二、符号约定
- 三个索引
- w —- FFT谱线中频率索引
- b —- 分区(bark带、临界频带)索引
- n —- 比例因子带索引
- 变量
- w_low(n)、w_high(n):在比例因子带n中,最低、最高的频率索引
- w_low(b)、w_high(b):在bark带n中,最低、最高的频率索引
三、计算过程
- r(w)、f(w):对音频时域信号加窗、FFT变换后,得到的频谱幅度值和相位。
- tb(b)的计算
- 考虑到音调(纯音)成分和非音调(噪声)成分的掩蔽性不同,在此引入tb(b): tb(b):bark带b的音调索引函数,表示该频带b是音调成分的概率,对音调和非音调加以区分,以便合理地计算一个bark带上的FFT阈值。
- pred_r(w)、pred_f(w):FFT幅值r(w)、相位f(w)的预测值。当前时刻t的pred_r(w)、pred_f(w)由前两帧(t-1,t-2)的r(w)、f(w)算得。
- c(w):不可预测性。即pred_r(w)、pred_f(w)和实际值r(w)、f(w)之间的差距。
- c(b):每个bark带上的不可预测性。(考虑到其他bark带对本bark带的掩蔽影响,实际运算中,还需要与扩展函数做卷积+规范化)
\(c(w)= diff\{[r(w),f(w)],[pred _r (w),pred _f (w)]\}\) \(c(b)=\sum_{w=w\_low(b)}^{w\_high(b)} * c(w)r(w)\) \(tb(b) = -0.299-0.43 lnc(b)\)
- nb(b)的计算,引入安静阈值修正。
- nb(b):bark带上的,FFT域的掩蔽阈值。
- e(b):bark带上的,FFT能量。(考虑到其他bark带对本bark带的掩蔽影响,实际运算中,还需要与扩展函数做卷积+规范化)
- SNR(b):每个bark带的信噪比
- tb(b):bark带b的音调索引函数,上面已经计算了。
\(e(b)=\sum_{w=w\_low(b)}^{w\_high(b)} r(w)^2\) \(SNR(b)=tb(b)×18dB+(1-tb(b))×6dB\) \(nb(b)=e(b)×10^{-SNR(b)/10}\)
如果算得的nb(b)小于安静听觉阈值qsthr(b),这种情况是无意义的,此时应该将阈值设为听阈。因此,引入qsthr(b)对nb(b)进行修正:
\[nb(b)=max[qsthr(b), min[nb(b),nb _l (b)×k] ]\]- 其中,nb_l(b)是上一个bark带上的,FFT域的掩蔽阈值。对于常数k,对于短块k=1,长块k=2。
- nb(b) —-> npart(n)(后面会用到)
- nb(b)是bark带上的,FFT域的掩蔽阈值
- npart(n)是比例因子带上的,FFT域的掩蔽阈值
- 二者可以转换。转换方法是: \(thr(w) = nb(b)/(w\_high(b)-w\_low(b)+1)\) 其中w∈[w_high(b),w_low(b)] \(npart(n) = min[thr(w _low(n)),......,thr(w_high(n))]×(w\_high(n)-w\_low(n)+1)\)
- 其中,thr(w)是FFT频谱中每根谱线的阈值。可见,一个bark带里的每根谱线的阈值视作相同。
- Xmin(n)计算方式如下。 其中,npart(n)是比例因子带上的FFT域的掩蔽阈值,epart(n)是比例因子带上的FFT能量,codec(n)是比例因子带上的MDCT能量。
\(epart(n)=\sum_{w=w\_low(n)}^{w\_high(n)}r(w)^2\) \(codec(n)=\sum_{i=1}^n mdct(i)^2\) \(Xmin(n)=npart(n)/epart(n)×codec(n)\)