2012-07-22 29 views
1
public short[] HanningWindow(short[] signal_in ,int pos ,int size) 
{ 
    for (int i= pos; i < pos+size; i++) 
    { 
     signal_in[i] = (short) ((signal_in[i]) * (0.5 * (1-Math.cos((2 * Math.PI * i)/ (size - 1))))) ; 
    } 
    return signal_in; 
} 

我想用它在漢寧(馮漢寧)窗口

pos = (ring+delay*frame_rate*frame_size)%(frame_size*(frame_rate+1)); 
num = record.read(lin,pos,frame_size);   

GGSpecSub tempSpecSub = new GGSpecSub(); 
lin = tempSpecSub.HanningWindow(lin, pos, frame_size); 

這是使用實時DSP我的第一次 - 請告訴我,如果這是應用漢寧窗的正確方法到信號?

回答

3

不,它需要更多的這樣的:

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; 
} 
+0

pos是其中Android是使用AudioRecord.read()函數讀取的位置。我在這裏做的是給出整個signal_in.length,它是11776,只讀取512個樣本。爲什麼我必須做int j = i - pos? – 2012-07-22 15:15:39

+0

'j'需要從'0'到'size-1'的值,以便餘弦函數操作範圍'[0..2π]'。 – 2012-07-22 19:08:25

+0

是不是我的代碼在那裏的「我」是什麼? – 2012-07-22 19:49:22