信号与系统- MATLAB 综合实验之语音处理 1
谷源涛 应启珩 郑君里
二〇一一年七月一日
1摘录于草稿,可能和纸质出版物不完全相同。本版本已经更正了勘误表指出的错误。
目录
第一章 语音合成
第一节 背景知识 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.1 发声机理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.2 语音信号的时域特征 . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.3 语音模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1.4 分析和合成语音 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
第二节 练习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.1 语音预测模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.2 语音合成模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.3 变速不变调 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.4 变调不变速 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2.5 逆向工程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1
1
2
3
5
6
6
9
10
10
10
I
第一章 语音合成
本章中将基于数字滤波器和 z 变换等基础知识,应用第一篇讲授的 MATLAB 编程技
术,在语音分析合成领域做一些练习。通过本章的练习,可以增进对 z 变换和滤波器的理
解,熟练运用 MATLAB 基本指令。本章包括两部分,第一部分介绍语音生成和分析的基
本知识,第二部分给出详细的练习内容和编程步骤。相信读者对此会产生强烈兴趣。
第一节 背景知识
1.1.1 发声机理
从物理原理来看,语音信号是由肺挤压出的空气激励发声器官振动产生的。发声器官
包括喉、 声道和嘴。 喉位于气管的上端,实际上是由气管末端的一圈软骨构成的一个框
架。喉中有两片肌肉,它们和周围的韧带称为声带。声带张开时空气可以自由地流过喉和
气管,如正常呼吸时;声带闭合,将喉封住,所以吃东西时食物不会落入气管。两片声带
之间的空隙称为声门。说话时声带相互靠拢但不完全封闭,这样声门变成一条窄缝,当气
流通过时其间压力减小,从而声带完全合拢使气流不能通过;在气流被阻断时压力恢复正
常,因而声带间形成空隙,气流再次通过。这一过程周而复始,就形成了一串周期性的脉
冲气流送入声道。 如图 1.1 所示。 这个脉冲串的周期称为“基音周期”,其倒数是“基音频
率”。男性说话的基音频率在 60-200 Hz 范围内,女性和小孩在 200-450 Hz 之间。以上
这种方式发出的音就是浊音。
图 1.1: 典型的声门脉冲串波形
气流从喉向上经过口腔或者鼻腔后向外辐射,经过的传输通道称为声道。气流流过声
道犹如通过一个具有某种谐振特性的腔体。如图 1.2 所示。输出气流的频率特性既取决于
1
第一节 背景知识
第一章 语音合成
声门脉冲串的特性,又取决于声道特性。 声道包括口腔和鼻腔两部分,对成年男性而言,
口腔段约 17cm ,鼻腔段约 13cm ,气流在软腭的控制下分别流向这两个通道。 所以声道
的截面积是变化的,而声道的频率特性主要取决于声道截面的最小值(收紧点)出现的位
置,除了软腭控制一些外,收紧点主要由舌头的位置来决定。
图 1.2: 声管构造示意图
图 1.3: 级联无损声管模型
语音的另一种产生方式是声门完全闭合,此时声道不是受声门周期脉冲气流的激励,
而是利用口腔内存有的空气释放出来而发声。该气流在口腔中形成湍流,因而表现为随机
噪声。这种方式发出的音就是清音。(男生如果把手放在脖子前面喉结上部的倒三角位置,
发浊音“啊”的音时可以感觉到声管的震动,发清音“是” 的音时就感觉不到。)
1.1.2 语音信号的时域特征
一段女声发音“MATLAB”的波形如图 1.4 所示,可以看出语音能量的起伏从而大致分
辨出话语中的每个音节在此波形中的位置。我们把时间轴拉宽后在图 1.5 中观察两个细节
部分,可以看出语音的浊音段能量较大(右上图),有明显的周期特征,而清音段能量很
小(右下图),类似于噪声随机变化。
图 1.4: 女声发音“MATLAB”
图 1.5: 女声发音“MATLAB”细节
2
0.10.20.30.40.5−3−2−10123t(seconds)0.1550.160.1650.170.1750.18−2020.270.280.290.30.31−202t(seconds)
第一节 背景知识
1.1.3 语音模型
语音生成模型
第一章 语音合成
通过对声管的研究,发现它可以用若干段截面积不等的均匀管道级联起来描述,如图
1.3 ,一般称作级联无损声管模型。 采用流体力学的方法可以证明每一截均匀管道能够用
一个单极点模型来近似,这样 N 段管道组成的声管就可以用一个 N 阶全极点滤波器表述,
即
∏
V (z) =
G
k=1(1 pkz1)
N
1 ∑
=
G
k=1 akzk
N
对于典型的男声, N = 10 ,所有的极点 pi 要分别构成共轭对以保证 faig 系数都是实数。
再综合考虑清音信号,就可以得到语音信号产生的离散语音模型,如图 1.6 所示。
(1.1)
图 1.6: 产生语音信号的离散时域模型
准确的清浊音判决远远超出了本书的范畴,因而我们将对上述模型进行充分简化。首
先去掉随机信号激励部分,我们认为激励信号是一个脉冲序列,不考虑有无周期。其次去
掉声门脉冲模型和口唇的辐射模型,从而得到图 1.7 所示最简单的语音模型,现在我们用
z 变换的知识就可以应对了。
图 1.7: 简化的语音生成模型
假设激励信号用 e(n) 表示,语音信号用 s(n) 表示,根据全极点模型表达式,有
N∑
s(n) =
k=1
aks(n k) + Ge(n)
(1.2)
从而我们可以用声管模型对激励信号进行滤波得到语音信号。
3
G(z)V(z)R(z)Vz
第一节 背景知识
语音预测模型
第一章 语音合成
我们可以采集到语音信号 s(n) ,也已经知道了它的生成模型如图 1.7 所示,但不知道
激励 e(n) 和模型 V (z) 中的 faig 系数。根据原著第七章 7.7 节,我们知道这是一个解卷积
问题,而且它是更复杂的盲解卷,因为激励和滤波器系数两者都不知道。如果进一步做些
合理的假设,这个问题还是可以解决的,比如约束 e(n) 是一个周期脉冲序列和一个高斯
白噪声序列之和,我们就可以用一些信号处理方法,如自相关法和自协方差法求出系数
faig 来,并且有 Durbin 递推算法和 Schur 递推算法等快速方法。
假设我们已经知道了系数 faig ,那么将图 1.7 的输入和输出对换,就构成了语音的预
测模型,即语音信号 s(n) 送入预测滤波器,得到预测残差 e(n) ,
e(n) = s(n) N∑
aks(n k)
k=1
这种预测模型在通信中用来增加每个信道上传输语音信号的通道数。假设信号的发端
和收端都知道预测系数 faig ,那么发端只需要把残差 e(n) 传到收端即可,因为收端可以
用 e(n) 作为上述差分方程的激励得到重建语音。 在发端,语音 s(n) 是滤波器的输入,而
误差 e(n) 是输出。 事实上, faig 系数当然也需要从发端传到收端,但因为语音具有短时
平稳性,即在短时间内(比如 10 毫秒), faig 系数可以认为不发生变化,所以也不必太频
繁的传输,因而采用预测技术后,总是可以大幅度地降低语音的带宽。这种通过线性预测
方法压缩语音数据量的技术叫做线性预测编码( Linear Prediction Coding, LPC )技术。
语音重建模型
如果已知激励信号 x(n) (先不考虑是如何得到的)和滤波器系数 faig ,我们就可以
利用语音生成模型重建语音了,
N∑
ˆs(n) = x(n) +
k=1
akˆs(n k)
但我们把上述模型称作语音重建模型,为了同生成模型区分开, ˆs(n) 称为重建语音。 如
果 x(n) 正好等于 e(n) ,那么重建语音就和原始语音 s(n) 完全相同。
语音的非平稳性(虽然短时平稳)导致预测系数 faig 是时变的,一般每 10 - 20 毫秒
就会发生一些变化以产生不同的音节。在这种情况下,滤波过程也要分段进行,即每次用
不同的滤波器系数,但相邻两次滤波必须要保持滤波器的状态不发生变化。
谐振和共振峰频率
轭极点 j pi j e
语音生成模型的每一对共轭极点都对应一个衰减的正弦信号的特征响应。例如一对共
jΩ 在时域冲激响应中的贡献是 A j pi jn cos(Ωn + φ) 。其中极点幅度决定衰
减速度,幅角决定振荡频率。
对语音合成,用数字的正弦信号表示抽样后的连续正弦信号。在这种情况下,模拟频
率和数字频率的关系是 Ω = ωT ,其中 T 表示抽样间隔, ω 表示模拟频率(弧度),对应的
4
第一节 背景知识
第一章 语音合成
f = ω/2π 称作共振峰频率,它定义了声管的谐振频率。 典型的男声( N = 10 )可以用
5 个共振峰频率来描述。当模型参数变化时,共振峰频率也随着变化,从而产生不同的声
调。
1.1.4 分析和合成语音
我们的分析和合成系统如图 1.8 所示。
图 1.8: 分析和合成语音的系统框图
首先要分析一段(一般是 10 毫秒)语音得到它的最佳 faig 系数。 给定这些系数后,
我们就可以用适当的输入来合成语音。对于浊音信号,一种可取的激励模型就是以特定频
率重复的单位样值序列,这个频率就是基音频率。对清音,最好选择随机噪声或白噪声作
为输入。 但在不做清浊音判决的情况下,全部采用周期激励的合成质量也是可以接受的
(我们就是这么做的)。
分析过程是:先将语音采样信号以 10 毫秒进行分段,然后对得到的每段数据进行统
计分析并计算相邻样点的相关性,最终求得最佳预测系数。合成过程就是利用这些预测系
数,以及周期的单位样值序列作为输入,依次得到每段合成语音。
变速不变调
变速不变调技术广泛应用于消费类电子产品,如英语复读机等。所谓变速不变调,是
指声音播放时,速度的改变不会导致音调的变化。 一般来说,用随身听听音乐,快进播
放和慢速播放,其音调是不一致的,如快进播放,频率会变高,男声听起来会感觉是女
声。(原因是什么?想一想 Ω = ωT ,如果 Ω 不变 T 却减小了,则 ω 会怎样?)为了实现
变速不变调,首先需要将表示“调”的内容从语音中分离出来,由前述语音预测模型,表
示“调”的有两个部分,一是共振峰频率,即预测模型的参数;二是基音周期,即激励信号
的参数。下面的工作就是在不改变这两种参数的前提下改变数据长度的问题了。即将对应
于 10 毫秒的 80 个样点的激励变成对应于 20 毫秒的 160 个样点(注意保持单位样值的周
期不变),在这 20 毫秒内保持预测模型系数不变,不就可以合成出 20 毫秒的合成语音了
么?新语音的声调和原有语音是完全相同的,只不过时间变长了而已。
变调不变速
前面说过,最简单的男声变女声只要让随身听快进播放就可以了。但快进播放改变的
不仅是声调,语速也会发生很大变化,快得让人听不清楚。为了解决这个问题,就需要用
5
V(z)^`iaenxn
第二节 练习题
第一章 语音合成
变调不变速的技术。同上分析过程一样,还是需要在共振峰频率和基音周期上做改变。女
声和男声的最大区别是频率高,一方面表现在基音频率高,另一方面共振峰对应的谐振频
率也更高一些,所以我们可以考虑将激励信号的频率增加(注意不改变信号长度),同时
将共振峰频率也相应增大一些(即极点的幅角绝对值增大,或者说上半平面的极点逆时针
旋转,下半平面的顺时针旋转,但注意两者都要旋转同样角度而且不要转过负实轴)。 这
样得到的合成语音会更“女声”一些。
后两项技术是典型的语音信号数字处理技术。 它们的基础是 z 变换和线性预测模型,
用传统的模拟信号处理方法不可能实现,这正体现了数字信号处理的优点。 最后还需指
出,这两项技术并不矛盾,事实上,它们可以完美地结合在一起,你能做出一种速度和音
调都发生变化的合成语音算法来么?
第二节 练习题
1.2.1 语音预测模型
(1)给定
e(n) = s(n) a1s(n 1) a2s(n 2)
假设 e(n) 是输入信号,s(n) 是输出信号,上述滤波器的传递函数是什么?如果 a1 = 1.3789
, a2 = 0.9506 ,上述合成模型的共振峰频率是多少?用 zplane , freqz , impz 分别绘
出零极点图,频率响应和单位样值响应。用 filter 绘出单位样值响应,比较和 impz 的是否
相同。
(2)阅读 speechproc.m 程序,理解基本流程。 程序中已经完成了语音分帧、 加窗、
线性预测、和基音周期提取等功能。注意:不要求掌握线性预测和基音周期提取的算法原
理。
function speechproc()
% 定义常数
FL = 80;
WL = 240;
P = 10;
s = readspeech(’voice.pcm’,100000);
L = length(s);
FN = floor(L/FL)-2;
% 预测和重建滤波器
exc = zeros(L,1);
% 帧长
% 窗长
% 预测系数个数
% 载入语音s
% 读入语音长度
% 计算帧数
% 激励信号(预测误差)
6