精华内容
下载资源
问答
  • matlab端点检测

    2014-04-09 19:02:59
    matlab端点检测,程序功能:从包含音的一段信号中找出语音的起始点及结束点。
  • matlab端点检测vad程序

    2009-03-30 14:28:17
    端点检测matlab程序,用于检测语音信号的起点和终点。分帧和预加重。
  • 端点检测 -预加重- fourier变换定义 -取成一维语音数据 -MFCC 神经网络部分-
  • matlab音频端点检测

    2015-06-12 23:02:06
    matlab实现音频端点检测,需要有enframe.m文件
  • 语音端点检测程序,对语音来说,端点检测这个步骤必不可少。为语音滤波什么的提供服务
  • matlab实现端点检测

    万次阅读 2016-10-27 17:35:48
    端点检测 function [afterEndDet] =EndDetection(x) %================================i========================= % 端点检测 % Input:音频数据x,采样率fs % Output:经过端点检测提取的语音信号 %==========...

    端点检测

    function [afterEndDet] =EndDetection(x)
     %================================i=========================
     % 端点检测
     % Input:音频数据x,采样率fs
     % Output:经过端点检测提取的语音信号
     %=========================================================
    
    %幅度归一化到[-1,1]
    x = double(x);
    x = x / max(abs(x));
    
    %常数设置
    FrameLen = 256;%帧长为256点
    FrameInc = 80;%帧移为80点
    amp1 = 10;%初始短时能量高门限
    amp2 = 2;%初始短时能量低门限
    zcr1 = 10;%初始短时过零率高门限
    zcr2 = 5;%初始短时过零率低门限
    maxsilence = 8;  % 8*10ms  = 80ms
    
    %语音段中允许的最大静音长度,如果语音段中的静音帧数未超过此值,则认为语音还没结束;如果超过了
    %该值,则对语音段长度count进行判断,若count<minlen,则认为前面的语音段为噪音,舍弃,跳到静音
    %状态0;若count>minlen,则认为语音段结束;
    
    minlen  = 15;    % 15*10ms = 150ms
    %语音段的最短长度,若语音段长度小于此值,则认为其为一段噪音
    
    
    status  = 0;     %初始状态为静音状态
    count   = 0;     %初始语音段长度为0
    silence = 0;     %初始静音段长度为0
    
    %计算过零率
    x1=x(1:end-1);
    x2=x(2:end);
    %分帧
    tmp1=enframe(x1,FrameLen,FrameInc);
    tmp2=enframe(x2,FrameLen,FrameInc);
    signs = (tmp1.*tmp2)<0;
    diffs = (tmp1 -tmp2)>0.02;
    zcr   = sum(signs.*diffs, 2);%一帧一个值
    
    %计算短时能量
    %一帧一个值
    %amp = sum(abs(enframe(filter([1 -0.9375], 1, x), FrameLen, FrameInc)), 2);
    amp = sum(abs(enframe(x, FrameLen, FrameInc)), 2);
    
    %调整能量门限
    
    amp1 = min(amp1, max(amp)/4);
    amp2 = min(amp2, max(amp)/8);
     
    
    %开始端点检测
    %For循环,整个信号各帧比较
    %根据各帧能量判断帧所处的阶段
    x1 = 0;
    x2 = 0;
    v_num=0;%记录语音段数
    v_Begin=[];%记录所有语音段的起点
    v_End=[];%记录所有语音段的终点
    
    %length(zcr)即为帧数
    for n=1:length(zcr)
       goto = 0;
       switch status
       case {0,1}                   % 0 = 静音, 1 = 可能开始
          if amp(n) > amp1          % 确信进入语音段
             x1 = max(n-count-1,1);
    %          '打印每个x1*FrameInc'
    %          x1*FrameInc
             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;
          %记录当前语音段数据
          v_num=v_num+1;   %语音段个数加一
          count = count-silence/2;
          x2 = x1 + count -1;
          v_Begin(1,v_num)=x1*FrameInc; 
          v_End(1,v_num)=x2*FrameInc;
          %不跳出 数据归零继续往下查找下一段语音
          status  = 0;     %初始状态为静音状态
          count   = 0;     %初始语音段长度为0
          silence = 0;     %初始静音段长度为0
    
    
       end
    end  
    
    if length(v_End)==0
        x2 = x1 + count -1;
        v_Begin(1,1)=x1*FrameInc; 
        v_End(1,1)=x2*FrameInc;
    end
    
    % subplot(311)    %subplot(3,1,1)表示将图排成3行1列,最后的一个1表示下面要画第1幅图
    % plot(x)
    % axis([1 length(x) -1 1])    %函数中的四个参数分别表示xmin,xmax,ymin,ymax,即轴的范围
    % ylabel('Speech');
    % for k=1:length(v_End)
    % line([v_Begin(1,k) v_Begin(1,k)], [-1 1], 'Color', 'g');
    
    %这里作用为用直线画出语音段的起点和终点,看起来更直观。第一个[]中的两个参数为线起止点的横坐标,
    
    %第二个[]中的两个参数为线起止点的纵坐标。最后两个参数设置了线的颜色。
    % line([v_End(1,k) v_End(1,k)], [-1 1], 'Color', 'red');
    % end
    % 
    % subplot(312)   
    % plot(amp);
    % axis([1 length(amp) 0 max(amp)])
    % ylabel('Energy');
    % line([x1 x1], [min(amp),max(amp)], 'Color', 'red');
    % line([x2 x2], [min(amp),max(amp)], 'Color', 'red');
    % 
    % subplot(313)
    % plot(zcr);
    % axis([1 length(zcr) 0 max(zcr)])
    % ylabel('ZCR');
    % line([x1 x1], [min(zcr),max(zcr)], 'Color', 'red');
    % line([x2 x2], [min(zcr),max(zcr)], 'Color', 'red');
    
    % figure
    lenafter=0;
    for len=1:length(v_End)
        tmp=v_End(1,len)-v_Begin(1,len);
        lenafter=lenafter+tmp;
    end
    lenafter
    afterEndDet=zeros(lenafter,1);%返回去除静音段的语音信号
    beginnum=0;
    endnum=0; 
    
        for k=1:length(v_End)
            tmp=x(v_Begin(1,k):v_End(1,k));
            beginnum=endnum+1
            endnum=beginnum+v_End(1,k)-v_Begin(1,k)
            afterEndDet(beginnum:endnum)=tmp; 
        end
    
    end
    

    查到的源码基本上是只提取一小段的,自己进行了修改将一段语音中能力低于min门限剪切后,重新拼接成语音。
    端点检测后的语音明显去除了空白段,但语音段之间连接不是很流畅(有点像机器人)。


    不太确定是否因此起到了反作用。

    从我自己的项目测试结果来看,这段代码并没有明显提高识别率。


    在此仅作记录。


    展开全文
  • 基于matlab语音端点检测(包括过零率,短时能量和终点检测~) 基于matlab语音端点检测(包括过零率,短时能量和终点检测~)
  • MATLAB语音端点检测

    2021-08-25 11:53:25
    第一章 绪论Matlab是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括Matlab和Simulink...

    第一章 绪论

    Matlab是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括Matlab和Simulink两大部分。

    1.1 Matlab简介

    MATLAB是英文MATrix LABoratory(矩阵实验室)的缩写。早期的MATLAB是用FORTRAN语言编写的,尽管功能十分简单,但作为免费软件,还是吸引了大批使用者。经过几年的校际流传,在John Little。Cleve Moler和Steve Banger合作,于1984年成立MathWorks公司,并正式推出MATLAB第一版版。从这时起,MATLAB的核心采用C语言编写,功能越来越强大,除原有的数值计算功能外,还新增了图形处理功能。

    MathWorks公司于1992年推出了具有划时代意义的4.0版;1994年推出了4.2版扩充了4.0版的功能,尤其在图形界面设计方面提供了新方法;1997年春5.0版问世,5.0版支持了更多的数据结构,使其成为一种更方便、更完善的编程语言;1999年初推出的MATLAB5.3版在很多方面又进一步改进了MATLAB语言的功能,随之推出的全新版本的最优化工具箱和Simulink3.0达到了很高水平;2000年10月,MATLAB6.0版问世,在操作页面上有了很大改观,为用户的使用提供了很大方便,在计算机性能方面,速度变的更快,性能也更好,在图形界面设计上更趋合理,与C语言接口及转换的兼容性更强,与之配套的Simulink4.0版的新功能也特别引人注目;2001年6月推出的MATLAB6.1版及Simulink4.1版,功能已经十分强大;2002年6月推出的MATLAB6.5版及Simulink5.0版,在计算方法、图形功能、用户界面设计、编程手段和工具等方面都有了重大改进;2004年,MathWorks公司推出了最新的MATLAB7.0版,其中集成了最新的MATLAB7编译器、Simumlink6.0仿真软件以及很多工具箱。这一版本增加了很多新的功能和特性,内容相当丰富。

    Matlab主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,代表了当今国际科学计算软件的先进水平。

    Matlab的优势(1) 工作平台编程环境十分友好(2)编程语言简单易用(3)数据的计算处理能力十分强大(4)图像处理能力强大(5)模块集合工具箱应用广泛(6)程序的接口和发布平台很实用(7)可以开发用户界面。

    Matlab 语言的特点MATLAB语言被称为第四代计算机语言,其利用丰富的函数资源,使程序员从繁琐的程序代码中解放出来,其最突出的特点就是简洁。MATLAB用更直观的、符合人们思维习惯的代码,代替了C和FORTRAN语言的冗长代码,给用户带来最直观、最简洁的程序开发环境,下面简单介绍一下MATLAB的主要特点。

    语言简洁紧凑,使用方便,库函数十分丰富。MATLAB程序书写的形式自由,利用丰富的库函数避开了繁琐的子程序编程任务,由于库函数都是由本领域的专家编写,所以不必担心函数的可靠性。

    高效方便的矩阵和数组运算,MATLAB语言不需要定义数组的维数,并给出了矩阵函数、特殊矩阵函数、特殊矩阵专门的库函数,使得在求解信号处理、建模、系统识别、优化和控制等领域的问题时,显得大为简洁、方便、高效,这是其他高级语言所不能的。

    MATLAB既具有结构化的控制语句,又具有面向对象编程的特性。

    MATLAB语法限制不严格,程序设计自由度大,通过建立M后缀名文件的形式,与用户已经编好的FORTRAN、C语言成语混合编程,方便地调用有关的FORTRAN、C语言的子程序。可移植性很好,基本上不做修改就可以在各种型号的计算机和操作系统上面运行。

    MATLAB的图形功能强大。在C和FORTRAN语言里,绘图都很不容易,但在MATLAB里,数据的可视化非常简单。此外,MATLAB还具有较强的编辑图形界面的能力。

    MATLAB拥有功能强大的工具箱,主要用来扩充其符号计算功能、图示建模仿真功能、文字处理功能以及与硬件实施交互功能。

    源程序的开放性强。除内部函数以外,所有MATLAB的核心文件和工具箱文件都是可读可改变的源文件,用户可通过对源文件的修改以及加入自己的文件构成新的工具箱。

    MATLAB软件自1984年推向市场以来,历经十几年的发展和竞争,现已成为国际公认的最优秀的科技应用软件。它功能强大、界面友好、语言自然、开放性强,很快成为应用学科计算机辅助分析、设计、仿真、教学乃至科技文字吹不可缺少的基础软件。

    1.2语音概述

    1.2.1语音简介

    语音,即语言的声音,是语言符号系统的载体。它由人的发音器官发出,负载着一定的语言意义,语言依靠语音实现它的社会功能。语音是人们交流思想和进行社会活动的最基本手段,因此我们要对语音信号进行处理分析,优化人类通信交流。语音信号处理包括语音通信、语音增强、语音合成、语音识别和说话人识别等方面。语音信号的好坏、语音识别率的高低,都取决于语音信号处理的好坏。因此,语音信号处理是一项非常有意义的研究课程,而语音端点检测是语音语音信号处理中非常重要的一步。

    语音端点检测是语音分析、合成和识别中的一个重要环节,目的是从包含语音的一段信号中找出语音的起始点及结束点,从而只存储和处理有效语音信号。有效的端点检测不仅可以减少数据的存和处理时间,而且能排除无声段的噪声干扰。端点检测的困难在于无声段或者语音段前后人为呼吸等产生的杂音、语音开始处的弱摩擦音或弱爆破音以及终点处的鼻音,这些使得语音的端点比较模糊,需要综合利用语音的各种信号特征,从而确保定位的精确性,避免包含噪音信号和丢失语音信号。近年来出现了很多种端点检测的方法如短时能量、短时过零率、传统的双门限法、倒谱特征的检测方法、谱熵的检测方法法、分形法等。尽管语音端点检测技术在安静的环境中已经达到了令人鼓舞的准确率,但是在实际应用时由于声的引入和环境的改变通常会使系统性能显著下降。研究表明,即使在安静的环境中,语音识别系统一半以上的识别错误来自端点检测器。因此,作为语音识别系统的第一步,端点检测的关键性不容忽视,尤其是噪声环境下语音的端点检测,实验室的研究结果与复杂的实用环境下的语音端点检测仍存在一定的差距,它的准确性很大程度上直接影响着后续的工作能否有效进行,如何准确地检测出带噪语音的端点至今仍是一个难题。


    1.2.2研究背景及意义

    语音是语言的声学表现形式,语言是人类特有的功能,声音是人类常用的信息交流工具,通过声音传递信息是人类最重要、最有效、最准确、最方便、最自然的信息交换的方式。语音信号处理是一门涉及面很广的交叉科学,包含计算机科学、语音学、语言学、声学、生理学、心理学和数学等诸多领域的内容。随着现代科学的蓬勃发展,人类社会越来越显示出信息社会的特点,犹如衣、食、住、行对于人类是必要的一样,通信和信息交换也成为了人类社会存在的必要条件,不但在人与人之间,而且在人与机器之间每时每刻都需要进行大量的信息交换。让计算机听懂人类的语言,是人类自计算机诞生以来梦寐以求的想法。

    语音技术的应用己经成为一个具有竞争性的高新技术产业,它正在直接与办公、交通、金融、公安、商业、旅游等行业的语音咨询与管理,工业生产部门的语声控制,电话、电信系统的自动拨号、辅助控制与查询以及医疗卫生和福利事业的生活支援系统等各种实际应用领域相接轨,并且有望成为下一代操作系统和应用程序的用户界面。语音处理内容涉及到计算机科学、模式识别、信号处理、生理学、语音学、心理学等学科,还涉及到信号和信息处理系统、通信和电子系统等具体应用领域。语音信号处理与信息科学中最活跃的前沿科学密切联系,并且共同发展。例如,神经网络理论、模糊集理论、小波理论是当前热门的研究领域,这些领域的研究常常把语音处理任务作为一个应用实例,而语音处理研究者也从这些领域的研究进展中找到突破口,使语音处理技术研究取得进展。

    经过几十年的努力,语音信号处理在语音识别、语音增强、语音编码、说话人识别、说话人情感识别、语音合成等方面取得了巨大的进步,然而,一旦这些技术应用在实际环境中,由于环境噪声、信道等方面的影响,性能急剧下降,因为在实际环境中没有完全纯净的语音信号,一般都会伴有噪声或其它干扰。。语音检测的任务就是判断待处理信号是语音还是非语音,从输入信号中找到语音部分的起止点。语音检测是语音识别、语音增强以及语音编码等中的一个重要环节。有效的语音检测技术不仅能减少系统的处理时间、提高系统的处理实时性,而且能排除无声段的噪声干扰,从而使后续工作的性能得以较大提高。



    第二章 语音信号处理

    2.1 语音信号特点

    语音信号是随时间变化的一维信号,由一连串的音组成,各个音的排列有一定的规则。语音具有声学特征的物理性质,声音质量与它的频率范围有关,语音信号的频率一般是在200Hz~3500Hz范围内,随着带宽的增加,信号的自然度将逐步得到改善。语音信号本身的冗余度是较大的,少数辅音清晰度下降并不明显影响语句的可懂度,比如通常的模拟电话带宽只有3KHz~4KHz。

    语音信号的特性是随时间变化的,所以是一种典型的非稳态信号。但是,从另一方面来看,由于语音的形成过程与发音器官的运动密切相关,这种物理运动比起声音振动速度来讲要缓慢得多,因此,语音信号常常可假定为短时平稳的。研究表明,在5ms-40ms的范围内,语音信号的频谱特性和一些物理特征参数基本保持不变。这样,我们就可以将平稳过程的处理方法和理论引入到语音信号的短时处理中。因此,“短时分析技术”贯穿于语音分析的全过程。

    语音信号的基本组成单位是音素。音素可分成“浊音”和“清音”两大类。如果将不存在语音而只有背景噪声的情况称为“无声”。那么音素可以分成“无声”、“浊音”、“清音”三类。一个音节由元音和辅音构成。元音在音节中占主要部分。所有元音都是浊音。在汉语普通话中,每个音节都是由“辅音一元音”构成的。 在信号处理中,语音按其激励形式的不同可分为2 类: (1)浊音 当气流通过声门时,如果声带的张力刚好使声带发生张弛振荡式的振荡,产生一股准周期的气流,这一气流激励声道就产生了浊音。这种语音信号是1 种激励信号,它是由规则的全程激励产生的,其时域波形具有准周期性,语音频率集中在比较低的频率范围内,短时能量较高,由于语音信号中的高频成分有高的过零率而低频有低的过零率,因此浊音的过零率低。通常,浊音信号可以由周期激励通过线性滤波器合成。 (2)清音 当气流通过声门时,如果声带不振动,而在某处收缩,迫使气流高速通过这一收缩部分而产生湍流,就得到清音。清音是由不规则的激励产生的,发清音时声带不振动,其时域波形不具有周期性, 自相关函数没有很强的自相关周期峰,其语音频率集中在较高的范围内,短时能量较低,因而过零率较高。通常,清音信号可由白噪声通过线性滤波器合成。


    2.1.1 语音信号的“短时谱”

    对于非平稳信号,它是非周期的,频谱随时间连续变化,因此由傅里叶变换得到的频谱无法获知其在各个时刻的频谱特性。如果利用加窗的方法从语音流中取出其中一个短段,再进行傅里叶变换,就可以得到该语音的短时谱。

    2.1.2 基音周期

    浊音信号的周期称为基音周期,它是声带振动频率的倒数,基音周期的估计称为基音检测。基音检测是语音处理中的一项重要技术,它在有调语音辨意、低速率语音编码、说话人识别等方面起着非常关键的作用。但在实现过程中,由于声门激励波形不是一个完全的周期脉冲串,再加上声道影响去除不易、基音周期定位困难、背景噪声影响强烈等一系列因素,基音检测面临着很大的困难。现在已有很多性能优越的基音检测算法,自相关基因检测算法就是一种基于语音时域分析理论较好的算法,在这里基于声音文件比较稳定的基础上,使用观察法获取基音周期。

    2.2 语音信号预处理

    为了消除因为人类发声器官本身和因一些采集语音信号的设备等所引起的混叠、高次谐波失真现象,在对语音信号进行分析和处理之前,必须对其进行预处理。语音信号的预处理应尽可能地保证处理后得到的信号更均匀、平滑,且能提高语音的质量。

    2.2.1预加重

    在进行语音信号数字处理时,为了获取一段语音信号的时域波形,首先要将语音信号转换成电信号,再用A/D转换器将其变换为离散的数字化采样信号。己经数字化的语音信号将依次进入一个数据区。由于语音信号的平均功率受声门激励和口鼻辐射影响,高频端大约在800Hz以上按6dB/倍频程跌落,即6dB/oct(2倍频)或20dB/dec(10倍频),所以求语音信号频谱时,频率越高相应的成分越小,高频部分的频谱比低频部分的难求,为此要在预处理中进行预加重处理。目的是提升高频部分,使信号变得平坦,保持在低频到高频的整个频带中,能用同样的信噪比求频谱,而且预加重零点与辐射零点将抵消声门波的影响,使语音信号中只包含声道部分,以便于频谱分析或声道参数分析。图2.1表明了语音预处理的过程


    语音

    图2.1 语音信号的预处理

    预加重一般是在语音信号数字化之后,用具有6dB/倍频程的提升高频特性的预加重数字滤波器来实现,它一般是一阶的数字滤波器:

    v2-0271ee2b0b5bf606fc6fa1370b05635a_b.png

    (2-1)

    式中

    v2-45907af09a81454aacefaa5c503ba7b8_b.png

    的取值接近于1。

    有时要恢复原信号,需要从做过预加重的信号频谱来求实际的频谱时,要对测量值进行去加重处理,即加上6dB/倍频程的下降的频率特性来还原成原来的特性。

    2.2.2加窗分帧

    语音信号检测首先要进行分帧处理,然后依次判断每一帧是否为语音的端点。如果采用较小的窗长,则计算量增加,语音识别的速度会降低。我们可以在语音静音段时,采用较长的窗 ;在语音和静音的过渡段时采用较小的窗 ,可以确切判断语音的起始点 ;一旦确定语音的起点,就改用常规窗长。

    在进行了预加重后,接下来就要对语音信号进行加窗分帧处理。将语音信号划分为许多短时的语音段,每个短时的语音段称为一个分析帧。另外,由于不同语音信号的基音周期不同,为了兼顾男声和女声的最高和最低基音频率,且能准确地描述语音能量自身的实际变化规律,通常将窗宽选为10ms~20ms。


    v2-d9fbc38f3756c1dfc5327f8f15ac29de_b.jpg


    图2.2 帧长和帧移

    如图2.2所示分帧一般采用交叠分段的方法,这是为了使帧与帧之间能平滑过渡,保持其连续性。前一帧和后一帧的交叠部分称为帧移,帧移与帧长的比值一般取为0~0.5之间。分帧是用可移动的有限窗口长度进行加权实现的,即用窗函数

    v2-25df9e8d6a91273b849758bc558d660c_b.png

    乘以语音信号s(n),从而形成加窗的语音信号:

    v2-b847d2b5374c49c3b19bb52afdd74fea_b.jpg

    (2-2)

    由于窗函数一般取为S(n)中间大两头小的光滑函数,这样的冲激响应所对应的滤波器具有低通特性,其带宽和频率取决于窗函数的选取。用得最多的三种窗函数是矩形窗、汉明窗(Hamming)和汉宁窗(Hanning),它们的定义如下:

    矩形窗:

    v2-bcc6a4c23c6859f56a72e9ede58614ef_b.jpg

    (2-3)

    汉明窗:


    v2-0657ed20452c82f87c4b0a67f603b9a7_b.png

    (2-4)

    汉宁窗:


    v2-27199a04f437be338963a97949d3edeb_b.jpg

    (2-5)

    式中N为窗长,窗函数

    v2-ba01c10eff7c9e2a4f23d0f8c9c792f8_b.png

    的选取(形状和长度)对于短时分析参数的特性影响很大,为此应该选择合适的窗口,使其短时参数能更好地反映语音信号的特性变化。以上这些窗函数的幅度频率响应都具有低通特性,它们的主瓣宽度和旁瓣高度如表1-1所示。

    表1-1 1s长的各种窗的主瓣宽度和旁瓣高度

    矩形汉明汉宁
    主瓣宽度0.81Hz1.19Hz1.87Hz
    旁瓣宽度-13dB-43dB-32dB

    从表中可知:矩形窗的主瓣宽度最小,但其旁瓣高度最高;汉明窗的主瓣最宽,而旁瓣高度最低。矩形窗的旁瓣太高,会产生严重的泄漏现象。汉明窗旁瓣最低,可以有效地克服泄漏现象,具有更平滑的低通特性,因此,一般在语音信号预处理中,都选用汉明窗来进行语音分帧处理。


    2.3 语音信号分析

    语音信号处理包括语音识别、语音合成、语音编码、说话人识别等方面,但是其前提和基础是对语音信号进行分析。只有将语音信号分析成表示其本质特性的参数,才有可能利用这些参数进行高效的语音通信,以及建立用于识别的模板或知识库。而且,语音识别率的高低,语音合成的音质好坏,都取决于对语音信号分析的准确性和精度。

    2.3.1短时时域分析

    语音信号本身就是时域信号,因此,时域分析方法是应用最为广泛的一种方法,这种方法直接利用语音信号的时域波形。时域分析通常用于最基本的参数分析以及用于语音的分割、预处理等。语音信号的时域参数有短时能量、短时平均幅度、短时过零率、短时自相关函数等,这些是语音信号中一组最基本的短时参数,在各种语音信号数字处理技术中都有重要应用。

    进行语音信号分析时,最先接触到且最直观的就是它的时域波形。时域分析通常用于最基本的参数分析,语音的分割、预处理和大分类。这种分析方法的特点是表示语音信号比较直观、物理意义明确;实现起来比较简单、运算量少;可得到语音的一些重要参数;可采用示波器等通用设备进行观测。取样之后要对信号进行量化,而量化过程不可避免地会产生量化误差,即量化后的信号值与原信号之间的差值。


    2.3.2频域分析

    语音信号频域分析,主要是对一些频域的参数进行分析,常用的一些频域参数有频谱、功率谱、倒谱等等,最常用的频域分析方法有傅立叶变换法、线性预测法等。

    1、傅立叶变换法

    傅里叶频谱变换是语音信号频域分析中广泛使用的方法,是分析线性系统和平稳信号稳态特性强有力的手段,对分帧加窗后的语音信号,进行傅里叶变换和逆傅里叶变换,可以相应的得到频谱,功率谱,倒谱距离,嫡等特征。由于语音信号的特性是随着时间缓慢变化,所以采用短时傅里叶变换,相应的求得特征为短时频域特征,这里的窗函数都使用汉明窗。

    (1)短时频谱和短时功率谱

    设信号

    v2-8d5481cb664a2581f48049e04ffa06e1_b.png

    经过傅里叶变换后在频域记为

    v2-6ba52541755ae6b72aa4e18be72d26e7_b.png

    ,则

    v2-6ba52541755ae6b72aa4e18be72d26e7_b.png

    v2-8d5481cb664a2581f48049e04ffa06e1_b.png

    的关系见公式1-6。


    v2-e17d22051000ed2cc1d6989f5d465bfd_b.jpg

    (2-6)

    语音的频谱为

    v2-6ba52541755ae6b72aa4e18be72d26e7_b.png

    的幅度,则有


    v2-3ad4cedbc8c772187e162266ad9c1612_b.png

    (2-7)

    语音的短时功率谱的是幅度的平方,所以短时功率谱的计算方法为


    v2-7742a93b025c00fa5fcf2f0f41396da3_b.jpg

    (2-8)

    (2)倒谱距离

    语音信号的倒谱分析是通过同态处理来实现的。同态信号处理也称为同态滤波,就是将非线性问题转化为线性问题的处理方法。由于语音信号可视为声门激励信号和声道冲击响应的卷积,可以对语音信号进行解卷。倒谱能很好表示语音的特征,在强噪声环境下,可通过倒谱系数求得倒谱距离,使用倒谱距离来作为端点检测的特征。信号的倒谱也可以定义为信号的能量谱密度函数S(叻的对数的傅里叶级数展开式的系数,


    v2-84a100e451342837f927d42a867ed4cf_b.jpg

    (2-9)


    即为倒谱系数,通过倒谱系数求得倒谱距离几

    v2-b334d1b716af5fe66dda92eff4fd91aa_b.png

    (2-10)(3)熵

    熵(用

    v2-180bb2a2c09dea4cd3c04b3b7d550c78_b.png

    表示)是物质的复杂程度的一种反映。熵

    v2-180bb2a2c09dea4cd3c04b3b7d550c78_b.png

    代表

    v2-95b7b74474c8a6524ccf44ed0b08024c_b.png

    的信息量,

    v2-95b7b74474c8a6524ccf44ed0b08024c_b.png

    的概率分布越模糊,越难判断,

    v2-95b7b74474c8a6524ccf44ed0b08024c_b.png

    的熵为

    v2-aee24e90949f33f8bf169cec27bb1ddc_b.png

    (2-11)

    2、线性预测法

    线性预测分析的基本思想是:由于语音样点之间存在相关性,所以可以用过去的样点值来预测现在或未来的样点值,即一个语音的抽样能够用过去若干个语音抽样或它们的线性组合来逼近。通过使实际语音抽样和线性预测抽样之间的误差在某个准则下达到最小值来决定唯一的一组预测系数。而这组预测系数就反映了语音信号的特征,可以作为语音信号特征参数用与语音识别、语音合成等。

    将线性预测应用与语音信号处理,不仅是因为它的预测功能,而且更重要的是因为它能提供一个非常好的声道模型及模型参数估计方法。线性预测的基本原理和语音信号数字模型密切相关。


    第三章 语音信号检测

    3.1清音浊音检测

    3.1.1信号采集

    该设计以本人的声音为分析样本。。可得出声音的采样频率为11025Hz,且声音是单通道的。利用sound函数,可清晰地听到读音为:“电子信息”的音频信号。采集数据并画出波形图如下所示,fs 为采样频率,x为采样数据,接下来对采样数据作傅里叶变换y=fft(x)并画出频谱图如图1所示,程序如下:

    fs=11025; %抽样频率

    x=wavread('yin.wav');

    sound(x1,11025); %读取语音信号“电子信息”

    figure(1)

    subplot(211)

    plot(x) %做原始语音信号的时域图形

    title('原始语音信号波形');

    xlabel('样点数'); %x轴的名字是“样点数”

    ylabel('幅值 '); %y轴名字是“幅值”

    grid on;

    N=128;

    n=0:N-1;

    y=fft(x); %对x进行傅里叶变换

    mag=abs(y); %求幅值

    f=(0:length(y)-1)'*fs/length(y); %进行对应的频率转换

    figure(1)

    subplot(212)

    plot(f,mag); %做原始语音信号的频谱图

    xlabel('频率(Hz)');

    ylabel('幅值');

    title('原始信号频谱图');

    grid on;



    v2-3780e9e8f852990a079ae87038d54ea0_b.jpg


    图1 原始语音信号波形及频谱图

    由频谱图可清楚地看到样本声音主要以低频为主。人的语音信号频率一般集中在200 kHz到4.5 kHz之间,从声音频谱的包络来看,样本声音的能量集中在0.1(1102.5Hz)以内,0.4以外的高频部分很少。所以信号宽度近似取为1.1kHz,由采样定理可得

    v2-2d3f01c35d90bf678d1c4acc16d3f7ab_b.png


    3.1.2短时能量和短时平均幅度

    能量是语音的一个重要特性,由于语音信号的能量随时间变化,清音和浊音之间的能量差别相当显著,清音的能量较小,浊音的能量较大。因此对语音的短时能量进行分析,可以描述语音的这种特征变化情况。短时能量定义为:


    v2-969bdc0f658409dbc196da9e43d6665d_b.png

    (3-1)

    其中,W(n)是窗函数,N是窗长。特殊地,当采用矩形窗时,可简化为:

    v2-9181a66d9b96fee29456cb268026d04b_b.png

    (3-2)

    由此表明,窗口加权短时平均能量En 相当于将“语音平方”信号通过一个单位函数响应为h( n) 的线性滤波器的输出。

    本次语音信号的短时平均能量和短时平均幅度如下图2所示及程序如下:

    N=240;

    Y=wavread('yin.wav');

    L=length(Y);

    LL=length(Y)/N;

    figure(2)

    Em=zeros(1,(LL-1)*240);

    for ii=1:(LL-1)*240,

    temp=Y(ii:ii+240);

    Em(ii)=sum(temp.*temp);

    end

    jj=[1:(LL-1)*240];

    subplot(211)

    plot(jj, Em,'b'); %绘制短时平均能量曲线

    xlabel('帧数');

    ylabel('短时能量');

    title('短时平均能量');

    grid on;

    %短时平均幅度Mn=sum(abs(Y))/N

    Mn=zeros(1,(LL-1)*240);

    for ii=1:(LL-1)*240,

    temp=Y(ii:ii+240);

    Mn(ii)=sum(abs(temp))/N;

    end

    figure(2)

    jj=[1:(LL-1)*240];

    subplot(212)

    plot(jj, Mn,'b'); %绘制短时平均幅度曲线

    xlabel('帧数');

    ylabel('短时平均幅度');

    title('短时平均幅度');

    grid on;


    v2-2b282422b33dd4882c315ac9634df510_b.jpg

    图2 短时平均能量和短时平均幅度

    由上图发现,语音浊音段的短时平均能量远远大于清音段的短时平均能量。因此,短时平均能量En 的计算给出了区分清音段与浊音段的依据,即En (浊) > En (清)。根据En 由高到低的跳变可定出浊音变为清音语音的时刻, En 由低向高的跳变可定出清音变为浊音语音的时刻,而只有浊音才有基音周期,清音的基音周期为零。故清浊音判断是基音检测的第一步。

    该算法中窗口选择汉明窗,选择汉明窗的理由是窗函数的选取原则为窗函数截取后的x ( n) 尽量是中间大两头小的光滑函数,冲激响应对应的滤波器具有低通特性。从汉明窗的构成及频率响应特性上看, 汉明窗具有这种特性, 而矩形窗及汉宁窗则稍逊之。汉明窗虽然主瓣最高(带宽大) ,但旁瓣最低(通带外的衰减大) , 可以有效地克服泄露现象,具有更好的低通特性。故选择汉明窗而不选择别的窗函数,能使短时平均能量En 更能反映语音信号的幅度变化。

    短时能量函数的应用:

    1)可用于区分清音段与浊音段。En值大对应于浊音段,En值小对应于清音段。

    2)可用于区分浊音变为清音或清音变为浊音的时间(根据En值的变化趋势)。

    3)对高信噪比的语音信号,也可以用来区分有无语音(语音信号的开始点或终止点)。无信号(或仅有噪声能量)时,En值很小,有语音信号时,能量显著增大。


    3.1.3 短时过零率

    过零率可以反映信号的频谱特性。对于连续语音信号,可以考察其时域波形通过时间轴的情况。对于离散时间信号,如果相邻两个样点的正负号相异时,我们称之为“过零”,即此时信号的时间波形穿过了零电平的横轴。由此可以计算过零数,过零数就是样本改变符号的次数,统计单位时间内样点值改变符号的次数就可以得到平均过零率。短时过零分析通常用在端点检测,特别是用来估计清音的起始位置和结束位置。

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

    音频为“电子信息”的短时过零率的波形图如下图3所示及程序如下:

    Zn=zeros(1,(LL-1)*240);

    for ii=2:(LL-1)*240,

    temp1=sign(Y(ii:ii+240));

    temp=sign(Y(ii-1:ii+240-1));

    Zn(ii)=sum(abs(temp1-temp));

    end

    figure(3)

    jj=[1:(LL-1)*240];

    plot(jj, Zn,'b'); %绘制短时过零率函数曲线

    xlabel('帧数');

    ylabel('短时过零率');

    title('短时过零率');

    grid on;


    v2-e5fbaa443979c583a2bbf132ae039cbe_b.jpg

    图3 短时平均过零率

    分析可知:清音的短时能量较低,过零率高,浊音的短时能量较高,过零率低。清音的过零率为0.5左右,浊音的过零率为0.1左右,两但者分布之间有相互交叠的区域,所以单纯依赖于平均过零率来准确判断清浊音是不可能的,在实际应用中往往是采用语音的多个特征参数进行综合判决。

    短时过零率的应用:

    1)区别清音和浊音。清音的过零率高,浊音的过零率低。此外,清音和浊音的两种过零分布都与高斯分布曲线比较吻合。

    2)从背景噪声中找出语音信号。语音处理领域中的一个基本问题是,如何将一串连续的语音信号进行适当的分割,以确定每个单词语音的信号,亦即找出每个单词的开始和终止位置。

    3)在孤立词的语音识别中,可利用能量和过零作为有话无话的鉴别。


    3.2语音信号端点检测

    3.2.1基于短时能量和短时过零率的双门限端点检测原理

    双门限法是利用短时能量和过零率的乘积进行检测的。在基于短时能量和过零率的双门限端点检测算法中首先为短时能量和过零率分别确定两个门限,一个为较低的门限,对信号的变化比较敏感,另一个是较高的门限。当低门限被超过时,很有可能是由于很小的噪声所引起的,未必是语音的开始,当高门限被超过并且在接下来的时间段内一直超过低门限时,则意味着语音信号的开始。

    该算法的原理简述如下:

    对上述两种特征作一个统计估计,得到两个门限值,利用短时能量检测浊音,短时过零率检测清音,两者配合从而确定语音的端点。由于采集的声音信号中最初的短时段多为无声或背景噪声,这样就可以利用已知为“静态”的最初几帧(一般取10帧)信号计算其过零率阀值zcr及高、低能量阀值amp2(低能量阀)和amp1 (高能量阀)。

    本文在计算短时能量之前,先经过一个滤波器,高通滤波器,此为预加重滤波器,目的在于滤除低频干扰 ,尤其是50Hz或60Hz的工频干扰,将对于语言识别更为有用的高频部分的频率进行提升,在计算短时能量之前应用该滤波器,还可以起到消除直流漂移、抑制随机噪声和提升清音部分能量的效果。其关键代码为amp=sum(abs(enframe(filter([1-0.98],1,x),FrameLen,FrameInc)),2)。文中能量门限调整代码为:

    amp1=min(amp1,max(amp)/4);

    amp2=min(amp2,max(amp)/8);

    根据语音信号的实际情况对门限值进行调整,以便更好的对语音端点进行检测。

    其端点检测的流程如下所述:开始进行端点检测之前,首先为短时能量和过过零率分别确定两个门限amp1、amp2、zcr1、zcr2, 其中amp2、zcr2分别为短时能量和过零率比较低的门限,其数值比较小,对信号的变化比较敏感,很容易就会超过。另外amp1、zcr1是比较高的门限,数值比较大,信号必须达到一定的强度,该门限才可能被超过。低们限被超过未必就是语音信号的开始,有可能是时间很短的噪声引起的。高门限被超过则可以基本确信是由于语音信号引起的。

    整个语音信号的端点检测可以分为四段:静音、过度段、语音段、结束。程序中使用一个变量status来表示当前所处的状态。在静音段,如果能量或过零率超越了低门限,就应该开始标记起始点,进入过渡段。在过渡段中,由于参数的数值比较小,不能确信是否处于真正的语音段,因此只要个参数的数值都回落到低门限以下,就可以确信进入语音段落。而如果在过渡段中两个参数中的任一个超过了高门限,就可以确信进入语音段了。

    一些突发性的噪声也可以引起短时能量或过零率的数值很高,但是往往不能维持足够的长的时间,如门窗的开关、物体的碰撞等引起的噪声。这些都可以通过设定最短时间门限来判别。当前状态处于语音时,如果两个参数的值下降低到低门限以下,而且总的记时长度小于最短时间门限,则认为这是一段噪音,继续扫描以后的语音数据,否则就标记好结束端点,并返回。


    3.2.2 双门限语音端点检测实验分析

    1、实验环境及参数设置

    双门限语音端点检测是在MATLAB软件环境下进行仿真实验。文中语音信号样本是在实验室安静环境下采用麦克风进行录音,以wav格式存储为较纯净的语音样本。实验所加的噪声为伪随机加性高斯白噪声,实验中对较纯净语音样本进行加噪,形成不同SNR的带噪语音样本,然后分别对较纯净的语音样本和加噪后的语音样本进行语音端点检测,并对它们的检测结果进行比较。在语音端点检测之前首先要对被测的语音信号进行预处理等,包括分帧加窗等。文中加Hmmaing窗,通过特性为(1-0.94)的滤波器预加重。对其他参数进行设置,如设置语音帧长度,帧移长度,FFT取512,门限阀值设置等。

    2、性能准则

    在各种各样的信号处理系统中,噪声信号相对于有用信号而言,所造成的都是干扰和破坏作用,但是噪声却是普遍存在的。噪声信号一般分为加性噪声和非加性噪声加性噪声一般被分为冲激噪声、周期性噪声、宽带噪声、相同声道情况下其他语音信号的干扰噪声等等。

    (1)高斯噪声

    高斯噪声是指概率密度函数服从高斯分布的一类噪声。

    (2)信噪比

    信噪比是指信号的有用成份与噪声功率之比,称为信号噪声比,简称信噪比,常常用分贝数表示。信噪比越高表明它产生的杂音越少。

    文中采用的端点检测通过在较纯净语音信号中加入加性高斯噪声,然后对其进行语音端点检测,改变信噪比值,观察在高信噪比和低信噪比条件下双门限语音端点检测结果,通过实验仿真图比较和分析噪声对各算法语音端点检测结果的影响。

    3、分析

    基于短时能量和短时过零率的双门限语音端点检测算法是结合短时能量和过零率各自优点来进行检测,双门限端点检测图中红色竖线用来表示语音起点线,绿色竖线表示语音终点线,其检测的实验仿真图如图3.7所示:

    function snr=SNR(I,In)

    p1=1/length(I)*norm(I)^2;

    p2=1/length(I)*norm(In - I)^2;

    snr=10*log(p1/p2);

    end

    tmp1=enframe(x(l:length(x)-l),FrameLen,Framelne);

    tmp2=enframe(x(2:length(x)),FrameLen,Framelne);

    signs=(tmp1.*tmp2)<0;

    diffs=(tmp1-tmp2)>0.02;

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


    v2-b925ed0c30aac449eecc5f03eaefe23e_b.jpg


    图4 “端点检测”原始语音信号双门限语音端点检测波形图


    v2-d3acf6e44f1e1e888aefaad21867951e_b.jpg


    图5 SNR=62.7下双门限语音端点检测波形图


    v2-af792dc6560d08516c85b2a1e133f703_b.jpg


    图6 SNR=22.7下双门限语音端点检测波形图

    上图4为较纯净的原始语音信号采用双门限进行语音端点检测的仿真图,从图中检测结果可以看出第一和第四个语音段的起始点和终止点都很好,第二个语音段的终止点和第三个语音段的起始点被漏判,而且第四个语音段末尾又误判成语音信号。

    上图5为高信噪比SNR=62.7时双门限语音端点检测的仿真图,从图中检测结果可以观察其检测效果与较纯净的原始语音信号检测效果差不多。

    上图6为低信噪比条件下双门限语音端点检测的仿真图,从图中检测结果可以看出信噪比SNR=22.7时双门限检测法完全无法检测出语音信号的起始点和终止点。

    从以上仿真图4、图5和图6可以看出传统的双门限语音端点检测法在较纯净的语音信号和高信噪比(SNR=62.7)条件下其端点检测效果较之低信噪比(SNR=22.7)条件下检测效果较好。由此可见这种方法在较纯语音信号和高信噪比时,能较好检测出语音信号的端点,但是随着信噪比的下降,其检测结果率明显变差,特别是在噪声很大时,完全不能检测出语音端点,说明该检测方法容易受噪声影响,不适合用于大噪声环境检测。

    3.3 基于倒谱特征的语音端点检测

    3.3.1倒谱特征

    倒谱能很好表示语音的特征,因此在大多数语音识别系统中选择倒谱系数作为输入特征矢量。在噪声环境下短时能量与其它特征参数都不能很好地区分语音段与非语音段,因此可采用倒谱系数来作为端点检测的参数,运用倒谱特征来检测语音端点也是目前语音识别系统中比较典型的方法之一。


    3.3.2倒谱距离

    设信号s(n),其倒谱变换为c(n)。信号倒谱的一种定义是信号的能量信号倒谱的一种定义是信号能量谱密度函数。


    3.3.3基于倒谱距离的端点检测算法原理

    如何很好地提取语音信号声道特性的谱包络,并用少量参数表示出来,在语音识别、语音合成和语音编码中都是最重要的问题。按照语音产生模型的理论,语音信号是由激励信号与声道响应相卷积产生的,要想提取反映声道特性的谱包络,就必须通过解卷积去掉激励信号。由同态解卷积所导出的倒谱分析方法,只需十几个倒谱系数就能相当好地描述语音信号的声道特性,所以采用倒谱参数取代传统的时域参数作为语音端点检测的判决参量。


    信号与其倒谱是一一对应的变换,因此倒谱的均方距离可以反映两个信号(比如语音与背景噪声)谱的区别,倒谱距离可以作为端点检测的判决参数,属于相似距离范畴。

    1、倒谱系数的计算

    本文选用LPC倒谱特征,根据线性预测系数推出倒谱,利用了线性预测中声道系统函数的最小相位特性,避免了复对数中相位卷绕的繁琐处理。LPC倒谱特征求出的频谱包络能更好地重现谱的峰值,而且运算量小,在实时语音识别中采用LPC 倒谱作为特征向量较好。LPC倒谱特征取合适的阶数(8~32)后可较好地表征声道特性,但它是按实际频率尺度的倒谱系数。LPC美尔倒谱系数算法效率较高,既考虑了声道激励,又兼顾人耳听觉,理论上具有一定的可行性。

    (1)线性预测系数LPC

    通过用LPC线性预测法分析语音时得到的有关语音相邻样值间某些相关特性的参数组。线性预测分析基于如下的基本概念,即一语音样本值能用过去若干语音样值的线性组合来近似估计。按在某分析帧(短时)内实际的各语音样本与各预测得到的样本间差值的平方和最小准则,可以决定唯一的一组预测系数,即LPC(语音短时自相关系数)。

    (2)LPC倒谱

    LPC系数可用来估计语音信号的倒谱也是语音信号短时倒谱分析处理方法。线性预测分析推定的声道模型系统函数为语音信号的倒谱指的是信号能量谱密度函数

    v2-3fb2bebf8ec6352f9fba3d6fe30b167a_b.jpg

    的对数的傅立叶变换用测量倒谱距离的方法来判断每一帧信号是语音信号还是噪声信号,根据每一帧信号与噪声的倒谱距离的轨迹就可以进行语音端点检测。LPC倒谱(LPCC)由于利用了线性预测中声道系统函数的最小相位特性,避免了相位卷积,数的复杂;且LPC谱的运算量小,仅是用FFT求倒谱时运算量的一半,于实时应用。在MATLAB中采用迭代算法计算LPC参数的程序如下:

    function lpcc=lpc2lpcc(lpc)%计算LPCCMCC倒谱参数

    n_lpc=8;

    n_lpcc=12;

    lpcc1=zeros(n_lpcc,1);

    lpcc1(1)=lpc(1);

    %当n<n_lpc时,采用下述算法来计算Lpcc倒谱

    for n=2:n_lpc

    lpcc1(n)=lpc(n);

    for l=1:n-1

    lpcc1(n)=lpcc1(n)+lpc(l)*lpcc1(n-l)*(n-l)/n;

    end

    end

    lpcc1=-lpcc1;

    MC=zeros(k,m);

    for i=1:k

    MC(i,m)=lpc(m);

    for j=(m-1):-1:1

    if i==1%对于阶数为1,2要特殊处理

    MC(1,j)=lpcc1(j)+a*MC(1,j+1);

    end

    if i==2

    MC(2,j)=(1-a^2)*MC(1,j+1)+a*MC(2,j+1);

    end

    end

    end

    lpcc=MC(:,1);


    v2-0ec24dc3b11d498a7cfc5a4789b362b0_b.jpg


    图7 原始语音信号倒谱法语音端点检测波形图

    2、倒谱距离的检测算法步骤

    在倒谱距离检测的算法中,首先需计算出的每一帧的LPC系数、噪声倒谱系数估计值等,然后由每帧信号的倒谱系数和噪声倒谱系数估计值通过公计算出倒谱值,然后才能对语音信号进行端点检测,其检测算法思路如下:

    (1) 预处理。对 8Hz采样信号进行预加重处理,然后分帧加窗,帧长取30msS(240个采样点),帧移10ms,,对每一帧信号加240点hamming窗。

    (2)估计噪声倒谱系数和倒谱距离

    数p取12,抽样信号起始10帧是背景噪声,利用这10帧的前5帧倒谱系数的统计平均值作为背景嗓声倒谱系数的估计值用向量


    根据倒谱距离的计算公式,文中计算倒谱距离主要代码如下:

    for i=1:m

    s=0;

    for j=2:n

    s=s+(lpcc(i,j)-C(j)).^2;%计算倒谱距离

    end

    s=2*s+(lpcc(i,1)-C(1))^2;

    dst(i)=4.3429*sqrt(s);

    end

    dst=dst./max(dst);

    本文在进行端点检测之前,先对语音信号进行预处理即对其分帧加窗,在本文中帧长为256,帧移为128,汉明窗。然后计算出背景噪声倒谱系数的估计值、LPC系数、逐帧计算倒谱系数,最后根据倒谱距离计算出倒谱值dst(i),然后设置两个门限T1和T2,再根据个帧的倒谱值进行端点检测。

    整个语音信号的端点检测可以分为四段:静音、过度段、语音段、结束。程序中使用一个变量status来表示当前所处的状态。在静音段,如果倒谱值超越了低门限,就应该开始标记起始点,进入过渡段,并更新当前状态。在过渡段中,由于参数的数值比较小,不能确信是否处于真正的语音段,若在那帧之后若干帧以内,连续几帧都大于T1,就可以确信进入语音段落。若倒谱值连续大于T2则保持在语音段。若倒谱值回落到T2以下,而且总的记时长度小于最短时间门限,则认为这是一段噪音,继续扫描以后的语音数据,否则就标记为结束端点,并返回。



    第四章 总结


    语音信号检测是语音信号处理中非常重要的一项预处理技术,因此是语音信号处理中不可缺少的一步。本文主要围绕端点检测方法进行研究,具体所做的工作主要有以下几个方面:

    (1)介绍了语音信号处理中的一些基础处理知识,例如短时分析技术、预加重、加窗和分帧等。

    (2)对短时能量检测法、过零率检测法等进行了介绍,陈述了它们的优缺点。

    (3)运用短时能量检测法、过零率检测法进行语音信号清音浊音检测及分析

    (3)传统的双门限算法、倒谱特征的语音端点检测算法对语音信号进行端点检测。

    (4)再通过对不同信噪比情况下端的点检测结果进行实验分析。

    随着语音相关学科的发展和新兴技术的不断出现必将使得未来的语音系统逐渐智能化,而作为关键技术之一的语音信号检测也将随之不断提高。如何有效地结合多种抗噪性能好的特征参数,使其更简洁、完善、精确、高效等将是今后研究的一个重要方面。. MATLAB扩展编程[M].北京:清华大学出版社,2002

    [2] 胡航. 语音信号处理[M].哈尔滨:哈尔滨工业大学出版社,2003

    [3] 蔡莲红,黄德智,蔡锐.现代语音技术基础与应用[M].北京:清华大学出版社

    [4] 贾永红. 数字图像处理[M] 武汉:武汉大学出版社 2009

    展开全文
  • 本帖最后由 sleep168 于 2017-4-4 09:59 编辑老师,谢谢你的解答!...]我前面按照您的方法改好了,绘图采用了一个比较笨的方法,提取端点中的大值作为新的端点,提取结束点中的小值作为新的结束点进行绘图,...

    本帖最后由 sleep168 于 2017-4-4 09:59 编辑

    老师,谢谢你的解答!我使用的是书中的bluesky1.wav语音,我还是不太理解SF1和SF2的作用,以及最后一句话[这样SF1和SF2就等长............调用findSegment函数来得到。]我前面按照您的方法改好了,绘图采用了一个比较笨的方法,提取端点中的大值作为新的端点,提取结束点中的小值作为新的结束点进行绘图,但是在识别效果出现了误差。

    请问老师解释一下如何准确定位

    具体代码如下:

    [

    subplot 515; plot(time,x,'k');

    title('优化后的语音端点识别结果');

    xlabel('时间/s'); ylabel('幅值');

    vsl3=min(vsl1,vsl2);

    vsl4=max(vsl1,vsl2)

    for k=1 : min(vsl1,vsl3)                           % 标出语音端点

    nx1=voiceseg1(k).begin;

    nx2=voiceseg1(k).end;

    nx3=voiceseg2(k).begin;

    nx4=voiceseg2(k).end;

    nx5=max(nx1,nx3);

    nx6=min(nx2,nx4);

    fprintf('%4d   %4d   %4d\n',k,nx1,nx2);

    fprintf('%4d   %4d   %4d\n',k,nx3,nx4);

    subplot 515;

    line([frameTime(nx5) frameTime(nx5)],[-1 1],'color','k','LineStyle','-');

    line([frameTime(nx6) frameTime(nx6)],[-1 1],'color','r','LineStyle','--');

    end

    for k=(vsl3+1:vsl4)                           % 标出语音端点

    if vsl1>vsl2

    fprintf('%4d   %4d   %4d\n',k,nx1,nx2);

    subplot 515;

    line([frameTime(nx1) frameTime(nx1)],[-1 1],'color','k','LineStyle','-');

    line([frameTime(nx2) frameTime(nx2)],[-1 1],'color','r','LineStyle','--');

    end

    if vsl1

    fprintf('%4d   %4d   %4d\n',k,nx3,nx4);

    subplot 515;

    line([frameTime(nx3) frameTime(nx3)],[-1 1],'color','k','LineStyle','-');

    line([frameTime(nx4) frameTime(nx4)],[-1 1],'color','r','LineStyle','--');

    end

    end

    ]

    C:\Users\Bing\Desktop\untitled

    untitled.jpg

    (214.63 KB, 下载次数: 12)

    2017-4-4 09:47 上传

    442a53943febe9465fc072b4fbe10813.gif

    b2a5a3e0dcc7d508e00275fe42fce1b5.gif

    初步结果

    82ca0b4248924bf34c5f2eb0203976ff.png

    展开全文
  • 端点检测matlab程序

    2013-10-24 09:35:12
    用于语音情绪识别的matlab程序,端点检测
  • 基于MATLAB的语音端点检测的开题报告
  • 端点检测对于语音识别有着重要的意义。本程序采用双门限端点检测算法,双门限端点检测算法的基本思想是:先用短时平均能量进行初次判断,然后再在这个基础上用短时平均过零率进行再次判断。初次判断得到大致的语音段...
  • 该文档主要针对语音识别过程中语音信号的端点检测方法进行研究,主要分析了双门限算法、倒谱算法以及谱熵算法,进行了matlab编程分析,并对比算法效果。
  • 这是一个很实用的MATLAB处理语音信号端点检测的程序,在7.0版本调试通过
  • 语音识别端点检测Matlab代码

    热门讨论 2013-02-22 11:23:10
    语音识别端点检测Matlab代码。 在复杂的环境下,从信号语音信号中分辨出语音信号和非语音信号,是语音处理很重要一个环节。语音端点检测是从一段输入语音信号中确定语音的起始点和结束点。正确的端点检测可以减少不必...
  • 用于声音端点检测,该代码是matlab版的................................
  • Matlab在语音端点检测系统中的应用.pdf
  • 这是一个字函数而已,他可能还调用enframe,这个可以下载一个VOICEBOX 然后放在你的Matlab Tool目录下即可。做语音的可能会用到
  • 2009 年第 12 期 福 建 电 脑 基于 Matlab 的语音端点检测方法浅析 邢亚从 ( 苏州市职业大学江苏苏州 215000 ) 【摘 要】: 语音的端点检测在语音的编码、语音识别、语音增强、说话人识别中起着非常重要的作用,直接...

    2009 年第 12 期 福 建 电 脑 基于 Matlab 的语音端点检测方法浅析 邢亚从 ( 苏州市职业大学江苏苏州 215000 ) 【摘 要】: 语音的端点检测在语音的编码、语音识别、语音增强、说话人识别中起着非常重要的作用,直接影响着后续工作的正确率。本文介绍了端点检测的基本方法:基于短时能量的、基于短时过零率的、双门限检测的方法,,并通过 Matlab 仿真对双门限检测的方法进行分析。 【关键词】: 语音端点检测、过零率、Matlab 端点检测是语音识别中非常重要的一步。 所谓语音端点检测,就是从一段给定的语音信号中找出语音的起始点和结束点。在语音识别系统中,正确、有效的进行端点检测不仅可以减少计算量和缩短处理时间,而且能排除无声段的噪声干扰、提高语音识别的正确率。 研究表明[1],即使是在安静的环境下,语音识别系统一半以上的错误可能主要来源于端点检测。除此之外,在语音合成、编码等系统中,高效的端点检测也直接影响甚至决定着系统的主要性能。 因此,端点检测的效率、质量在语音处理系统中显得至关重要,广泛开展端点检测实现手段方面的研究,有一定的现实意义[2]。 1、短时能量法信号{x(n)}的短时能量定义为: (1) 令 h(n)=w2(n),则有: (2) 其中 h(n)是低通滤波器的单位冲激响应。 语音信号的短时平均幅度定义为: (3) En 和 Mn 都反映信号强度,但其特性有所不同。 语音和噪声的区别可以体现在它们的能量上, 语音段的能量比噪声段能量大, 语音段的能量是噪声段能量叠加语音声波能量的和。在信噪比很高时,如果环境噪声和系统输入噪声比较小,以至能够保证系统的信噪比相当高,那么只要计算输入信号的短时能量或短时平均幅度就能够把语音段和噪声背景区分开。 这是仅基于短时能量的端点检测方法。 但低信噪比情形下,此算法就将失效[3-4]。 2、短时平均过零率法 信号{x(n)}的短时平均过零率定义为[18]: (4) 一般取 (5) 信号的过零率是其频率量的一种简单度量, 窄带信号尤其如此,其中,当信号为单一正弦波时,过零率为信号频率的两倍。对于采样率为 Fs,频率为 F0 的正弦波数字信号,平均每个样本的过零率为 2F0/Fs。 过零率有两类重要的应用:第一,用于粗略地描述信号的频谱特性,就是用多带滤波器将信号分为若干个通道,对各通道进行短时平均过零率和短时能量的计算, 即可粗略地估计频谱特性。第二,用于判别清音和浊音、有话和无话。从上面提到的定义出发计算过零率容易受低频干扰, 特别是 50Hz 交流干扰的影响。 解决这个问题的办法,一个是做高通滤波器或带通滤波,减 小随机噪声的影响;另一个有效方法是对上述定义做一点修改,设一个门限 T,将过零率的含义修改为跨过正负门限,如图 1 所示。 图 1 门限过零率 于是有定义: (6) 这样计算的过零率就有一定的抗干扰能力了。 即使存在小的随机噪声,只要它不使信号越过正、负门限所构成的带,就不会产生虚假的过零率。 在语音识别前端检测时还可采用多门限过零率,进一步改善检测效果。 3、双门限检测法 语音端点检测方法可采用测试信号的短时能量或短时对数能量、联合过零率等特征参数,并采用双门限判定法来检测语音端点,即利用过零率检测清音,用短时能量检测浊音,两者配合。首先为短时能量和过零率分别确定两个门限, 一个是较低的门限数值较小,对信号的变化比较敏感,很容易超过;另一个是比较高的门限,数值较大。 低门限被超过未必是语音的开始,有可能是很短的噪声引起的, 高门限被超过并且接下来的自定义时间段内的语音

    展开全文
  • 端点检测程序

    2013-04-15 09:18:54
    matlab端点检测程序,将很多小程序整合成一个大程序,,检测效果还可以
  • 基于Matlab的语音端点检测实验研究.pdf
  • 语音端点检测matlab程序含enframe函数

    热门讨论 2012-08-13 11:31:21
    语音端点检测matlab程序 含enframe函数
  • 首先在matlab中装好voicebox工具箱,里面有一些需要用到的.m文件具体程序如下:x=readwav('D:/hao.wav');t=x;N=size(x)x=double(x);x=x/max(abs(x));%归一化y1=0;%未到语音的端点帧%amp1=10;%amp2=2;status=0;minlen...
  • 1. 频谱能量实时语音端点检测2. 使用我们的麦克风录音3. 实时绘制图中信号 演示视频: https://youtu.be/M3WSWtJ7eag 简介和M文件...
  • 今借助于Matlab这一功能强大的工具,成功地开展了语音端点检测的实验研究。首先简介端点检测涉及的几个基本概念,然后分析端点检测的基本方法,最后分别进行孤立字、孤立词的语音检测实验;重点阐述实验开展的具体...
  • 这是一个基于MATLAB编写的语音端点检测程序,用于语音信号的预处理
  • 四、备注 完整代码或者代写添加QQ 1564658423 往期回顾>>>>>> 【特征提取】基于matlab小波变换的音频水印嵌入提取【含Matlab源码 053期】 ...【语音合成】基于matlab GUI语音合成【含Matlab
  • 是一篇文献,主要是对语音段的端点检测,基于matlab的方法,大家可以参考一下。是一篇文献,主要是对语音段的端点检测,基于matlab的方法,大家可以参考一下。是一篇文献,主要是对语音段的端点检测,基于matlab的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,109
精华内容 443
关键字:

matlab端点检测

matlab 订阅