2017-03-07 7 views
0

オーディオビーコンは18khzから19khzの間で異なる周波数を生成しています。AudioTrack Apiを使用してすべての周波数を記録しようとしています。このリンクを参照しました。私はすべてのデータが0になっているハニングウィンドウ関数を適用した後です.1)どのようにハニングウィンドウを適用するには? 2)周波数をフィルタリングする方法3)さまざまな範囲の周波数のオーディオを録音し、それを.wav formateに保存します。そのオーディオファイルを読み込み、周波数に変換します。しかし、高い周波数が得られます。複数のピ​​ーク周波数を取得する方法?ハニングウィンドウ機能を適用する方法

int fftSize = 1024; 
public void startRecord() { 

    short[] bytebuff = new short[2 * fftSize]; 
    while (started) { 
     int bufferReadResult = audioRecord.read(bytebuff, 0, bytebuff.length); 
     if (bufferReadResult >= 0) { 

      fft(bytebuff); 

     } 
    } 
} 
public void fft(short[] bufferByte) { 
    int N = bufferByte.length; 
    DoubleFFT_1D fft1d = new DoubleFFT_1D(N); 
    double[] fft = new double[N * 2]; 
    double[] magnitude = new double[N/2]; 

    for (int i = 0; i < N; i++) {//Hann window function 

     bufferByte[i] = (byte) (bufferByte[i] * 0.5 * (1.0 - Math.cos(2.0 * Math.PI * i/(bufferByte.length))));//here i'm getting all data is zero. 
    } 

    for (int i = 0; i < N - 1; ++i) { 
     fft[2 * i] = bufferByte[i]; 
     fft[2 * i + 1] = 0; 
    } 

    fft1d.complexForward(fft); 
    // calculate power spectrum (magnitude) values from fft[] 
    for (int i = 0; i < (N/2) - 1; i++) { 

     double real = fft[2 * i]; 
     double imaginary = fft[2 * i + 1]; 
     magnitude[i] = Math.sqrt(real * real + imaginary * imaginary); 

    } 
    double max_magnitude = -1; 
    int max_index = -1; 
    for (int i = 0; i < (N/2) - 1; i++) { 
     if (magnitude[i] > max_magnitude) { 
      max_magnitude = magnitude[i]; 
      max_index = i; 
     } 
    } 
    int freq = max_index * 44100/N; 
    Log.e("AudioBEacon", "---" + freq); 

} 

答えて

0

あなたがここに悪いキャストがあります。それがあるべき

bufferByte[i] = (byte) (bufferByte[i] * ... 

を:それはworking.which FFTではない.But reply.iため

bufferByte[i] = (short) (bufferByte[i] * ... 
+0

おかげではなく、バイトの短期変更私はcomplexForwardまたはRealForwardを使用する必要がありますか? – Siddharthan

+0

複数のピーク周波数を取得する方法を教えてください.1秒を記録します。私のビーコンは1秒間に3つの異なる周波数を生成します(18000,18500,19000hzなど)。しかし、ピーク周波数は19000hzだけ高くなります。 – Siddharthan

+0

デバッグを行う必要があります。スペクトルの大きさをプロットして、何が起こっているのかを見てみましょう。 –

関連する問題