短時時域分析
語音信號的時域分析就是分析和提取語音信號的時域參數。進行語音分析時,最先接觸到並且也是最直觀的是它的時域波形。語音信號本身就是時域信號,因而時域分析是最早使用,也是應用最廣泛的一種分析方法,這種方法直接利用語音信號的時域波形。時域分析通常用於最基本的參數分析及應用,如語音的分割、預處理、大分類等。這種分析方法的特點是:①表示語音信號比較直觀、物理意義明確。②實現起來比較簡單、運算量少。③可以得到語音的一些重要的參數。④只使用示波器等通用設備,使用較爲簡單等。
[外鏈圖片轉存失敗(img-gfkOoSTu-1565843269803)(C:\Users\ADMINI~1\AppData\Local\Temp\1565835661004.png)]
[外鏈圖片轉存失敗(img-QJV1TFmg-1565843269804)(C:\Users\ADMINI~1\AppData\Local\Temp\1565835677436.png)]
在醫學上,利用超聲波的巨大能量還可以把人體內的結石擊碎
(聲音即是能量)
短時能量
由於語音信號的能量隨時間而變化,清音和濁音之間的能量差別相當顯著,因此對短時能量和短時平均幅度進行分析,可以描述語音的這種特徵變換情況。設第n幀語音信號xn(m)的短時能量用En表示,
[外鏈圖片轉存失敗(img-TdlooDG4-1565843269808)(C:\Users\ADMINI~1\AppData\Local\Temp\1565836462569.png)]
短時平均能量用途:
(1) 可以作爲區分清音和濁音的特徵參數;
(2) 在信噪比比較高的情況下,短時能量可以作爲區分有聲和無聲的依據;
(3) 可以作爲輔助的特徵參數用於語音識別中。
%author: qyq
%計算短時能量函數
function para=STEn(x,win,inc)
%para 短時能量 1*幀數 每一幀的短時能量
%x 信號 win 幀長 inc 幀移
X=enframe(x,win,inc)'; % 分幀
fn=size(X,2); % 求出幀數
for i=1 : fn
u=X(:,i); % 取出一幀
u2=u.*u; % 求出能量
para(i)=sum(u2); % 對一幀累加求和
end
end
[外鏈圖片轉存失敗(img-CAMuJqC2-1565843269815)(C:\Users\ADMINI~1\AppData\Local\Temp\1565835697678.png)]
(對高電平敏感,後提出)
短時平均幅度
En是一個度量語音信號幅度值變化的函數,但它有一個缺陷,即它對高電平非常敏感(因爲它計算時用的是信號的平方)。爲此,可採用另一個度量語音信號幅度值變化的函數,即短時平均幅度函數Mn,它定義爲:
[外鏈圖片轉存失敗(img-qzTPRH97-1565843269817)(C:\Users\ADMINI~1\AppData\Local\Temp\1565837072726.png)]
%短時平均幅度計算函數
function para=STMn(x,win,inc)
X=enframe(x,win,inc)'; % 分幀
fn=size(X,2); % 求出幀數
for i=1 : fn
u=X(:,i); % 取出一幀
para(i)=sum(abs(u)); % 對一幀累加求和
end
end
[外鏈圖片轉存失敗(img-WSkHUkhm-1565843269819)(C:\Users\ADMINI~1\AppData\Local\Temp\1565837150124.png)]
短時過零率
短時過零率表示一幀語音中語音信號波形穿過橫軸(零電平)的次數。對於連續語音信號,過零即意味着時域波形穿過時間軸,對於離散信號,如果相鄰的取樣值改變符號則稱爲過零。因此,過零率就是樣本改變符號的次數。
編程思想
[外鏈圖片轉存失敗(img-AlkoqCbC-1565843269820)(C:\Users\ADMINI~1\AppData\Local\Temp\1565837750161.png)]
%短時過零率計算函數
function para=STZcr(x,win,inc)
% para 1*幀數 x 信號 win 幀長/窗函數 inc 幀移
X=enframe(x,win,inc)'; % 分幀 轉置
fn=size(X,2); % 求出幀數
aa=length(win); % 求出幀長
%加了判斷 ,如果是窗函數 例如hanning(win) 進來的話 length()就是幀長
%如果是數值的話 就直接是wlen
if aa==1
wlen=win;
else
wlen=length(win);
end
para=zeros(1,fn); % 初始化
for i=1:fn
z=X(:,i); % 取得一幀數據
for j=1: (wlen- 1) ; % 在一幀內尋找過零點
if z(j)* z(j+1)< 0 % 判斷是否爲過零點
para(i)=para(i)+1; % 是過零點,記錄1次
end
end
end
end
[外鏈圖片轉存失敗(img-jATokx2F-1565843269824)(C:\Users\ADMINI~1\AppData\Local\Temp\1565835810301.png)]
短時自相關
相關分析是一種常用的時域波形分析方法,並有自相關和互相關之分。這裏主要討論自相關函數。自相關函數具有一些性質,如它是偶函數;假設序列具有週期性,則其自相關函數也是同週期的周期函數等。我們可以把自相關函數的這些性質應用於語音信號的時域分析中。例如,對濁音語音可以用自相關函數求出語音波形序列的基音週期。此外,在進行語信號的線性預測分析時,也要用到自相關函數。和其他語音參數一樣,在語音信號分析中,我們分析的是短時自相關函數。
自相關函數是描述隨機信號x(t)在任意兩個不同時刻t1,t2的取值之間的相關程度。
[外鏈圖片轉存失敗(img-f4dMOqRw-1565843269827)(C:\Users\ADMINI~1\AppData\Local\Temp\1565836679547.png)]
自相關函數具有一些性質,如它是偶函數;假設序列具有週期性,則其自相關函數也是同週期的周期函數等。我們可以把自相關函數的這些性質應用於語音信號的時域分析中。例如,對濁音語音可以用自相關函數求出語音波形序列的基音週期
% author: qyq
%短時自相關函數
function para=STAc(X)
%para 幀數*一幀短時自相關數(2*幀長-1)
%X 幀數*幀長 分幀後的信號 X需要轉置
para=zeros(size(X)); %產生一個和X一樣的零矩陣
fn=size(X,2); % 求出幀數
wlen=size(X,1); %求幀長
for i=1 : fn
u=X(:,i); % 取出一幀
R=xcorr(u); %短時自相關計算
para(:,i)=R(wlen:end); %只取k爲正值的自相關函數
end
end
[外鏈圖片轉存失敗(img-v28banpo-1565843269829)(C:\Users\ADMINI~1\AppData\Local\Temp\1565835829136.png)]
短時平均幅度差
短時自相關函數是語音信號時域分析的重要參量。但是,計算自相關函數的運算量很大,其原因是乘法運算所需要的時間較長。利用快速傅里葉變換(FFT)等簡化計算方法都無法避免乘法運算。爲了避免乘法,一個簡單的方法就是利用差值。爲此常常採用另一種與自相關函數有類似作用的參量,即短時平均幅度差函數(AMDF)
[外鏈圖片轉存失敗(img-tB4RU7JM-1565843269830)(C:\Users\ADMINI~1\AppData\Local\Temp\1565836744302.png)]
平均幅度差函數能夠代替自相關函數進行語音分析,是基於這樣一個事實:如果信號是完全的週期信號(設週期爲Np),則相距爲週期的整數倍的樣點上的幅值是相等的,差值爲零
對於實際的語音信號,d(n)雖不爲零,但其值很小。這些極小值將出現在整數倍週期的位置上。
% author: qyq
%短時平均幅度差函數
%和短時自相關類似 這裏是+
function para=STAmdf(X)
% X 分幀過後的信號 para
para=zeros(size(X));
fn=size(X,2); % 求出幀數
wlen=size(X,1);
for i=1 : fn
u=X(:,i); % 取出一幀
for k=1:wlen
ppp=u(k:end);
yyy=u(1:end-k+1);
rrr=sum(abs(ppp-yyy));
para(k,i)=rrr;
%para(:,k)=sum(abs(u(k,end)-u(1,end-k+1))); %求每個樣本點的幅度差
end
end
end
[外鏈圖片轉存失敗(img-y83ngREJ-1565843269831)(C:\Users\ADMINI~1\AppData\Local\Temp\1565835841867.png)]
xcorr
自相關和互相關:他們分別表示的是兩個時間序列之間和同一個時間序列在任意兩個不同時刻的取值之間的相關程度,即互相關函數是描述隨機信號x(t),y(t)在任意兩個不同時刻t1,t2的取值之間的相關程度,自相關函數是描述隨機信號x(t)在任意兩個不同時刻t1,t2的取值之間的相關程度。
[外鏈圖片轉存失敗(img-FE3MiwhK-1565843269832)(C:\Users\ADMINI~1\AppData\Local\Temp\1565836685004.png)]
[外鏈圖片轉存失敗(img-pl0dWvKG-1565843269833)(C:\Users\ADMINI~1\AppData\Local\Temp\1565836811409.png)]
FFT的方法求自相關函數
(1) 信號x(n)用FFT計算X(k)
(2) R(k)=X*(k)X(k)
(3) 對R(k)作IFFT,得到r(n)
clc;
clear;
close;
x=[1 2 3];
dd=xcorr(x);
disp(dd);
%----------------------------------------------------%
k=length(x);
xk=fft(x,2*k);
%bbb=conj(xk);%共軛複數
rm=real(ifft(conj(xk).*xk));%求了互功率譜,再反變換就是互相關係數
rm=ifftshift(rm);
rm=rm(2:end);
disp(rm);
[外鏈圖片轉存失敗(img-w2BH3IGI-1565843269833)(C:\Users\ADMINI~1\AppData\Local\Temp\1565836778364.png)]