語音信號是一個非穩態的、時變的信號。
短時,是指10ms-30ms,在短時分析中,將語音信號分爲一段一段地來分析其特徵參數,其中每一段稱爲一"幀",幀長一般取10~30 ms。這樣,對於整體的語音信號來講,每一幀特徵參數組成了特徵參數時間序列。
1、讀入wav數據
輸入參數wavFilename是指以.wav爲擴展名的音頻文件名稱。
輸出參數:y是數字化的音頻信號;fs是採樣頻率;nbits是每個樣點在編碼時的二進制位數(比特數)
function frameTime=frame2time(frameNum,framelen,inc,fs)
% 分幀後計算每幀對應的時間
frameTime=(((1:frameNum)-1)*inc+framelen/2)/fs;
2、分幁
產生重疊:在兩個不重疊的幀之間插一些幀來提取特徵參數,這就形成了相鄰幀之間有重疊部分,
設讀入語音文件的數據存放在y中,y長爲N,採樣頻率爲f,取每幀長爲wlen,後一幀對前一幀的位移量(簡稱爲幀移)用inc表示
輸入參數: x是語音信號;win是幀長或窗函數,若爲窗函數,幀長便取窗函數長;inc是幀移。
輸出參數:f是分幀後的數組,將爲幀數×幀長。f x L
function f=enframe(x,win,inc)
nx=length(x(:)); % 取數據長度
nwin=length(win); % 取窗長
if (nwin == 1) % 判斷窗長是否爲1,若爲1,即表示沒有設窗函數
len = win; % 是,幀長=win
else
len = nwin; % 否,幀長=窗長
end
if (nargin < 3) % 如果只有兩個參數,設幀inc=幀長
inc = len;
end
nf = fix((nx-len+inc)/inc); % 計算幀數
f=zeros(nf,len); % 初始化
indf= inc*(0:(nf-1)).'; % 設置每幀在x中的位移量位置
inds = (1:len); % 每幀數據對應1:len
f(:) = x(indf(:,ones(1,len))+inds(ones(nf,1),:)); % 對數據分幀
if (nwin > 1) % 若參數中包括窗函數,把每幀乘以窗函數
w = win(:)'; % 把win轉成行數據
f = f .* w(ones(nf,1),:); % 乘窗函數
end
常用三種窗函數
3、時域分析
能量:
應用:
平均幅度
應用:
平均過零率
短時平均過零率表示一幀語音中語音信號波形穿過橫軸(零電平)的次數
應用:
在實際計算短時平均過零率參數時,需要十分注意的一個問題是,如果輸入信號中包含漂移,即信號在通往AD轉換器前就有一個直流分量,使AD轉換後繼續帶有這個直流分量。因爲直流分量的存在影響了短時平均過零率的正確估算,所以建議在語音信號處理前先消除直
流分量。
頻域:
stft 短時傅里葉變換
function d=stftms(x,win,nfft,inc)
if length(win)==1 % 判斷有否設置窗函數
wlen=win; % 否,設幀長
win=hanning(wlen); % 設置窗函數
else
wlen=length(win); % 設幀長
end
x=x(:); win=win(:); % 把x和win都變爲列數組
s = length(x); % 計算x的長度
c = 1;
d = zeros((1+nfft/2),1+fix((s-wlen)/inc)); % 初始化輸出數組
for b = 0:inc:(s-wlen) % 設置循環
u = win.*x((b+1):(b+wlen)); % 取來一幀數據加窗
t = fft(u,nfft); % 進行傅里葉變換
d(:,c) = t(1:(1+nfft/2)); % 取1到1+nfft/2之間的譜值
c = c+1; % 改變幀數,求取下一幀
end;
短時功率譜密度
function [Pxx] = pwelch_2(x, nwind, noverlap, w_nwind, w_noverlap, nfft)
% 計算短時功率譜密度函數
% x是信號,nwind是每幀長度,noverlap是每幀重疊的樣點數
% w_nwind是每段的窗函數,或相應的段長,
% w_noverlap是每段之間的重疊的樣點數,nfft是FFT的長度
x=x(:);
inc=nwind-noverlap; % 計算幀移
X=enframe(x,nwind,inc)'; % 分幀
frameNum=size(X,2); % 計算幀數
%用pwelch函數對每幀計算功率譜密度函數
for k=1 : frameNum
Pxx(:,k)=pwelch(X(:,k),w_nwind,w_noverlap,nfft);
end