語音學習筆記1------matlab實現自相關函式法基音週期提取

塵封的記憶0發表於2016-12-12

人在發濁音時,氣流通過聲門使聲帶產生張弛振盪式振動,產生一股準週期脈衝氣流,這一氣流激勵聲道就產生濁音,又稱有聲語音,它攜帶著語音中的大部分能量。這種聲帶振動的頻率稱為基頻,相應的週期就稱為基音週期( 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(深度學習語音識別方向 


歡迎你的到來哦,看了博文給點腳印唄,謝謝啦~~



相關文章