语音学习笔记1------matlab实现自相关函数法基音周期提取

来源:互联网 发布:吐槽电影网络节目 编辑:程序博客网 时间:2024/05/01 02:20

人在发浊音时,气流通过声门使声带产生张弛振荡式振动,产生一股准周期脉冲气流,这一气流激励声道就产生浊音,又称有声语音,它携带着语音中的大部分能量。这种声带振动的频率称为基频,相应的周期就称为基音周期( Pitch) ,它由声带逐渐开启到面积最大(约占基音周期的50% ) 、逐渐关闭到完全闭合(约占基音周期的35% ) 、完全闭合(约占基音周期的15% )三部分组成。 当今主流的基音周期检测技术主要有时域的自相关法、频域的倒谱法、时频结合的小波变换分析方法以及在其基础上的衍生算法。浊音信号自相关函数在基因周期的整数倍位置上出现峰值,而清音的自相关函数没有明显峰值。因而检测是否有峰值就可以判断是清音还是浊音,检测峰值位置就可提取基音周期。

(1)自相关函数

对于离散的语音信号x(n),它的自相关函数定义为:     R(k)=Σx(n)x(n-k)

如果信号x(n))具有周期性,那么它的自相关函数也具有周期性,而且周期与信号x(n)的周期性相同。自相关函数提供了一种获取周期信号周期的方法。在周期信号周期的整数倍上,它的自相关函数可以达到最大值,因此可以不考虑起始时间,而从自相关函数的第一个最大值的位置估计出信号的基音周期,这使自相关函数成为信号基音周期估计的一种工具。

 (2)短时自相关函数

语音信号是非平稳的信号,所以对信号的处理都使用短时自相关函数。短时自相关函数是在信号的第N个样本点附近用短时窗截取一段信号,做自相关计算所得的结果                   Rm(k)=Σx(n)x(n-k)

式中,n表示窗函数是从第n点开始加入。

 function pitch

    x=wavread('E:\luyin\wkxp.wav');%读取声音文件

    figure(1);

    stem(x,'.');                   %显示声音信号的波形


疑问:(为什么横坐标是8,并且是*10的5次方;纵坐标是什么意思??)



 n=75000;                         %取17s的声音片段,即75000个样点
    for m=1:length(x)/n;           %对每一帧求短时自相关函数
        for k=1:n;
             Rm(k)=0;
             for i=(k+1):n;
                 Rm(k)=Rm(k)+x(i+(m-1)*n)*x(i-k+(m-1)*n);
             end
        end
        p=Rm(10:n);                %防止误判,去掉前边10个数值较大的点       
        [Rmax,N(m)]=max(p);        %读取第一个自相关函数的最大点
    end                            %补回前边去掉的10个点
    N=N+10;
    T=N/8;                         %算出对应的周期   
    figure(2);stem(T,'.');axis([0 length(T) 0 10]);
    xlabel('帧数(n)');ylabel('周期(ms)');title('各帧基音周期'); 



T1= medfilt1(T,5);             %去除野点
    figure(3);stem(T1,'.');axis([0 length(T1) 0 10]);
    xlabel('帧数(n)');ylabel('周期(ms)');title('各帧基音周期');



不懂的可以加我的QQ群: 522869126(深度学习语音识别方向 


欢迎你的到来哦,看了博文给点脚印呗,谢谢啦~~



1 0
原创粉丝点击