Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

15.4 声学语音学与信号

我们先非常简要地介绍声学波形、波形数字化以及频率分析;感兴趣的读者可以参考本章末尾列出的文献。

15.4.1 波

声学分析建立在正弦和余弦函数之上。图 15.10 展示了一个正弦波,具体是函数

y=Asin(2πft)(15.3)y = A * \sin (2 \pi f t)\tag{15.3}

其中振幅 AA 设为 1,频率 ff 为每秒 10 个周期。

图 15.10 频率为 10 Hz、振幅为 1 的正弦波。

回忆基础数学,波的两个重要特征是频率和振幅。频率是波每秒重复的次数,即周期数。我们通常用每秒周期数来衡量频率。图 15.10 中的信号在 0.5 秒内重复 5 次,因此频率为每秒 10 个周期。每秒周期数通常称为赫兹(hertz,缩写为 Hz),所以图 15.10 中的频率可以描述为 10 Hz。正弦波的振幅 AA 是 Y 轴上的最大值。波的周期 TT 是完成一个周期所需的时间,定义为

T=1f(15.4)T = \frac {1}{f}\tag{15.4}

图 15.10 中每个周期持续十分之一秒,因此 T=0.1T=0.1 秒。

15.4.2 语音声波

下面从假想的波转向声波。语音识别器的输入和人耳的输入一样,都是一连串复杂的气压变化。这些气压变化显然源自说话人,是由空气通过声门并从口腔或鼻腔流出的具体方式造成的。我们通过绘制气压随时间的变化来表示声波。理解这类图形时,有一个比喻有时很有帮助:想象一块阻挡气压波的竖直板(可能是说话人口前的麦克风,或听者耳中的鼓膜)。图形测量的是这块板处空气分子的压缩或稀疏(减压)程度。图 15.11 展示了取自 Switchboard 电话语音语料库的一小段波形,是某人说 “she just had a baby” 时元音 [iy] 的波形。

图 15.11 话语中元音 [iy] 的波形;该话语稍后在第 342 页的图 15.15 中再次出现。Y 轴表示高于和低于正常大气压的气压水平,X 轴表示时间。注意波形会有规律地重复。

将图 15.11 这样的声波数字化,第一步是把模拟表示(先是气压,再是麦克风中的模拟电信号)转换为数字信号。模数转换分为两步:采样和量化。对信号采样,就是在特定时间测量其振幅;采样率是每秒采集的样本数。为了准确测量一个波,每个周期至少需要两个样本:一个测量波的正向部分,一个测量负向部分。每周期多于两个样本会提高振幅精度,但少于两个样本会完全漏掉该波的频率。因此,能够测量的最大频率波,其频率是采样率的一半(因为每个周期需要两个样本)。给定采样率时,这个最大频率称为奈奎斯特频率。人类语音的大多数信息处在 10,000 Hz 以下,因此要完全准确地记录语音,需要 20,000 Hz 的采样率。但电话语音会经过交换网络滤波,电话只传输低于 4,000 Hz 的频率。因此,对于 Switchboard 语料库这样的电话带宽语音,8,000 Hz 的采样率已经足够;麦克风语音通常使用 16,000 Hz 采样。

即便是 8,000 Hz 的采样率,每秒语音也需要存储 8,000 个振幅测量值,因此高效存储振幅测量值很重要。它们通常存储为整数,可以是 8 位(取值 -128–127)或 16 位(取值 -32768–32767)。将实数表示为整数的过程称为量化,因为两个整数之间的差异构成最小粒度(量子大小),所有彼此差异小于该量子大小的值都用同一个值表示。

数据量化后会以各种格式保存。这些格式的一个参数是前面讨论过的采样率和样本大小:电话语音通常以 8 kHz 采样并以 8 位样本保存,麦克风数据通常以 16 kHz 采样并以 16 位样本保存。另一个参数是通道数。对于立体声数据或双方对话,可以把两个通道存储在同一个文件中,也可以存储在不同文件中。最后一个参数是单个样本的存储方式——线性存储或压缩存储。电话语音常用的一种压缩格式是 μ\mu-law(通常写作 u-law,但仍读作 \mu-law)。μ\mu-law 这类对数压缩算法的直觉是:人耳对小强度比对大强度更敏感;对数表示会更忠实地表示小值,但代价是大值的误差更大。线性(未取对数)值通常称为线性 PCM 值(PCM 是脉冲编码调制的缩写,此处不展开)。把线性 PCM 样本值 xx 压缩为 8 位 μ\mu-law 的公式如下(8 位时 μ=255\mu=255):

F(x)=sgn(x)log(1+μx)log(1+μ)1x1(15.5)F (x) = \frac {\operatorname{sgn} (x) \log (1 + \mu | x |)}{\log (1 + \mu)} - 1 \leq x \leq 1\tag{15.5}

存储所得数字化波形文件有许多标准格式,例如 Microsoft 的 .wav 和 Apple 的 AIFF;这些格式都带有专门的文件头,也可以使用不带文件头的简单“raw”文件。例如,.wav 格式是 Microsoft 多媒体文件格式 RIFF 的子集;RIFF 是一种通用格式,可以表示一系列嵌套的数据块以及控制信息。图 15.12 展示了一个包含单个数据块及其格式块的简单 .wav 文件。

图 15.12 Microsoft 波形文件头格式,假设文件很简单且只包含一个数据块。这 44 字节的文件头之后就是数据块。

15.4.3 频率与振幅;音高与响度

像所有波一样,声波也可以用频率、振幅以及前面介绍纯正弦波时讨论的其他特征来描述。但在声波中,这些量不像正弦波中那样容易测量。先考虑频率。注意图 15.11 中的波虽然不完全是正弦波,却是周期性的:在图中捕捉到的 38.75 毫秒(0.03875 秒)内重复了 10 次。因此,这一段波的频率是 10/0.0387510/0.03875,即 258 Hz。

这个周期为 258 Hz 的波从何而来?它来自声带的振动速度;由于图 15.11 中的波形来自元音 [iy],它是浊音。回忆一下,浊音由声带有规律地打开和闭合产生。当声带打开时,空气从肺部向上推动,形成高压区域;当声带闭合时,肺部不会提供气压。因此,声带振动时,我们会看到类似图 15.11 中的规律性振幅峰值,每个主要峰值都对应声带的一次打开。声带振动的频率,也就是复杂波的频率,称为波形的基频,通常缩写为 F0。我们可以在音高轨迹中绘制 F0 随时间的变化。图 15.13 展示了短问句 “Three o’clock?” 的音高轨迹,位于波形下方。注意问句末尾 F0 的上升。

图 15.13 问句 “Three o’clock?” 的音高轨迹,显示在波形文件下方。注意句末 F0 的上升,以及非常安静部分(“o’clock” 中的 “o’”)缺少音高轨迹;自动音高跟踪基于统计浊音区域中的脉冲,如果没有浊音(或声音不足)就无法工作。

图 15.11 的纵轴测量气压变化量;压力是单位面积上的力,以帕斯卡(Pa)为单位。纵轴的高值(高振幅)表示该时刻的气压较高;零值表示正常(大气)气压;负值表示气压低于正常水平(稀疏)。

除了任意时刻的振幅值,我们通常还需要知道某个时间范围内的平均振幅,以大致了解气压的平均位移有多大。但不能简单地对一个范围内的振幅值求平均:正值和负值会(大部分)相互抵消,留下一个接近零的数。因此,我们通常使用 RMS(均方根)振幅:先把每个数平方再求平均(使其为正),最后再开平方。

 RMS amplitude i=1N=1Ni=1Nxi2(15.6)\text { RMS amplitude } _ {i = 1} ^ {N} = \sqrt {\frac {1}{N} \sum_ {i = 1} ^ {N} x _ {i} ^ {2}}\tag{15.6}

信号的功率与振幅的平方有关。如果声音的样本数为 NN,功率为

 Power =1Ni=1Nxi2(15.7)\text { Power } = \frac {1}{N} \sum_ {i = 1} ^ {N} x _ {i} ^ {2}\tag{15.7}

我们更常谈论声音的强度,而不是功率。强度把功率相对于人类听觉阈值进行归一化,并以 dB 为单位。如果 P0P_0 是听觉阈值压力(即 2×105Pa2 \times 10^{-5}\mathrm{Pa}),则强度定义为:

 Intensity =10log101NP0i=1Nxi2(15.8)\text { Intensity } = 1 0 \log_ {1 0} \frac {1}{N P _ {0}} \sum_ {i = 1} ^ {N} x _ {i} ^ {2}\tag{15.8}

图 15.14 展示了 CallHome 语料库中句子 “Is it a long movie?” 的强度图,同样显示在波形图下方。

图 15.14 句子 “Is it a long movie?” 的强度图。注意每个元音处都有强度峰值,long 一词的峰值尤其高。

两个重要的感知属性——音高和响度——与频率和强度有关。声音的音高是基频在心理上的感觉或感知对应物;通常,声音基频越高,我们感知到的音高就越高。之所以说“通常”,是因为这种关系不是线性的,人耳对不同频率的敏锐度不同。粗略地说,人类在 100 Hz 到 1000 Hz 之间的音高感知最准确,在这一区间内音高与频率呈线性相关。人耳对高于 1000 Hz 的频率表示得不那么准确,在这一范围以上,音高与频率呈对数相关。对数表示意味着高频率之间的差异被压缩,因此感知得不那么准确。音高感知标度有多种心理声学模型,其中一种常见模型是 mel 标度(Stevens et al., 1937;Stevens and Volkmann, 1940)。mel 是一种音高单位,其定义使得感知上音高等距的声音对之间相差相同数量的 mel。mel 频率 mm 可由原始声学频率计算:

m=1127ln(1+f700)(15.9)m = 1 1 2 7 \ln (1 + \frac {f}{7 0 0})\tag{15.9}

第 16 章将看到,mel 标度在语音识别中发挥重要作用。

声音的响度是功率的感知对应物。因此,振幅更高的声音被感知为更响,但这种关系同样不是线性的。首先,正如前面定义 μ\mu-law 压缩时提到的,人类在低功率范围内具有更高的分辨率;耳朵对小功率差异更敏感。其次,功率、频率和感知响度之间存在复杂关系;某些频率范围内的声音会被感知为比其他频率范围内的声音更响。

有多种算法可以自动提取 F0。严格说来,把它们称为音高提取算法是对术语的略微滥用。例如,自相关音高提取方法将信号与其在不同偏移量处的自身进行相关计算;产生最高相关性的偏移量给出信号的周期。现在有许多公开的音高提取工具包;例如,Praat(Boersma and Weenink, 2005)提供了增强型自相关音高跟踪器。

15.4.4 从波形解释音段

通过目视检查波形,可以获得大量信息。例如,元音很容易识别。回忆一下,元音是浊音;元音的另一个性质是通常持续时间较长且相对响亮(如图 15.14 的强度图所示)。时间长度直接体现在 X 轴上,响度与 Y 轴上的振幅(的平方)有关。上一节看到,浊音通过图 15.11 中那样的规律性振幅峰值实现,每个主要峰值对应声带的一次打开。图 15.15 展示了短句 “she just had a baby” 的波形,并标出了词和音段。注意,图 15.15 中的六个元音 [iy]、[ax]、[ae]、[ax]、[ey]、[iy] 都有表示浊音的规律振幅峰值。

图 15.15 Switchboard 语料库中句子 “She just had a baby” 的波形(会话 4325)。说话人是女性,1991 年时 20 岁,录音大约就在那时完成;她说的是美式英语南米德兰方言。

塞音由闭塞和释放组成,通常可以看到一段无声或近乎无声的时期,之后出现轻微的振幅爆破。图 15.15 中 baby 的两个 [b] 都有这种现象。

波形中另一个通常相当容易识别的音段是摩擦音。回忆一下,摩擦音,尤其是 [sh] 这样非常强的摩擦音,是由狭窄的气流通道造成的嘈杂湍流产生的。由此产生的嘶嘶声具有嘈杂、不规则的波形。在图 15.15 中可以隐约看到这种现象;图 15.16 更清楚,其中只放大了第一个词 she。

图 15.16 从图 15.15 波形文件中截取的第一个词 “she” 的细节图。注意摩擦音 [sh] 的随机噪声与元音 [iy] 的规律浊音之间的差异。

15.4.5 频谱与频域

虽然一些宽泛的语音特征(例如能量、音高,以及是否存在浊音、塞音闭塞或摩擦音)可以直接从波形中解释,但语音识别等大多数计算应用(以及人类听觉处理)使用的是另一种表示方式:用组成声音的频率表示声音。傅里叶分析的洞见是,任意复杂波都可以表示为许多不同频率正弦波的和。考虑图 15.17 中的波形。这个波形是在 Praat 中把两个正弦波相加得到的,一个频率为 10 Hz,另一个频率为 100 Hz。

图 15.17 两个正弦波之和的波形。一个频率为 10 Hz(注意半秒窗口内重复五次),另一个频率为 100 Hz;两者振幅均为 1。

我们可以用频谱表示这两个组成频率。信号的频谱表示其每个频率成分及其振幅。图 15.18 展示了图 15.17 的频谱。X 轴是 Hz 频率,Y 轴是振幅。注意图中有两个尖峰,一个在 10 Hz,另一个在 100 Hz。因此,频谱是原始波形的一种替代表示;我们使用频谱作为工具,研究某个时间点声波的组成频率。

现在看看语音波形的频率成分。图 15.19 展示了图 15.15 所示句子中单词 had 的元音 [ae] 的一部分波形。

注意图中有一个重复约十次的复杂波;但还存在一个更小的重复波,它在每个较大模式中重复四次(注意每个重复波内部的四个小峰)。复杂波的频率约为 234 Hz(因为它在 0.0427 秒内大约重复 10 次,而 10 个周期 / 0.0427 秒 = 234 Hz)。

图 15.18 图 15.17 波形的频谱。

图 15.19 从图 15.15 波形中截取的单词 had 的元音 [ae] 部分波形。

因此,较小波的频率约为较大波频率的四倍,即约 936 Hz。再仔细观察,可以看到许多 936 Hz 波的峰值上还有两个小波。这个最小波的频率大约是 936 Hz 波的两倍,即 1872 Hz。

图 15.20 展示了使用离散傅里叶变换(DFT)计算出的图 15.19 波形的平滑频谱。

图 15.20 图 15.15 中 “She just had a baby” 波形的单词 had 元音 [ae] 的频谱。

频谱的 X 轴显示频率,Y 轴显示各频率成分幅度的某种度量(单位为分贝 dB,即前面见过的振幅的对数度量)。因此,图 15.20 在约 930 Hz、1860 Hz 和 3020 Hz 处显示了重要的频率成分,同时还有许多幅度更低的频率成分。前两个成分正是我们通过观察图 15.19 的波形、在时域中注意到的成分。

频谱为什么有用?事实证明,在频谱中容易看到的这些谱峰是不同音段的特征;音段具有各自特征性的频谱“指纹”。正如化学元素燃烧时会发出不同波长的光,我们可以通过观察光谱探测恒星中的元素;同样,也可以通过观察波形的频谱,检测不同音段的特征指纹。这种频谱信息对人类和机器语音识别都至关重要。在人类听觉中,耳蜗或内耳的功能就是计算输入波形的频谱。同样,语音识别使用的声学特征也是频谱表示。

下面看看不同元音的频谱。由于有些元音会随时间变化,我们使用一种称为声谱图的不同图形。频谱显示波在某个时间点的频率成分,声谱图则用于观察构成波形的不同频率如何随时间变化。X 轴仍然表示时间,但 Y 轴现在表示赫兹频率。声谱图上某一点的深浅对应频率成分的振幅:颜色很深表示振幅高,颜色较浅表示振幅低。因此,声谱图是可视化三个维度(时间 × 频率 × 振幅)的有用方式。

图 15.21 展示了三个美式英语元音 [ih]、[ae] 和 [uh] 的声谱图。注意每个元音在不同频带都有一组深色条带,而且不同元音的条带略有不同。每条带表示的都是与图 15.19 中看到的相同类型的谱峰。

图 15.21 三个美式英语元音 [ih]、[ae] 和 [uh] 的声谱图。

每条深色条带(或谱峰)称为共振峰。如下文所述,共振峰是声道特别放大的频带。由于不同元音的发音声道位置不同,它们会产生不同类型的放大或共鸣。考虑前两个共振峰 F1 和 F2。注意,最靠近底部的深色条带 F1 在三个元音中的位置不同:[ih] 的 F1 较低(中心约为 470 Hz),而 [ae] 和 [uh] 的 F1 稍高(约为 800 Hz)。相比之下,从底部数第二条深色带 F2 在 [ih] 中最高,在 [ae] 中居中,在 [uh] 中最低。

在连续语音中也可以看到相同的共振峰,尽管元音弱化和协同发音过程会使它们稍难辨认。图 15.22 展示了 “she just had a baby” 的声谱图,其波形见图 15.15。在 just 的 [ax]、had 的 [ae] 和 baby 的 [ey] 中,F1 和 F2(以及 F3)都很清楚。

频谱表示能为音段识别提供哪些具体线索?首先,由于不同元音的共振峰位于不同的特征位置,频谱可以区分元音。我们已经看到,样例波形中的 [ae] 在 930 Hz、1860 Hz 和 3020 Hz 处有共振峰。考虑图 15.15 话语开头的元音 [iy],其频谱见图 15.23。[iy] 的第一个共振峰为 540 Hz,远低于 [ae] 的第一个共振峰;其第二个共振峰为 2581 Hz,远高于 [ae] 的第二个共振峰。仔细观察,可以在图 15.22 中约 0.5 秒的位置看到这些共振峰对应的深色条带。

图 15.22 句子 “she just had a baby” 的声谱图,其波形见图 15.15。可以把声谱图看作一组首尾相接的频谱(时间切片),类似于图 15.20。

图 15.23 “She just had a baby” 开头元音 [iy] 的平滑(LPC)频谱。注意第一个共振峰(540 Hz)远低于图 15.20 中 [ae] 的第一个共振峰,而第二个共振峰(2581 Hz)远高于 [ae] 的第二个共振峰。

前两个共振峰(称为 F1 和 F2)的位置在决定元音身份方面发挥很大作用,尽管不同说话人的共振峰仍会不同。较高的共振峰更多由说话人声道的一般特征引起,而不是由具体元音引起。共振峰还可以用于识别鼻音 [n]、[m]、[ng] 以及流音 [l] 和 [r]。

15.4.6 声源—滤波器模型

为什么不同元音具有不同的频谱指纹?如前面简要提到的,共振峰由口腔的共鸣腔造成。声源—滤波器模型通过对声门产生的脉冲(声源)如何受到声道(滤波器)塑形进行建模,来解释声音的声学性质。

看看它是如何工作的。每当我们有一个波,例如声门脉冲在空气中造成的振动,这个波也会有谐波。谐波是另一种波,其频率是基波频率的倍数。例如,115 Hz 的声带振动会产生 230 Hz、345 Hz、460 Hz 等谐波(其他波)。通常,这些波中的每个波都更弱,即振幅远小于基频处的波。

然而,事实证明声道起着某种滤波器或放大器的作用;任何腔体(例如管道)都会放大某些频率的波,并削弱另一些频率的波。这种放大过程由腔体的形状造成;给定形状会使某一频率的声音产生共鸣,从而被放大。因此,改变腔体形状,就可以使不同频率得到放大。

发出特定元音时,本质上是在把舌头和其他发音器官放置于特定位置,从而改变声道腔体的形状。结果是,不同元音会导致不同谐波被放大。因此,同一基频的波通过不同声道位置后,会得到不同的谐波放大结果。

观察声道形状与相应频谱之间的关系,就能看到这种放大的结果。图 15.24 展示了三个元音的声道位置及一个典型的所得频谱。共振峰就是声道恰好放大特定谐波频率的频谱位置。

图 15.24 将声道位置可视化为滤波器:三个英语元音的舌头位置,以及显示 F1 和 F2 的所得平滑频谱。