在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → 语音处理matlab大作业(谷源涛)

语音处理matlab大作业(谷源涛)

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:0.52M
  • 下载次数:9
  • 浏览次数:88
  • 发布时间:2021-03-14
  • 实例类别:一般编程问题
  • 发 布 人:好学IT男
  • 文件格式:.pdf
  • 所需积分:2
 

实例介绍

【实例简介】
语音处理大作业,利用matlab处理,还有简单的MFC制作
第一章语音合成 本章中将基于数字滤波器和z变换等基础知识,应用第一篇讲授的 MATLAB编程技 术,在语音分析合成领域做一些练习。通过本章的练习,可以增进对z变换和滤波器的理 解,熟练运用 MATLAB基本指令。本章包括两部分,第一部分介绍语音生成和分析的基 本知识,第二部分给出详细的练习内容和编程步骤。相信读者对此会产生强烈兴趣。 第一节背景知识 1.1.1发声机理 从物理原理来看,语音信号是由肺挤压出的空气激励发声器官振动产生的。发声器官 包括喉、声道和嘴。喉位于气管的上端,实际上是由气管末端的一圈软骨构成的一个框 架。喉中有两片肌肉,它们和周围的韧带称为声带。声带张开时空气可以白由地流过喉和 气管,如正常呼吸时;声带闭合,将喉封住,所以吃东西时食物不会落入气管。两片声带 之间的空隙称为声门。说话时声带相互靠拢但不完全封闭,这样声门变成一条窄缝,当气 流通过时其间压力减小,从而声带完全合拢使气流不能通过;在气流被阻断时压力恢复止 常,因而声带间形成空隙,气流次通过。这一过程周而复始,就形成了一串周期性的脉 冲气流送入声道。如图1.1所示。这个脉冲串的周期称为“基音周期”,其倒数是“基音频 率”。男性说话的基音频率在60-200Hz范围内,女性和小孩在200-450Hz之间。以上 这种方式发出的音就是浊音。 基音周其 图1.1:典型的声门脉冲串波形 气流从喉向上经过口腔或者鼻腔后向外辐射,经过的传输通道称为声道。气流流过声 道犹如通过一个具有某种谐振特性的腔体。如图1.2所示。输出气流的频率特性既取决于 第一节背景知识 第一章语音合成 声门脉冲串的特性,又取决于声道特性。声道包括口腔和鼻腔两部分,对成年男性而言, 口腔段约1τcm,鼻腔段约13cm,气流在软腭的控制下分别流向这两个通道。所以声道 的截面积是变化的,而声道的频率特性主要取决于声道截面的最小值(收紧点)出现的位 置,除」软腭控制一些外,收紧点主要由髙头的位置来决定。 Lips 来自肺部 嘴唇 A|A+1 的完气流 声道 图1.2:声管构造小意图 图1.3:级联无损声管模型 语音的另一种产生方式是声门完全闭合,此时声道不是受声门周期脉冲气流的激励, 而是利用凵腔内存冇的空气释放岀来而发声。该气流在凵腔中形成湍流,因而表现为随机 噪声。这种方式发出的音就是清音。(男生如果把手放在脖子前面喉结上部的倒三角位置 发浊音“啊”的音吋可以感觉到声管的震动,发清音“是”的音吋就感觉不到。) 11.2语音信号的时域特征 一段女声发音 MATLAB”的波形如图1.4所示,可以看出语音能量的起伏从而大致分 辨岀话语中的每个音节在此波形中的位置。我们把时间轴拉宽后在图1.5中观察两个细节 部分,可以看出语音的浊音段能量较大(右上图),有明显的周期特征,而清音段能量很 小(右下图),类似于噪声随机变化。 mA//~ 图1.4:女声发音“ MATLAB” 图1.5:女声发音“ MATLAB”细节 第一节背景知识 第一章语音合成 1.1.3语音模型 语音生成模型 通过对声管的硏究,发现它可以用若干段截面积不等的均匀管道级联起来描述,如图 1.3,一般称作级联无损声管模型。采用流体力学的方法可以证眀每一截均匀管道能够用 一个单极点模型来近似,这样N段管道组成的声管就可以用一个N阶全极点滤波器表述, 即 V(a) 1 k 对于典型的男声,N=10,所有的极点n要分别构成共轭对以保证{a}系数都是实数 再综合考虑清音信号,就可以得到语音信号产生的离散语音模型,如图1.6所示。 基音频率 浊音 增益 周期脉冲 声门脉冲 发生器 模型G(z) 浊音/清音 声道模型 开关 V(2) →辐射模型语音信号 R(z 随机噪声 发生器 清 增益 图1.6:产生语音信号的离散时域模型 准确的清浊音判决远远超岀了本书的范畴,因而我们将对上述模型进行充分简化。首 先去掉随机信号激励部分,我们认为激励信号是一个脉冲序列,不考虑有无周期。其次去 掉声门脉冲模型和口唇的辐射模型,从而得到图1.7所示最简单的语音模型,现在我们用 z变换的知识就可以应对了。 脉冲序列 声道模语音信号 发生器 (z) 图1.7:简化的语音生成模型 假设激励信号川e(m)表示,语音信号用s(m)表示,根据全极点模型表达式,有 s(n)=2ars(n-k)+Ge(n) 从而我们可以用声管模型对激励信号进行滤波得到语音信号。 第一节背景知识 第一章语音合成 语音预测模型 我们可以采集到语音信号s(m),也已经知道∫它的生成模型如图1.7所示,但不知道 激励e(η)和模型(x)中的{ωn}系数。根据原著第七章77节,我们知道这是一个解卷积 问题,而且它是更复杂的盲解卷,因为激励和滤波器系数两者都不知道。如果进一步做些 合理的假设,这个问趣还是可以解决的,比如约束c(m)是一个周期脉冲序列和一个高斯 白噪声序列之和,我们就可以用一些信号处理方法,如自相关法和自协方差法求岀系数 {ωn}来,并且有Dηrbin递推算法和Schr递推算法等快速方法。 假设我们已经知道了系数{a,那么将图1.7的输入和输出对换,就构成了语音的预 测模型,即语音信号s(n)送入预测滤波器,得到预测残差e(m), (n)=s(m)-∑aks(m-k) =1 这种预测模型在通信中用来增加每个信道上传输语音信号的通道数。假设信号的发端 和收端都知道预测系数{α},那么发端只需要把残差e(n)传到收端即可,因为收端可以 用c(n)作为上述差分方程的激励得到重建语音。在发端,语音s(n)是滤波器的输入,而 误差e(η)是输出。事实上,{αa}系数当然也需要从发端传到收端,但因为语音具有短吋 平稳性,即在短时间内(比如10毫秒),{az}系数可以认为不发生变化,所以也不必太频 繁的传输,因而采用预测技术后,总是可以大幅度地降低语音的带宽。这种通过线性预测 方法压缩语音数据量的技术叫做线性预测编码( Linear Prediction Coding,LPC)技术。 语音重建模型 如果已知激励信号x(n)(先不考虑是如何得到的)和滤波器系数{a},我们就可以 利用语音生成模型重建语音了 s(m)=x(7) ahs(n-k) 但我们把上述模型称作语音重建模型,为了同生成模型区分开,3(m)称为重建语音。如 果r(m)正好等于e(m),那么重建语音就和原始语音s(an)完全相同 语音的非平稳性(虽然短时平稳)导致预测系数{ω}是时变的,一般每10-20毫秒 就会发生一些变化以产生不同的音节。在这种情况下,滤波过程也要分段进行,即每次用 不同的滤波器系数,但相邻两次滤波必须要保持滤波器的状态不发生变化 谐振和共振峰频率 语音生成模型的每一对共轭极点都对应一个衰减的止弦信号的特征响应。例如一对共 轭极点|pe在时域冲激响应中的贡献是A|pcos(2n+9)。其中极点幅度决定衰 减速度,幅角决定振荡频率。 对语音合成,用数字的正弦信号表示抽样后的连续正弦信号。在这种情况下,模拟频 率和数字频率的关系是Ω=ωT,其中冖表示抽样间隔,ω表示模拟频率(弧度),对应的 4 第一节背景知识 第一章语音合成 f=ω/2π称作共振峰频率,它定义了声管的谐振频率。典型的男声(N=10)可以用 5个共振峰频率来描述。当模型参数变化时,共振峰频率也随着变化,从而产生不同的声 1.1.4分析和合成语音 我们的分析和合成系统如图18所示 滤波器系数{}需要你做 的处哩 熄始 重建的 语音线性疯测[e(⑦)需要你做Lx(m)声道模型趣味语音 系统 的处理 (z) 图1.8:分析和合成语音的系统框图 首先要分析段(一般是10毫秒)语音得到它的最佳{a}系数。给定这些系数后, 我们就可以用适当的输入来合成语音。对于浊音信号,种可取的激励模型就是以特定频 率重复的单位样值序列,这个频率就是基音频率。对清音,最好选择随机噪声或白噪声作 为输入。但在不做清浊音判决的情况下,全部采用周期激励的合成质量也是可以接受的 (我们就是这么做的) 分析过程是:先将语音釆样信号以10毫杪进行分段,然后对得到的每段数据进行统 计分析并计算相邻样点的相关性,最终求得最佳预测系数。合成过程就是利用这些预测系 数,以及周期的单位样值序列作为输入,依次得到每段合成语音。 变速不变调 变速不变调技术广泛应用于消费类电子产品,如英语复读机等。所谓变速不变调,是 指声音播敚时,速度的改变不会导致音调的变化。一般来说,用随身听听音乐,快进播 放和慢速播放,其音调是不一致的,如快进播放,频率会变高,男声听起来会感觉是女 声。(原因是什么?想一想Ω=wT,如果Ω不变T却减小了,则会怎样?)为了实现 变速不变调,首先需要将表示“调”的内容从语音中分离出来,由前述语音预测模型,表 示“调的有两个部分,一是共振峰频率,即预测模型的参数;二是基音周期,即激励信号 的参数。下面的工作就是在不改变这两种参数的前提下改变数据长度的问题了。即将对应 于10毫秒的80个样点的激励变成对应于20毫秒的160个样点(注意保持单位样值的周 期不变),在这20毫秒内保持预测模型系数不变,不就可以合成出20毫秒的合成语音了 么?新语音的声调和原有语音是完全相同的,只不过时间变长了而已。 变调不变速 前亩说过,最简单的男声变女声以要让随身听快进播放就可以∫。但快进播放改变的 不仅是声调,语速也会发生很大变化,快得让人听不清楚。为」解决这个问题,就需要川 第二节练习题 第一章语音合成 变调不变速的技术。同上分析过程一样,还是需要在共振峰频率和基音周期上做改变。女 声和男声的最大区别是频率高,一方面表现在基音频率高,另一方面共振峰对应的谐振频 率也更高一些,所以我们可以考虑将激励信号的频率增加(注意不改变信号长度),同时 将共振峰频率也相应增大一些(即极点的幅角绝对值增大,或者说上半平面的极点逆时针 旋转,下半平面的顺时针旋转,但注意两者都要旋转同样角度而且不要转过负实轴)。这 样得到的合成语音会更“女声”一些。 后两项技术是典型的语音信号数字处理技术。它们的基础是z变换和线性预测模型 用传统的模拟信号处理方法不可能实现,这正体现了数字信号处理的优点。最后还需指 出,这两项技术并不矛盾,事实上,它们可以完美地结合在一起,你能做出一种速度和音 调都发生变化的合成语音算法来么? 第二节练习题 1.2.1语音预测模型 (1)给定 e()=s(m)-a15(n-1)-a28(-2) 假设e(m)是输入信号,s(n)是输出信号,上述滤波器的传递函数是什么?如果a1=1.3789 ,α2=-0.9506,上述合成模型的共振峰频率是多少?用 zplane,freq,im分别绘 出零极点图,频率响应和单位样值响应。用fter绘出单位样值响应,比较和impz的是香 相同。 (②)阅读 speechprocn程序,理解基本流程。程序中已经完成了语音分帧、加窗 线性预测、和基音周期提取等功能。注意:不要求掌握线性预测和基音周期提取的算沄原 理。 function speechproc() %定义常数 80 帧长 ML=240; 窗长 P=10 %预测系数个数 s= readspeech( voice. pcm, 100000) %载入语音s L,= length(s) %读入语音长度 FN =floor(L/FL)-2 %计算帧数 %预测和重建滤波器 exc zeros (L, 1) 激勋信号(预测误差 6 第二节练习题 第一章语音合成 zi_pre= zeros(P, 1) 预测滤波器的状态 s_rec =zeros(L, 1) %重建语音 zi rec zeros(P, 1) %合成滤波器 exc_syn zeros(L, 1) 合成的激励信号(脉冲串) s_syn= zeros (L, 1) 合成语音 %变调不变速滤波器 exc__syn_t zeros(L, 1) 合成的激励信号(脉冲串) s_syn_t zeros(L, 1) 合成语音 %变速不变调滤波器(假设速度减慢一倍) exc_syn_v= zeros(2*L, 1) %合成的激励信号(脉冲串) s_synv= zeros(2*L, 1) %合成语音 hw hamming(WL); %汉明窗 %依次处理每帧语音 for n= 3: FN %计算预测系数(不需要掌握) s( n*FL-WL+1: n*FL). *hw %汉明窗加权后的语音 %A是预测系数,E会被用来计算合成激励的能量 LA E] Ipc(s_W, P); %用线性预测法计算P个预测系数 if n==27 %(3)在此位置写程序,观察预测系统的零极点图 end s_f=s((n-1)*FL+1:n*FL); %本吹语音,下面就要对它做处理 %(4)在此位置写程序,用 filter函数和sf计算激励,注意保持滤波器状杰 %o exc((n-1)*FL+1: n*FL) 将你计算得到约激励写在这里 %(5)在此位置写程序,用 filter函数和exC重建语音,注意保持滤波器状态 %s rec((n-1)*FL+1: n*FL) 将你计算得到约重建语音写在这里 %注意下面只有在得到exc后才会计算正确 s Pitch exc(n*FL-222: n*FL) PT=findpitch(s_Pitch) %计算基音周期PT(不要求堂握) G= sqrt(E*PT) %计算合成激勋的能量G(不要求掌据) %(10)在此位置写程序,生成合成激励,并用激励和 filter函数产生合成语音 %o exc_syn((n-1)*FL+1: n*FL) 将你计算得到约合成激励写在这里 %s_syn((n-1)FL+1: n*FL) 将你计算得到约合成语音写在这里 %(11)不改变基音周期和预测系数,将合成激励的长度增加一倍,再作 为fi1ter %的输入得到新的合成语音,听一听是不是速度变慢了,而且音调没有变。 第二节练习题 第一章语音合成 % exc-syn_v((n-1)*FL+1:n*FLV)=将你计算得到的加长合成激励写在这里 。s_syn_v(n-1)*FLV+1:丑*FLV)=将你计算得到的加长合成语音写在这里 %(13)将基音周期减小一兰,共振峰频率増加150Hz,重新合成听听感受 % exc_syn_t((n-1)*FL+1:n*FL)=将你计算得到的变调合成激励写在这里 %ssyn_t((n-1)*FL+1:n*FL)=将你计算得到的变调合成语音写在这里 end %(6)在此位置写程序,听一听s,exc和srec有何区别,解释这种区别 %后面听语音的题目也都可以在这里写,不再做特别注明 %保存所有文仁 writespeech('exc. pcm', exc); writespeech(rec. pcm',s_rec); writespeech(,exc_syn. pcm',exc_syn) writespeech(syn.pcm',s_syn); writespeech(,exc_syn_t pcm,, exc_syn_t) writespeech('syn_t. pcm',s_syn_t); writespeech('exc-syn_v. pcm',exc_syn_v); writespeech('syn_v pcm,s_syn_v) return %从PCM文件读入语音 function s readspeech(filename, L) fid fopen(filename, r,) s fread(fid, L,,int16,) fclose(fid) return %把语音写入PCM文作 function writespeech(filename, s) fid= fopen(filename, w); fwrite(fid, s,,int16,) fclose(fid) return %计算一段语音的基音周期,不要求掌握 function Pt= findpitch(s) [B,A]= butter(5,700/4000); filter(b, A, s) R= Zeros(143,1); fork=1:143 R(k)=8(144:223))*s(144-k:223-k); 【实例截图】
【核心代码】

标签:

实例下载地址

语音处理matlab大作业(谷源涛)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警