0

このコード https://stackoverflow.com/questions/23432398/audio-recorder-in-android-process-the-audio-bytesを使用してマイクの音声をキャプチャしていますが、データを ByteArrayOutputStream に書き込んでいます。録音が終わったら、Goertzel Algorithm を使用してキャプチャされた信号をモジュール解除したいと考えています。FSK 信号は 2 つの周波数 (「1」の場合は 800Hz、「0」の場合は 400Hz) で構成され、各ビットは 100 サンプルを使用してモジュール化されます。私はこのクラスの Goertzel を使用しています: http://courses.cs.washington.edu/courses/cse477/projectwebs04sp/cse477m/code/public/Goertzel.java私は 150 のビン サイズを使用しようとしています。

これが私がやろうとしていることです: 記録を終えた後のコード:

private void stopRecording()
{
    if(recorder != null)
    {
        isRecording= false;
        recorder.stop();
        recorder.release();
        recorder = null;
        recordingThread = null;

        int BlockSize = 150;
        float HighToneFrequency = 800;
        float LowToneFrequency = 400;
        byte[] byteArrayData = ByteArrayAudioData.toByteArray();

        /*final AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
        8000, AudioFormat.CHANNEL_OUT_MONO,
        AudioFormat.ENCODING_PCM_16BIT, byteArrayData.length,
        AudioTrack.MODE_STATIC);
        audioTrack.write(byteArrayData, 0, byteArrayData.length);

        audioTrack.play();*/

        double[] daOriginalSine = convertSample2Sine(byteArrayData);

        int i = 0;

        while(i < daOriginalSine.length)
        {
             double t1 = testSpecificFrequency(i, HighToneFrequency,BlockSize, daOriginalSine);
             double t2 = testSpecificFrequency(i, LowToneFrequency,BlockSize, daOriginalSine);
             i+=BlockSize;
        }



    }

}

関数 testSpecificFrequency:

private double testSpecificFrequency(int startIndex, float ToneFreq, int BlockSize, double[] sample) 
    {
         Goertzel g = new Goertzel(RECORDER_SAMPLERATE, ToneFreq, BlockSize, false);
         g.initGoertzel();
         for(int j=startIndex ; j<startIndex+BlockSize ; j++)
         {
             g.processSample(sample[j]);
         }

         double res= Math.sqrt(g.getMagnitudeSquared());
         return res;
    }

コンストラクターに 800Hz を送信し、その後 400Hz を送信することで、結果がどうなるかを確認しようとしましたが、この時点からどのように進めればよいかわかりません =\

何か案は?

4

0 に答える 0