2013-07-18 23 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