赞
踩
下图展示了,人工主观语音评估mos-lqs,双端和单端客观语音评估mos-lqo这三种方法的差异。
p563算法可以被想象成一个专家使用测试设备如传统的听筒侦听一个真实的电话。这个形象的表达解释了算法主要的应用并且允许使用者去对P563算法获得的分数进行评分。P563算法给出的质量分通过在测量点连接一个常规的听筒基于感知质量预测。
因此,侦听设备是p563算法的一部分,信号首先会被预处理。整个预处理过程由话音接收端模型开始。之后是通过语音活动检测算法(VAD)信号中包含话音的部分并计算话音电平。最终话音电平被调整到-26dbov(3300以下)。预处理过的语音数据将分别进行几项独立分析研究,像一层多个传感器,检测一组表征信号的参数。之后基于一组关键参数,开始分析主要的失真类型。
关键参数和分析出的主要失真类别等用于调整语音质量模型。尽管多个不同失真发生在同一个信号中,但某些失真要比其他失真作用更显著,这提供了一个基于感知的加权。P563的基础方框图下图给出:
P563算法的信号参数化可以被分为以下三个独立的函数部分,这与失真的主要类别相对应:
最终为了证明最终语音客观质量评分结果与语音质量主观评分mos-lqs关联,引入相关系数这一数学指标。P563和主观评分的关联程度可以用相关系数描述:
r
=
∑
(
x
i
−
x
ˉ
)
(
y
i
−
y
ˉ
)
(
x
i
−
x
ˉ
)
2
(
y
i
−
y
ˉ
)
2
r=\frac{\sum (x_{i}-\bar{x})(y_{i}-\bar{y})}{\sqrt{(x_{i}-\bar{x})^2(y_{i}-\bar{y})^2}}
r=(xi−xˉ)2(yi−yˉ)2
∑(xi−xˉ)(yi−yˉ)
式子中,xi是第i种情景下主观mos得分,yi是对应情况下P.563算法计算出的客观质量评分,
x
ˉ
\bar{x}
xˉ,
y
ˉ
\bar{y}
yˉ是所有情况下的均值。
在已知24组遵循ITU基准的测试实验中,相关系数平均值为0.88。
VAD算法基于一个自适应能量阈值,逐帧检测音频能量,超过阈值则为活跃语音信号,否则为无声段(背景噪声段),详细框图如下:
自适应能量阈值thest首先设定为全局均值,之后自适应逼近环境噪声值,公式如下:
{
m
x
=
∑
i
=
0
n
−
1
x
n
o
i
s
e
(
i
)
n
t
h
e
s
t
=
m
x
+
2
∗
∑
i
=
0
n
−
1
(
x
n
o
i
s
e
(
i
)
−
m
x
)
2
n
\left\{mx=∑n−1i=0xnoise(i)n thest=mx+2∗√∑n−1i=0(xnoise(i)−mx)2n\right.
{mx=∑i=0n−1nxnoise(i) thest=mx+2∗∑i=0n−1n(xnoise(i)−mx)2
还有两点额外判定:
测试的信号经过中间系统的传递后,对某些参数会造成影响。基于此,在预处理阶段需要进行一下两项步骤:
滤波后的信号即可应用于语音音量衰减、非人声、帧重复、非自然哔哔声、基本音质、非自然安静、局部背景噪声和全局背景噪声的测试中。
为了归一化到-26 dBov,算法基于VAD的输出计算每个活动帧的均方根值来估计语音水平。信号电平被归一化后,使用四阶巴特沃思高通滤波器滤波,截止频率100hz。
除了计算语音静默的参数要求原始信号以外,所有不使用IRS滤波信号的参数都使用这个归一化信号。
SpeechSectionsLevelVar是一个描述句子之间层次变化的描述符,它计算信号中每个语音部分的电平以及最大值和最小值之间的差值。
LocalLevelVar描述信号的能量变化。均方根值是逐帧计算的。然后计算均方根数组的一阶导数,计算功率均值。
基音周期和基音频率数据在后续的P563算法中是需要的,基音周期及频率数据提取框图如下:
人在发音时,根据声带是否震动可以将语音信号分为清音跟浊音两种。**浊音又称有声语言,携带着语言中大部分的能量,浊音在时域上呈现出明显的周期性;而清音类似于白噪声,没有明显的周期性。**发浊音时,气流通过声门使声带产生张弛震荡式振动,产生准周期的激励脉冲串。**这种声带振动的频率称为基音频率,相应的周期就成为基音周期。**
基音周期估计是通过自相关方法实现的,自相关计算中每一帧64ms(512个点),帧重叠面积50%。信号首先进行汉宁窗加窗处理:
y
i
=
0.5
x
i
[
1
−
c
o
s
(
w
)
]
f
o
r
i
=
0..
(
n
−
1
)
y_{i}=0.5x_{i}[1-cos(w)]\quad for\ i=0..(n-1)
yi=0.5xi[1−cos(w)]for i=0..(n−1)
其中:
w
=
2
π
i
n
w=\frac{2\pi i}{n}\\
w=n2πi
x为输入信号,n为帧长度
R
y
(
τ
)
=
y
(
τ
)
⊗
y
∗
(
−
τ
)
=
f
f
t
−
1
(
f
f
t
(
w
)
×
f
f
t
(
w
)
∗
)
R_{y}(\tau)=y(\tau)\otimes y^{*}(-\tau)=fft^{-1}(fft(w)\times fft(w)^{*})
Ry(τ)=y(τ)⊗y∗(−τ)=fft−1(fft(w)×fft(w)∗)
自相函数表示一个信号和延迟 τ \tau τ点后该信号本身的相似性。如果信号x(n)具有周期性,那么它的自相关函数也具有周期性,而且周期与信号x(n)的周期性相同。自相关函数提供了一种获取周期信号周期的方法。在周期信号周期的整数倍上,它的自相关函数可以达到最大值,因此可以不考虑起始时间,而从自相关函数的第一个最大值的位置估计出信号的基音周期,这使自相关函数成为信号基音周期估计的一种工具。
R y ( τ ) R_{y}(\tau) Ry(τ)基于最大值 R y ( 0 ) R_{y}(0) Ry(0)归一化,使用幅值一半的汉宁窗过滤输出数组的32个之后的元素。滤波后的自相关系数Ni由下式给出:
N
i
=
R
i
R
0
f
o
r
i
=
0
,
1
,
2
,
.
.
.
31
a
n
d
N
i
=
R
i
2
R
0
[
1
−
c
o
s
(
w
)
]
f
o
r
i
=
32
,
33
,
.
.
.
,
n
−
1
N_{i}=\frac{R_i}{R_0}\ for\ i=0,1,2,...31\ andN_{i}=\frac{R_i}{2R_0}[1-cos(w)]\ for\ i=32,33,...,n-1
Ni=R0Ri for i=0,1,2,...31 andNi=2R0Ri[1−cos(w)] for i=32,33,...,n−1
其中
w
=
2
π
i
64
w=\frac{2\pi i}{64}
w=642πi
然后在第20个和第100个元素之间搜索最大值,其基音频率范围从80Hz(T=100*0.125=12.5ms)到400Hz(T=20*0.125=2.5ms),(这是我的理解,与手册有些许出入)。如果这个最大值大于0.5,那么这帧被归类为浊音,保存候选基音周期最大值(Tmax)。
我们得到了每个浊音帧的基音周期,为了避免基音加倍(意思是我们找到的是谐音而不是基音),我们维护的候选基音周期最大值( T m a x T_{max} Tmax)需要与上一帧被判为浊音的基音周期 T o l d T_{old} Told( T o l d T_{old} Told相当于一个局部峰值)进行比较。
若满足如下公式:
N
T
o
l
d
>
1
+
N
T
m
a
x
3
N_{T_{old}}>\frac{1+N_{T_{max}}}{3}
NTold>31+NTmax
则我们判定误拾谐音,之前找到的只是局部峰值,更新候选基音周期最大值
T
m
a
x
T_{max}
Tmax,而被
T
o
l
d
T_{old}
Told设置为当前帧的基音周期。
为了更清晰的讲解基音周期的检测的原理,借用一张图片来说明,下图是某帧语音的自相关函数图,采样率16k:
该帧的自相关函数中,除去第一个最大值后(0处),最大值Kmax= 114,那么该帧对应的基频16kHz/114=140Hz。由于P563算法使用的采样率为8khz,所以与本图计算基频周期有较小的差别。更多语音基音检测的细节可参考这篇文章,可以加深对语音基频的理解,通俗易懂,博客链接https://blog.csdn.net/zouxy09/article/details/9141875。
精确地确定语音最大幅度的位置是语音信号基音同步分析的一个重要部分,基音周期被精确地估计出来之后,还需要进行基音标注,准确地标注基音脉冲的最大位置。
P563算法使用的方法是**加窗语音信号 x x x与脉冲序列的互相关 y y y(卷积)**来寻找基音标注位置。对基音标注的算法,标注的位置一般都是在基音脉冲的短时能量的尖峰时刻上,P563算法逐帧执行以找到最佳的基音标注位置。
互相关公式为:
R
x
y
(
τ
)
=
x
(
τ
)
⊗
y
(
τ
)
R_{xy}(\tau)=x(\tau)\otimes y(\tau)
Rxy(τ)=x(τ)⊗y(τ)
x i = 0.5 z i [ 1 − c o s ( w ) ] f o r i = 0... n x_{i}=0.5z_{i}[1-cos(w)]\quad for\ i=0...n xi=0.5zi[1−cos(w)]for i=0...n
其中 w = 2 π i n w=\frac{2\pi i}{n} w=n2πi,z为输入语音原始信号,n为帧长, { y i = 1 if i 为 基 音 周 期 l 的 倍 数 y i = 0 if i 为 其 他 {yi=1if i为基音周期l的倍数yi=0if i为其他 {yi=1yi=0if i为基音周期l的倍数if i为其他, τ \tau τ是偏移量, l l l是基音周期。
当上述算法计算结束, i m a x i_{max} imax被标记为最大的 R x y R_{xy} Rxy的下标,基音就标记在这一帧偏差量为 i m a x i_{max} imax的位置。
由于使用互相关的方法进行基音位置标注过程中时间对齐的误差,帧重叠的做法导致可能出现近距离上多个基音标记。如果两个基音标记之间的间隔小于10个点(1.25ms),则认为它们是由同一个基音派生而来的,相邻的基音间隔也被分析,那些长度超过给定阈值的基音间隔被标记为不一致。P563设计了一个局部调整的算法用于修改基音标记到最佳位置,并对基音标注不一致性进行记录。
在每个被判决为浊音的区段中,检测出持续时间最长的基音,这种稳定的基音会延伸到余下的部分。算法将基于此加强一些基音标记位置,完全删除一些,并纠正其他位置,基频一致性检测流程图如下图所示。
算法具体流程为:在各浊音区段的一致性基音(持续时间最长最稳定的基音)检测到之后,启动之后的基音标记鉴别(流程图F2处)。在各浊音段本地检查,尝试将各段的音高标记更合理地放置在输入音频波形中并符合一致性阈值(流程图G2处)。如果不符合一致性检测,则删除当前不合理的基音标记,算法向后移动(流程图F3处),一区段一区段的进行检查。通过这种方式,实现所有浊音段的基音标记遵循一致性。
由于处理的语音是以帧为框架来划分的,浊音区段有看似合理的基音标记,在边界处可能是不对的。边界处的基音检测误差大大增加,甚至无法检测。P563针对这个问题,采用了边界检查算法。下图为浊音段边界基音检查流程图(Voiced segment boundary pitch review),展示了用于评估和纠正浊音部分边界标记的算法。
在区段边界处,不断尝试可超过原定边界放置候选的更长基音周期(try 周期更大,频率更小基音记为pitch-cycle)进行评估(图6,C1)。将这个新定义的pitch-cycle与三个阈值进行比较(图6,D1, E2, F3)。如果没通过任意一个测试,它将被pass掉,这个最后已知(成功通过三个阈值测试)的基音标记将被删除(图6,G1)。这个基音标记被移除的位置被存储起来,用于后续的稳定性评估(图6,G2)。
在下一轮迭代中,对旧段边界内的基音标记进行详细检查。如果新定义的基音周期满足所有定义的阈值范围,则认定它为有效,并添加基音标记(图6,G3)。通过这种方式,分段可以缩小和扩展。根据下面定义的规则,若都满足,则将分段连接在一起。而当接受新的音高标记时,将与之前删除的标记进行比较(图6,H3)。当发现他们匹配时,则该段分界是稳定的,不需要进一步扩展或缩小。
P563算法基于一系列信号参数的集合来分类不自然语音以及进行语音质量评估的。基本上,这些信号参数可以细分为两组:
用于语音的统计学参数主要基于倒谱和LPC参数的高阶统计量分析这两种公认信号处理技术。偏度(skewness)和峰度(kurtosis)这两个高阶矩,特别适用于进一步分析信号的性质。这些是统计信号是统计数据分布非高斯性的经典数字特征。
下图是语音统计学参数计算流程图Calculation of speech statistics
偏度(skewness),是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。偏度(Skewness)亦称偏态、偏态系数。偏度表征概率密度曲线相对于平均值不对称程度的特征数。直观看来就是密度函数曲线尾部的相对长度。
根据定义,偏度是样本的三阶标准化矩,定义式如下,其中 k 3 k_{3} k3表示三阶中心矩:
s k e w ( X ) = E [ ( X − μ σ ) 3 ] = k 3 σ 3 skew(X)=E[(\frac{X-\mu}{\sigma})^3]=\frac{k_{3}}{\sigma_{3}} skew(X)=E[(σX−μ)3]=σ3k3
以下是一些典型分布的偏态值:
拉普拉斯分布Laplace,正态分布normal,均匀分布normal:0
指数分布Exponential:2
下图为不同数据分布的偏态特征图:
峰度(kurtosis)又称峰态系数。表征概率密度曲线在平均值处峰值高低的特征数。直观看来,峰度反映了峰部的尖度。样本的峰度是和正态分布相比较,如果峰度大于三,峰的形状比较尖,比正态分布峰要陡峭。反之亦然。
根据定义,峰度可以表示为四阶标准矩,其中
k
4
k^4
k4表示四阶中心距,
σ
\sigma
σ是标准差:
E
[
(
X
−
μ
σ
)
4
]
或
k
4
σ
4
E[(\frac{X-\mu}{\sigma})^4]或\frac{k^4}{\sigma^4}
E[(σX−μ)4]或σ4k4
P563算法中,峰度被定义四阶中心矩除以概率分布方差的平方再减去3:
K
u
r
t
(
X
)
=
k
4
σ
4
−
3
Kurt(X)=\frac{k^4}{\sigma^4}-3
Kurt(X)=σ4k4−3
这也被称为超值峰度(excess kurtosis)。“减3”是为了让正态分布的峰度为0(大多数软件对峰度的定义都包含“减3”)。
以下是一些典型分布的峰度值:
正态分布normal:0
拉普拉斯分布:3
指数分布Exponential:6
其中正态分布峰度(超值峰度)为0的推理过程:
K
u
r
t
(
正
态
分
布
)
=
E
[
(
X
−
μ
σ
)
4
]
−
3
=
E
(
Z
4
)
−
3
=
∫
−
∞
+
∞
x
4
e
−
x
2
2
2
π
d
x
−
3
=
0
Kurt(正态分布)=E[(\frac{X-\mu}{\sigma})^4]-3=E(Z^4)-3=\int_{-\infty}^{+\infty}\frac{x^4e^{-\frac{x^2}{2}}}{\sqrt{2\pi}}dx-3=0
Kurt(正态分布)=E[(σX−μ)4]−3=E(Z4)−3=∫−∞+∞2π
x4e−2x2dx−3=0
下图为不同数据分布的峰度对比图:
线性预测编码(LPC)的峰度和偏度,以及LPC偏度的绝对值,特别适合于语音信号特性的估计。
线性预测分析的基本思想是:由于语音样点之间存在相关性,所以可以用过去的样点值来预测现在或未来的样点值,即一个语音的抽样能够用过去若干个语音抽样或它们的线性组合来逼近。预测公式如下:
s
^
(
n
)
=
∑
i
=
1
p
a
i
s
(
n
−
1
)
\hat{s}(n)=\sum_{i=1}^{p}a_{i}s(n-1)
s^(n)=i=1∑pais(n−1)
预测误差
ϵ
(
n
)
\epsilon(n)
ϵ(n)为:
ϵ
(
n
)
=
s
(
n
)
−
s
^
(
n
)
=
s
(
n
)
−
∑
i
=
1
p
a
i
s
(
n
−
i
)
\epsilon(n)=s(n)-\hat{s}(n)=s(n)-\sum_{i=1}^{p}a_{i}s(n-i)
ϵ(n)=s(n)−s^(n)=s(n)−i=1∑pais(n−i)
通过在某个准则下使预测误差
ϵ
(
n
)
\epsilon(n)
ϵ(n)达到最小值的方法来决定唯一的一组预测系数
a
i
(
i
=
1
,
2
,
.
.
.
,
p
)
a_{i}(i=1,2,...,p)
ai(i=1,2,...,p)。鉴于语音信号的时变特性,LPC分析必须按帧进行,使预测误差在某个准则下最小,求预测系数的最佳估值
a
i
a_{i}
ai,这个准则通常采用最小均方误差准则。
P563算法使用的LPC系数的数量为21。
σ n L P C = 1 P [ ∑ p = 1 P α p 2 − 1 P ( ∑ p = 1 P α p ) 2 ] \sigma_{n}^{LPC}=\frac{1}{P}[\sum_{p=1}^{P}\alpha_{p}^2-\frac{1}{P}(\sum_{p=1}^{P}\alpha_{p})^2] σnLPC=P1[p=1∑Pαp2−P1(p=1∑Pαp)2]
通过对每个活跃语音帧的LPC向量求值,得到LPC峰度和LPC偏度:
LPC向量的峰度(kurtosis)计算公式如下,其中P为LPC系数数量
K
n
L
P
C
=
1
P
∑
p
=
1
P
(
α
p
−
1
P
∑
p
=
1
P
α
p
σ
n
L
P
C
)
4
−
3
K_{n}^{LPC}=\frac{1}{P}\sum_{p=1}^{P}(\frac{\alpha_{p}-\frac{1}{P}\sum_{p=1}^{P}\alpha_p}{\sigma_{n}^{LPC}})^4-3
KnLPC=P1p=1∑P(σnLPCαp−P1∑p=1Pαp)4−3
LPC向量的偏度(skewness)计算公式如下,其中P为LPC系数数量
S n L P C = 1 P ∑ p = 1 P ( α p − 1 P ∑ p = 1 P α p σ n L P C ) 3 S_{n}^{LPC}=\frac{1}{P}\sum_{p=1}^{P}(\frac{\alpha_{p}-\frac{1}{P}\sum_{p=1}^{P}\alpha_p}{\sigma_{n}^{LPC}})^3 SnLPC=P1p=1∑P(σnLPCαp−P1∑p=1Pαp)3
结果将在所有活动语音帧上取平均值:
K
‾
L
P
C
=
1
N
∑
n
=
1
N
K
n
L
P
C
S
‾
L
P
C
=
1
N
∑
n
=
1
N
S
n
L
P
C
\overline{K}^{LPC}=\frac{1}{N}\sum_{n=1}^{N}K_{n}^{LPC} \\ \overline{S}^{LPC}=\frac{1}{N}\sum_{n=1}^{N}S_{n}^{LPC}
KLPC=N1n=1∑NKnLPCSLPC=N1n=1∑NSnLPC
式中,n=1…N,N为活跃语音帧的数量,活跃语音帧满足
E
n
>
E
m
i
n
S
p
e
e
c
h
E_n>E_{minSpeech}
En>EminSpeech。
同理,对于倒谱系数的标准差,峰度,偏度的计算与之前内容类似,公式依次给出:
σ
n
c
e
p
=
1
M
[
∑
m
=
1
M
c
m
−
1
M
(
∑
m
=
1
M
c
m
)
2
]
K
n
c
e
p
=
1
M
∑
m
=
1
M
(
c
m
−
1
M
∑
m
=
1
M
c
m
σ
n
c
e
p
)
4
−
3
S
n
c
e
p
=
1
M
∑
m
=
1
M
(
c
m
−
1
M
∑
m
=
1
M
c
m
σ
n
c
e
p
)
3
\sigma_{n}^{cep}=\frac{1}{M}[\sum_{m=1}^{M}c_m-\frac{1}{M}(\sum_{m=1}^{M}c_m)^2]\\ K_{n}^{cep}=\frac{1}{M}\sum_{m=1}^{M}(\frac{c_m-\frac{1}{M}\sum_{m=1}^{M}c_m}{\sigma_{n}^{cep}})^4-3\\ S_{n}^{cep}=\frac{1}{M}\sum_{m=1}^{M}(\frac{c_m-\frac{1}{M}\sum_{m=1}^{M}c_m}{\sigma_{n}^{cep}})^3
σncep=M1[m=1∑Mcm−M1(m=1∑Mcm)2]Kncep=M1m=1∑M(σncepcm−M1∑m=1Mcm)4−3Sncep=M1m=1∑M(σncepcm−M1∑m=1Mcm)3
式中M为倒谱系数数量,m为倒谱系数下标
同理,结果将在所有活动语音帧上取平均值:
K
‾
c
e
p
=
1
N
∑
n
=
1
N
K
n
c
e
p
S
‾
c
e
p
=
1
N
∑
n
=
1
N
S
n
c
e
p
\overline{K}^{cep}=\frac{1}{N}\sum_{n=1}^{N}K_{n}^{cep} \\ \overline{S}^{cep}=\frac{1}{N}\sum_{n=1}^{N}S_{n}^{cep}
Kcep=N1n=1∑NKncepScep=N1n=1∑NSncep
式中,
n
=
1...
N
n=1...N
n=1...N,
N
N
N为活跃语音帧的数量,活跃语音帧满足
E
n
>
E
m
i
n
S
p
e
e
c
h
E_n>E_{minSpeech}
En>EminSpeech。
由此产生的倒频谱偏度 S ‾ c e p \overline{S}^{cep} Scep和峰度 K ‾ c e p \overline{K}^{cep} Kcep可用于描述语音信号的失真程度。结果值较小,在0到1之间表示语音信号的高度退化(无序噪音的倒谱接近正态分布?未论证)。未失真信号的典型值在2到4之间。
在这个模块中,人类声道被建模成由多个等长的不同截面积的管子串联而成的系统(声管模型)。在短时间内,声道可表示为形状稳定的管道,并可以认为声波是沿管轴传播的平面波。根据语音信号,这些横截面面积被确定。然后对这些面积进行非自然变异分析。
带基音标记的语音信号流允许在可变的时间坐标上从语音的浊音部分提取相关参数。这比固定帧分析更能准确可靠地表示语音,这比固定帧长分析更能准确可靠地表示语音。这也意味着声道模型提取与分析模块是和语音波形产生同步进行的系统因为人类声道形变和语音波形同步变化。
声道参数提取步骤如图所示:
LPCs不是在固定帧长和固定间隔上逐帧计算,而是在基音同步帧上执行,重叠率为50%。这里定义一个可变语音帧长总是包括两个连续的基音标记即可变语音帧的长度等于两个连续的基音标记之间距离的两倍。变长语音帧在第一个基音标记之前半个基音周期处开始,并在第二个基音标记之后半个基音周期结束。
下图是一个关于可变帧划分示例,假设现在有三个连续的基音标记,分别为A,B,C
对之前定义的每一"帧"提取八阶线性预测系数。在计算自相关函数之前加汉明窗,采用Schur递归法(没具体了解过)得到预测系数。
8根声管的截面积Sm,用**反射系数
μ
\mu
μ**计算,计算公式如下:
S
m
=
1
+
μ
m
1
−
μ
m
S
m
+
1
S_{m}=\frac{1+\mu_{m}}{1-\mu_{m}}S_{m+1}
Sm=1−μm1+μmSm+1
计算每个基音周期的声管截面,得到的矩阵称为VTP,它代表从声门到嘴唇的声道管截面。
2.2.2.1.4 Cavity tracking腔跟踪
VTP信息被简化为3个参数,分别代表前腔、中腔和后腔。为了生成这些参数,VTP按以下方式分组:
Cavity | Tubes |
---|---|
Rear | 1,2,3 |
Middle | 4,5,6 |
Front | 7,8 |
每个基音标记处的结果存储在一个名为ART(articulators构音器官)的数组中。
这个参数是整个输入信号上第一个VTP管的最大截面尺寸。
该参数代表了最后一个VTP管的平均截面尺寸。
该参数是后腔的平均截面面积。
这个参数描述了后腔和中腔之间的相互关系。对于每个基音帧,计算后腔和中腔的截面面积差。然后计算生成的阵列中平滑截面的长度。当连续的元素值变化不超过0.25时,截面被认为是一致的。然后,将这个长度在找到的截面数以及基音数上求平均。
这个参数跟踪声道内的振幅变化。对于每一帧数据,找到八管中最大的截面位置。通过计算该位置阵列的导数来确定其变化量,然后对这个变量数组取平均值,这个变量数组可描述声道内的振幅变化。
该参数计算整个语音中,浊音段在语音部分(活跃语音段包含浊音以及声带不振动的清音等)的比例。
这两个参数是基于浊音段的连续帧的,而帧的构建类似于基音同步LPC帧(参见2.2.2.1.1帧的构建).
含有太多周期性的的语音信号被称为机器人音,这些信号大多是由于GSM网络中使用的带宽限制造成的。
要将信号分类为机器人音,只有在2200hz和3300hz之间的信号成分才有用。利用信号在这个范围内的分量,通过32毫秒长度的相邻信号帧的互相关性计算周期性。在这个过程中,下一步将帧分类为非静默帧和静默帧以及周期性帧和非周期性帧:若帧的功率超过 1 0 6 10^6 106,则一个帧是非沉默的;若其各自的互相关超过0.84,且 L 1 L_1 L1范数至少为2.52,则呈现周期性。
如果非静默帧中周期帧的百分比大于3.4%,则声明这至少3.4%的周期帧为机器人帧来计算机器人化模块输出值。
该模块被训练用于检测信号中的重复帧。该算法利用了重复帧通常具有的高互相关特性。算法的详细描述如下图所示:
模块的输出有两个值:
当一个信号被发出时,它可以用一个复合音来表示。然而,一个自然发出的声音总是包含一个持续很短时间的浊音部分。在这个信号描述符中,发声开始时不包含浊音分的持续时间短的复杂音调被称为异常的哔哔声。
非自然哔哔声的检测器考虑的是持续时间为32毫秒、总长度为160毫秒、位移为16毫秒的时间信号帧的周期特性。周期性本身是由频率范围在250到1200赫兹之间的光谱不平直度推导出来的。如果周期性在160毫秒内上下起伏(不满足一致性特性),则判定该160ms语音为一种非自然的哔哔声,模块输出值计算如下:
基本语音质量模块在心理声学模型的帮助下评估波形失真的影响,下图显示了语音增强器和基于感知的侵入式语音质量测量两个功能块的相互作用原理。
语音增强器可以分为三个逻辑模块,如下图所示。
lpc分析:使用Levinson-Durbin算法对时间信号进行分析,得到信号的残差和10个lpc系数。
声道模型:对lpc系数进行修改,使之适合人类说话者的声道模型。
lpc合成:将残差与修改后的lpc系数再次结合,重建语音增强过的时序信号。
侵入式感知语音质量测量是一种复杂的测量方法。因此,这里没有提供完整的描述,读者可以参考C源代码获得详细的描述。下面两张框图给出了算法的概述。提出了感知模型的核心和基本语音质量的最终确定方法。
选取长32ms (8 kHz采样率)的汉宁窗,使用短时傅里叶变换将时间信号映射到频域,帧重叠率为50%。
听觉的绝对阈限是指人的听觉系统感受到的最弱声音和痛觉声音的强度值,与声压有关。阈限以外,人耳感受性降低以致不能产生听觉。绝对听力阈限 P 0 ( f ) P_{0}(f) P0(f)通过插值得到,并以此计算出Bark(巴克)域上24个临界频带的中心频率值,这些值存储在一个数组中,用于Zwicker响度公式。
语音文件如果开头和结尾处有较长时间的静默间距,这可能会影响文件中某些平均失真值的计算。因此,在这些文件的开头和结尾对静默部分进行了估计。从伪增强语音文件的开始和结束,五个连续的绝对采样值的总和必须超过500,以便将该位置视为活动语音间隔的开始或结束。开始和结束之间的时间间隔被定义为活动语音时间间隔。为了节省计算时间或存储空间,一些计算可以限制在活动时间间隔内。
Bark域尺度反映出,在低频时,人类听觉系统的频率分辨率比在高频时要高。这是通过对FFT带进行归一化,并将FFT的相应功率值相加来实现的,所得到的信号称为基音功率密度PPXWIRSS(f)n和PPYWIRSS(f)n。
在对滤波和短期增益变化进行部分补偿后,利用兹威克定律将伪增强型和劣化的基音功率密度转换到Sone响度尺度:
L
X
(
f
)
n
=
S
i
∗
(
P
0
(
f
)
0.5
)
)
γ
∗
[
(
0.5
+
0.5
∗
P
P
X
W
I
R
S
S
′
(
f
)
n
P
0
(
f
)
)
γ
−
1
]
LX(f)_{n}=S_{i}*(\frac{P_{0}(f)}{0.5}))^{\gamma}*[(0.5+0.5*\frac{PPX^{'}_{WIRSS}(f)_{n}}{P_0(f)})^\gamma-1]
LX(f)n=Si∗(0.5P0(f)))γ∗[(0.5+0.5∗P0(f)PPXWIRSS′(f)n)γ−1]
式中,
P
0
(
f
)
P_0(f)
P0(f)是绝对听觉阈限,
S
l
S_l
Sl是响度收缩因子(2.2.4.2.4)
在Bark域4以上,兹威克幂是0.23。4以下,兹威克幂略有增加,以解释所谓的补偿效果。由此产生的二维阵列 L X ( f ) n LX(f)_n LX(f)n和 L Y ( f ) n LY(f)_n LY(f)n称为响度密度。
计算失真和伪增强响度密度之间的差值。当这个差值为正时,说明一些成分如噪声就被加入了。当这个差值为负时,说明伪增强信号中的部分分量被忽略,这种差分阵列称为原始干扰密度。
计算每个时频单元伪增强和伪退化的响度密度的最小值,并用最小值乘以0.25。相应的二维数组称为掩模数组。以下规则适用于每个时频单元:
最终的输出值(BasicVoiceQuality)是平均干扰值(BasicVoiceQualitySym),不对称扰动值(BasicVoiceQualityAsym)和频率范围在20到170Hz内的单位为db的平均功率谱密度值比较值(FractionLow)的一个线性组合。基本音质的范围是1到11。
该模型的输出值为:
未完待续
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。