听觉掩蔽效应

心理声学模型Ⅱ

Posted by LT on January 29, 2020

本文旨在于梳理“心理声学模型Ⅱ” 中,掩蔽阈值的计算。

一、概述

  • 阈值:被信号能量所掩蔽的最大失真能量。(来自AAC标准 P122)
    1. 首先,在FFT的level上,计算bark带(临界频带)上的 掩蔽阈值; 对于bark带上的 FFT掩蔽阈值nb(b)的计算,考虑的因素有:其他bark频带对本频带的掩蔽作用,音调、非音调成分的掩蔽作用、安静听觉阈值的作用。
    2. 对于掩蔽阈值,从FFT域转换为MDCT域。 感知音频编码中,频域分析是采用MDCT分析滤波器组来获得频域参数的,而心理声学模型是基于FFT来做频谱分析的;而且bark带和比例因子带的划分有所不同。基于此,
  • 对于FFT域的掩蔽阈值,bark带 –> 比例因子带,即nb(b) ----> npart(n)
  • 对于比例因子带上的掩蔽阈值,FFT域 —-> MDCT域,即npart(n) ----> Xmin(n)

Xmin(n)就是我们想要得到的比例因子带上的MDCT域的阈值

二、符号约定

  1. 三个索引
    • w —- FFT谱线中频率索引
    • b —- 分区(bark带、临界频带)索引
    • n —- 比例因子带索引
  2. 变量
    • w_low(n)、w_high(n):在比例因子带n中,最低、最高的频率索引
    • w_low(b)、w_high(b):在bark带n中,最低、最高的频率索引

三、计算过程

  1. r(w)、f(w):对音频时域信号加窗、FFT变换后,得到的频谱幅度值和相位。
  2. 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 ln⁡c(b)\)

  1. 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。
  1. 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带里的每根谱线的阈值视作相同。
  2. 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)\)