2013-07-18 22 views
0

在我的應用中,我需要將來自麥克風的全部語音信號(採樣後)分成10ms非重疊窗口。將語音信號分成10ms非重疊窗口

我目前使用的寧窗口在我的代碼,爲了做到這一點:

public short[] HanningWindow(short[] signal_in, int pos, int size) 
    { 
for (int i = pos; i < pos + size; i++) 
{ 
    int j = i - pos; // j = index into Hann window function 
    signal_in[i] = (short) (signal_in[i] * 0.5 * (1.0 - Math.cos(2.0 * Math.PI * j/size))); 
} 
return signal_in; 
    } 

現在的問題是,,,我在哪裏可以指定我需要10ms的非重疊窗口?

+2

如果你正在使用窗口函數(例如Hanning),那麼不可能非重疊的窗口就是你所需要的...... –

+0

實際上我想實現一個信號上的Mahalanobis距離算法,這需要將整個語音信號到10毫秒 非重疊窗口,我的問題是我該如何改進我的代碼做到這一點?@ Oli Charlesworth – hana

回答

4

您只需將信號分解爲Fs * 0.01個樣本塊即可。如果您的採樣率Fs = 44.1 kHz,那麼您將處理4410個採樣的連續塊。然後,您可以將窗函數,FFT等應用到每個441個採樣塊。

+0

謝謝@Paul R ...我正在研究Mahalanobis距離算法http://citeseerx.ist .psu.edu/viewdoc/download?doi = 10.1.1.138.623&rep = rep1&type = pdf我需要先將信號分成1600個樣本,然後將整個語音信號分成10ms非重疊窗口。 HZ的採樣率,所以我應該把信號分成1600,然後把每個1600個樣本分成80個樣本? – hana

+0

是的,對於Fs = 8 kHz,您需要80個採樣10 ms。因此,您的1600個樣本塊可以分成20個非重疊窗口,每個窗口10毫秒。 –

+0

好!得到它了!多謝@保羅R – hana