基于语音信号的说话人识别

基于语音信号的说话人识别

摘 要

语音是人类相互交流和通信最方便快捷的手段。如何高效地实现语音传输存储或通过 语音实现人机交互,是语音信号处理领域中的重要研究课题。语音信号处理涉及数字信号处理、语音学、语言学、生理学、心理学、计算机科学以及模式识别、人工智能等诸多学科领域,是目前信息科学技术学科中发展最为迅速的一个领域。

关键字:语音识别、清音、浊音、短时平均能量、倒谱、短时平均过零率

目 录

第一章 绪论………………………………………………………………………………………1

    1.1语音识别技术的发展历史……………………………………………………

      1.2语音识别研究的现况与难点…………………………………………………………

第二章 方案比较…………………………………………………………………

第三章 软件介绍……………………………………………………………………

        3.1 Cool Edit Pro 2.1

       3.2  MATLAB 介绍

第四章 模块设计…………………………………………………………………………………

      4.1语音端点检测……………………………………………………………………

         4.1.1 原理

         4.1.2 源程序

      4.2短时能量

       4.2.1 用途

       4.2.3 问题

      4.2.3 解决方法

       4.2.4 程序

     4.3 短时平均过零率

        4.3.1 原理

       4.3.2 程序

4.4 短时平均过零率

4.5 倒谱

4.6主程序

     4.7 实验结果

第五章 设计中的问题

第六章 收获与体会…………………………………………………………….

第七章 参考文献………………………………………………………………

第八章 附录…………………………………………………………………

第一章  绪 论

1.1 语音识别技术的发展历史

语音识别技术的研究工作开始于20世纪的50年代,第一个可以用来识别10个英文数字的语音识别系统一Audry系统是在AT&Bell实验室研制成功的。20世纪60年代,计算机的应用推动了语音识别的发展。在这个阶段主要是提出了线性预测分析(LP)和动态规划(DP),主要解决了语音信号的产生模型问题。Bell实验室的S.Pruzanskay提出了基于模式匹配和概率统计来进行语音识别,这对语音识别的发展产生了深远的影响.

20 世纪70年代,语音识别技术得到了快速发展。具体表现在:理论上,线性预测分析得到进一步的发展,动态时间弯度(DTW)技术基本成熟,特别提出了矢量量化(VQ)和隐马尔可夫模型(HMM)理论。在实践上,实现了基于线性预测倒谱和DTW技术的特定人孤立词汇的识别系统。

20世纪80年代,语音识别技术得到了进一步发展。其中显著的特征是HMM模型和人工神经网络(ANN)在语音识别中得到应用。经过AT&Bell实验室Rabiner等科学家的共同研究,把原来HMM的纯数学模型工程化,从而得到推广。经过实验证明,采用HMM和ANN模型建立的语音识别系统,性能很好。进入 20 世纪90年代,随着多媒体时代的来临,迫切需要语音识别系统从实验室走向实用。许多发达国家如美国、日本、韩国及IBM. Apple. AT&T. NTT等著名的公司都为语音识别系统的研究投入大量的资金121而 AR M 技术发展就比较迟,ARM公司成立于1990年11月,全称为Advanced

RISC Machines Ltd,它是由英国的Acorn公司提供技术支持,美国苹果等公司出资合作的美英公司。ARM公司本身不直接从事芯片生产,也不销售芯片,靠转让设计许可,由合作伙伴生产出各种特色的芯片。

1.2 语音识别研究的现况与难点

经过近50年的发展,语音识别己经发展到一个较高的水平,并从实验室走向市场,进入了一个实用化阶段。由于 矢 量 量化,HMM和人工网络等技术被用于语音信号处理,并经过不断改革与完善,使语音信号处理技术产生突破性的发展。英语的连续数字语音识别的正确率已经达到了99%以上,而具有高度混淆的英语字母的识别也达到了97%以上。目前对语音识别的研究主要是一方面对语音学的统计模型的研究,对语音段的建模方法及HMM 与人工网络。另外一方面是为了语音识别的实用化的需要,讲者自适应,听觉模型,快速搜索识别算法以及进一步语音模型的研究。语音识别研究中也存在下面几个难题:

1、 语音识别的一种重要应用是自然语言的识别和理解。这一工作要解决的问题首先是因为连续语音中的因素、音节或单词之间的调音结合引起的音变,使基本模型的边界变的不明确.其次要建立一个理解语法和语义的规则的专家系统。

2、 语音信息变化很大。语音模型不仅对不同的讲话者是不同的,而且对于同一个讲话者也是不同的。例如,同一个说话者在随便说话和认真说话时的语音信息也不同;即使同一说话者用相同的方式说话时,其语音模式也受时间的影响,即今天及一个月后,同一个说话者说相同的话时候,语音信息也不相同。

3、 语音的模糊性。说话者在讲话时,不同的语音听起来很相似。这一点不仅仅在汉语中体现,在其他语言也有说体现。

4、 在强噪声的环境下语音识别困难。语音数据都是在接近理想的条件下采集而成的,然而当语音从实验室走向实际应用时,环境噪声所带来的问题就显得越来越重要了。

第二章 方案比较及选择

方案一,基于HMM的与文本有关的说话人识别

方案二

 

    选择方案二

第三章 软件介绍

3.1  Cool Edit Pro 2.1

CoolEdit PRO 2.1 (功能强大的多轨录音软件)非常出色的数字音乐编辑器和MP3制作软件。不少人把Cool Edit形容为音频“绘画”程序。你可以用声音来“绘”制:音调、歌曲的一部分、声音、弦乐、颤音、噪音或是调整静音。而且它还提供有多种特效为你的作品增色:放大、降低噪音、压缩、扩展、回声、失真、延迟等。你可以同时处理多个文件,轻松地在几个文件中进行剪切、粘贴、合并、重叠声音操作。使用它可以生成的声音有:噪音、低音、静音、电话信号等。该软件还包含有CD播放器。其他功能包括:支持可选的插件;崩溃恢复;支持多文件;自动静音检测和删除;自动节拍查找;录制等。另外,它还可以在AIF、AU、MP3、Raw PCM、SAM、VOC、VOX、WAV等文件格式之间进行转换,并且能够保存为RealAudio格式。

本次设计采用Cool Edit Pro 2.1作为音频采样及处理的工具,输出格式为.wav,分别采样了10人的声音样本,对采样的音频开始与结束不分添加部分静音信号,下图即为“开门”一词最终的采样波形:

         图3.1  Cool Edit Pro 2.1采样波形

                 3.2 MATLAB介绍

     

第四章 模块设计

4.1 预处理

语音信号的预处理模块一般包括预滤波、采样和量化、分帧、加窗、预加重、端点检测等。在不同的系统中对各子模块会有不同的要求,如在嵌入式语音识别系统中一般要求有防混叠滤波电路[5]、A/D转换电路和采样滤波电路等,而在计算机上实验时则可由音频采集卡完成,无需实验者亲自动手。

                     4.2 语音端点检测

4.2.1 原理

在语音处理中,常常涉及到语音的端点检测问题。例如在移动通信系统的语音终端中,常常要进行话音激活检测(VAD),判断当前是否有语音,若无语音输入时不编码,这样可以减少发射功率并节省信道资源。在语音识别时,特别是孤立词识别系统中,准确检测每个词的起点和终点对于模板匹配并提高识别率是相当重要的。

对要检测的语音进行分帧处理。若抽样频率为8kHz,即窗函数长度N=80。分别采用

Mn=∑|x(n)|w(n-m)和

Zn=∑{|sgn[x(n)-T]-sgn[x(n-1)-T]|+ |sgn[x(n)+T]-sgn[x(n-1)+]|}w(n-m)计算每帧语音的短时平均幅度和短时平均过门限率。由于语音一般都存在能量较高浊音段,因此考察语音的平均幅度轮廓可以设定一个较高的门限T1,使语音的起点和终点落在T1和Mn所确定的时间间隔AB之外。然后根据背景噪声的平均幅度确定一个门限较低的T2,并从A点往起点方向、从B点往终点方向搜索,分别找到与门限T2相交的两个点C、D。这样我们就用双门限完成了第一级粗判。第二级判决要利用短时平均过门限率。同样根据背景噪声的Zn可以设定一个较低的门限T3,从C和D分别向起点和终点方向搜索,可以找到与门限挺相交的两个点E、F。这样就确定出了语音的端点E、F。

               利用能量和过零的语音端点检测

4.2.2 源程序:

x1 = 0;

x2 = 0;

for n=1:length(zcr)

     goto = 0;

     switch status

     case {0,1}                   % 0 = 静音, 1 = 可能开始

       if amp(n) > amp1          % 确信进入语音段

          x1 = max(n-count-1,1);

          status  = 2;

          silence = 0;

          count   = count + 1;

         elseif amp(n) > amp2 | ... % 可能处于语音段

             zcr(n) > zcr2

             status = 1;

             count  = count + 1;

       else                       % 静音状态

         status  = 0;

         count   = 0;

      end

   case 2,                       % 2 = 语音段

      if amp(n) > amp2 | ...     % 保持在语音段

         zcr(n) > zcr2

         count = count + 1;

      else                       % 语音将结束

         silence = silence+1;

         if silence < maxsilence % 静音还不够长,尚未结束

            count  = count + 1;

         elseif count < minlen   % 语音长度太短,认为是噪声

            status  = 0;

            silence = 0;

            count   = 0;

         else                    % 语音结束

            status  = 3;

         end

      end

   case 3,

      break;

   end

end   

             4.3短时能量

4.3.1 用途

短时平均能量特征主要用途如下:

  1. 可以作为区分清音段和浊音段的特征参数。实验结果表明浊音段的能量En明显高于清音段。通过设置一个能量门限值,可以大致判定浊音变为清音或者清音变为浊音的时刻,同时也可以大致划分为浊音区间和清音区间。
  2. 在信噪比较高的情况下,短时能量还可以作为区分有声和无声的依据。
  3. 可以作为辅助的特征参数用于语音识别中。

4.3.2 问题

短时能量函数的一个主要问题是En对信号电平值过于敏感。由于需要计算信号样值的平方和,在定点实现时很容易产生溢出。

4.2.3 解决方法

为了克服这个缺点,采用以下的框图。

                 短时平均幅度实现框图

4.3.4 程序

amp = sum(abs(enframe(filter([1 -0.9375], 1, x), FrameLen, FrameInc)), 2);

          4.4 短时平均过零率

4.4.1 原理

    过零率可以反映信号的频谱特性。当离散时间信号相邻两个样点的正负号异号时,我们称为“过零率”。

短时平均过零率可以粗略估计语音的频谱特性。根据语音产生的模型可知,发浊音时,声带振动,尽管声道有多个共振峰,但由于声门波引起了频谱的高频衰落,因此浊音能量集中于3kHz以下。但是对于清音而言,由于声带不振动,由声道的某些部位阻塞气流产生类白噪声,多数能量集中在较高的频率上。高频率对应着高过零率,低频率对应着低过零率。

4.4.2 程序

 tmp1  = enframe(x(1:end-1), FrameLen, FrameInc);

tmp2  = enframe(x(2:end)  , FrameLen, FrameInc);

signs = (tmp1.*tmp2)<0;%相邻两帧为异号的个数

diffs = (tmp1 -tmp2)>0.02;

zcr   = sum(signs.*diffs, 2);

           4.5 倒谱

4.5.1 原理

以倒谱为基础的语音估计,其原理相当简单:首先计算语音的倒谱,然后在可能出现的基音周期附近寻找峰值。如果峰值超过了预先设置的门限,则输入语音段判为浊音,………

4.5.2窗函数的选择

    矩形窗的主瓣宽度最小(4×PI/N)因此它具有较高的频谱分辨率,但是它的旁瓣峰值较大(-13db),因此其频谱泄漏比较严重。

4.5.3 源程序

4.5.4倒谱流程图

             4.6主程序

4.6.1 源程序

disp('正在计算参考模板的参数...')

for i=1:10

fname = sprintf('%da.wav',i-1);%备注:该部分就是您要录制的语音样本(0-9的数字录音)该例程中用了20个.wav格式的录音:0a.wav,1a.wav....,9a.wav,0b.wav,1b.wav......,9b.wav,分别保存了0到9的发音前10个用于参考训练,后10个作为测试。

x = wavread(fname);

[x1 x2] = vad(x);

m = mfcc(x);

m = m(x1-2:x2-2,:);

%    m = m(x1:x2-4,:);

ref(i).mfcc = m;

end

disp('正在计算测试模板的参数...')

for i=1:10

fname = sprintf('%db.wav',i-1);

x = wavread(fname);

[x1 x2] = vad(x);

m = mfcc(x);

m = m(x1-2:x2-2,:);

test(i).mfcc = m;

end

disp('正在进行模板匹配...')

dist = zeros(10,10);

for i=1:10

for j=1:10

dist(i,j) = dtw(test(i).mfcc, ref(j).mfcc);

end

end

disp('正在计算匹配结果...')

for i=1:10

[d,j] = min(dist(i,:));

fprintf('测试模板 %d 的识别结果为:%d\n', i, j);

end

4.6.2 试验结果

4.6.3 主程序流程图

                   

                   主程序流程图

              

                

4.7 实验结果

       

               

                  第五章 设计中的问题

5.1方案的选择

   目前,用语音语音识别的方法有基于动态时轴规整(DTW)技术的模板匹配方法,基于概率统计的HMM法和基于人工神经网络(ANN)的最优搜索法。

   因为本设计要求简单,又由于DTW算法本身既简单又有效,在训练中几乎不需要额为的运算,所以我们选择了DTW算法。

5.2 语音格式的选择

    因为MATLAB环境只识别.WAV格式的语音信号,由于调试之前没有了解,所以在语音信号处理时-1遇到不少问题,多次犯错、且经过查阅资料才得知结论。并且语音信号要求是无损压缩的.WAV格式。通过在网上查询资料得知,Cool Edit Pro2.1软件对语音信号处理后可得到满足条件的语音信号。

第七章 参考文献

[1] 张雄伟,陈亮,杨吉斌.现代语音处理技术及应用.北京:机械工业出版社,2003.8

[2] 维纳·K·恩格尔,约翰·G·普罗克斯.数字信号处理.西安:西安交通大学出版社,2002.6

[3] 吴大正,高西全等.MATALAB及其在电子信息工程中的应用.北京:电子工业出版社,2006.3

[4] 郭仕剑,王宝顺等.MATLAB7.x数字信号处理.北京:人民邮电出版社,2006.12

[5] 易克初,田斌,付强.语音信号处理.北京:国防工业出版社,2000

[6] 杨行峻,迟惠生等.语音信号数字处理.北京:电子工业出版社.2000

[7] 袁保宗.“语音处理”、“语音增强”、“语音理解”词条,中国大百科全书(电信分册)

[8] 边肇祺,张学工等.模式识别.北京:清华大学出版社.2000.1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/462672.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

车载软件架构 --- 智能汽车软件

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…

实际案例说明用基于FPGA的原型来测试、验证和确认IP——如何做到鱼与熊掌兼得?

作者&#xff1a;Philipp Jacobsohn&#xff0c;SmartDV首席应用工程师 Sunil Kumar&#xff0c;SmartDV FPGA设计总监 本系列文章从数字芯片设计项目技术总监的角度出发&#xff0c;介绍了如何将芯片的产品定义与设计和验证规划进行结合&#xff0c;详细讲述了在FPGA上使用硅…

UiPath调用Python脚本的完整示例

一、主要步骤&#xff1a; 1、创建Python脚本 2、安装UiPath.Python.Activities库 3、使用方法&#xff1a; a、添加python作用域 b、加载python脚本 c、调用python方法 d、获取python对象 e、显示Python结果的消息对话框 二、详细步骤 1、安装UiPath.Python.Activities库 …

【简易进度条的实现】

独夜无伴守灯下&#xff0c;清风对面吹............................................................................................. 文章目录 前言 一、【行缓冲区的引入】 1、【问题提出】 2、【\r和\n】 3、【简易倒计时程序】 二、【简易进度条的实现】 process_bar.…

【已解决】cra 配置路径别名 @ 后,出现 ts 报错:找不到模块“@/App”或其相应的类型声明。ts(2307)

cra 配置路径别名 后&#xff0c;出现 ts 报错&#xff1a;找不到模块“/App”或其相应的类型声明。ts(2307) 然后可以在 tsconfig.json 中配置 baseUrl 和 paths &#xff1a; {"compilerOptions": {"target": "es5","lib": [&quo…

es拼音分词器(仅供自己参考)

github地址&#xff1a;https://github.com/infinilabs/analysis-pinyin&#xff08;各种版本&#xff0c;对接es版本&#xff09; 拼音分词器存在的问题&#xff1a; 1、是直接将每个字的拼音返回和一段话的拼音首字母返回&#xff0c;不能很好的分词。 2、不会保留中文&am…

为什么大家都在学数字孪生呢?

随着物联网&#xff0c;大数据、人工智能等技术的发展&#xff0c;新一代信息技术与制造业正在深度融合&#xff0c;人们与物理世界的交互方式正在发生转折性的变化。数字化转型正在成为企业的重要战略&#xff0c;而数字孪生则成为全新的焦点。 当下&#xff0c;在数字技术和…

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-11

文件下载与邀请翻译者 学习英特尔开发手册&#xff0c;最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册&#xff0c;会是一件耗时费力的工作。如果有愿意和我一起来做这件事的&#xff0c;那么&#xff…

LLM Observability: Azure OpenAI (一)

作者&#xff1a;来自 Elastic Vinay Chandrasekhar•Andres Rodriguez 我们很高兴地宣布 Azure OpenAI 集成现已全面上市&#xff0c;它提供了对 Azure OpenAI 服务性能和使用的全面可观察性&#xff01;另请参阅本博客的第 2 部分 虽然我们已经提供了对 LLM 环境的可视性一段…

HTML 基础标签——表格标签<table>

文章目录 1. `<table>` 标签:定义表格2. `<tr>` 标签:定义表格行3. `<th>` 标签:定义表头单元格4. `<td>` 标签:定义表格单元格5. `<caption>` 标签:为表格添加标题6. `<thead>` 标签:定义表格头部7. `<tbody>` 标签:定义表格…

第7章 内容共享

第 7 章 内容共享 bilibili学习地址 github代码地址 本章介绍Android不同应用之间共享内容的具体方式&#xff0c;主要包括&#xff1a;如何利用内容组件在应用之间共享数据&#xff0c;如何使用内容组件获取系统的通讯信息&#xff0c;如何借助文件提供器在应用之间共享文件…

基于 Python 的 Django 框架开发的电影推荐系统

项目简介&#xff1a;本项目是基于 Python 的 Django 框架开发的电影推荐系统&#xff0c;主要功能包括&#xff1a; 电影信息爬取&#xff1a;获取并更新电影数据。数据展示&#xff1a;提供电影数据的列表展示。推荐系统&#xff1a;基于协同过滤算法实现个性化推荐。用户系…

【高等数学】3-2多元函数积分学

1. 二重积分 可以想象你有一块不规则的平面薄板,它在一个平面区域上。二重积分就是用来求这个薄板的质量(假设薄板的面密度函数是)。 把区域划分成许多非常小的小方块(类似于把一块地划分成很多小格子),在每个小方块上,密度近似看成是一个常数,然后把每个小方块的质量加…

喜欢央卫 5.5.5 | 老年人专用电视直播APP

喜欢央卫是一款专门为老年人设计的电视直播APP。这款APP的名字非常简单直白&#xff0c;内容也符合老年人的口味。它提供了常用的央卫频道&#xff0c;还有V4和V6的不同线路&#xff0c;同时支持超多地方频道。界面简洁易用&#xff0c;非常适合教老人如何看电视。 大小&#…

DAY17|二叉树Part03|LeetCode: 654.最大二叉树 、617.合并二叉树 、700.二叉搜索树中的搜索、98.验证二叉搜索树

目录 LeetCode: 654.最大二叉树 基本思路 C代码 LeetCode: 617.合并二叉树 基本思路 C代码 LeetCode: 700.二叉搜索树中的搜索 基本思路 C代码 LeetCode: 98.验证二叉搜索树 中序遍历判断递增 基本思路 C代码 递归法 C代码 LeetCode: 654.最大二叉树 力扣…

《数字图像处理基础》学习05-数字图像的灰度直方图

目录 一&#xff0c;数字图像的数值描述 &#xff11;&#xff0c;二值图像 &#xff12;&#xff0c;灰度图像 3&#xff0c;彩色图像 二&#xff0c;数字图像的灰度直方图 一&#xff0c;数字图像的数值描述 在之前的学习中&#xff0c;我知道了图像都是二维信息&…

golang的多表联合orm

项目截图 1.数据库连接配置 DbConfigUtil.go package configimport ( "fmt" _ "github.com/go-sql-driver/mysql" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" "gorm.io/gorm/schema" )var Go…

Chromium 中chrome.topSites扩展接口定义c++

一、chrome.topSites 使用 chrome.topSites API 访问新标签页上显示的热门网站&#xff08;即最常访问的网站&#xff09;。不包括用户自定义的快捷方式。 权限 topSites 您必须声明“topSites”扩展程序清单中授予使用此 API 的权限。 {"name": "My exten…

在Zetero中调用腾讯云API的输入密钥的问题

也是使用了Translate插件了&#xff0c;但是需要调用腾讯云翻译&#xff0c;一直没成功。 第一步就是&#xff0c;按照这上面方法做&#xff1a;百度、阿里、腾讯、有道各平台翻译API申请教程 之后就是&#xff1a;Zotero PDF translat翻译&#xff1a;申请腾讯翻译接口 主要是…

2-137 基于matlab的sigmoid函数的变步长自适应语音信号增强

基于matlab的sigmoid函数的变步长自适应语音信号增强&#xff0c;与传统LMS相对比&#xff0c;比较不同的变步长函数去噪效果&#xff0c;并基于较好的去噪算法分析不同变步长中参数变化对降噪的影响。程序已调通&#xff0c;可直接运行。 下载源程序请点链接&#xff1a;2-13…