2013-07-23 1 views
0

Я использую код свыше https://github.com/sommukhopadhyay/FFTBasedSpectrumAnalyzer. Проблема, с которой я сталкиваюсь, - это график спектра, показывающий только низкие диапазоны.Android fft получить более высокий диапазон частот

Как изменить код, чтобы я мог видеть более полный диапазон частот?

int frequency = 8000; 
int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO; 
int audioEncoding = AudioFormat.ENCODING_PCM_16BIT; 

private class RecordAudio extends AsyncTask<Void, double[], Void> { 
    @Override 
    protected Void doInBackground(Void... params) { 

     int bufferSize = AudioRecord.getMinBufferSize(frequency, 
       channelConfiguration, audioEncoding); 
     AudioRecord audioRecord = new AudioRecord(
       MediaRecorder.AudioSource.DEFAULT, frequency, 
       channelConfiguration, audioEncoding, bufferSize); 

     short[] buffer = new short[blockSize]; 
     double[] toTransform = new double[blockSize]; 
     try{ 
      audioRecord.startRecording(); 
     } 
     catch(IllegalStateException e){ 

     } 
     while (started) { 
      int bufferReadResult = audioRecord.read(buffer, 0, blockSize); 

      for (int i = 0; i < blockSize && i < bufferReadResult; i++) { 
       toTransform[i] = (double) buffer[i]/32768.0; // signed 16 bit 
      } 

      transformer.ft(toTransform); 
      publishProgress(toTransform); 
     } 
     try{ 
      audioRecord.stop(); 
     } 
     catch(IllegalStateException e){ 

     } 

     return null; 
    } 
} 

ответ

3

Если частота дискретизации 8 кГц, то вы сможете видеть только частоты от 0 до 4 кГц. Для большего частотного диапазона вам необходимо увеличить частоту дискретизации, например. если вы установите его на 44,1 кГц, то вы увидите частоты от 0 до 22,05 кГц. Я не уверен, что частота дискретизации поддерживается на Android с конкретным устройством, но попробуйте изменить:

int frequency = 8000; 

к:

int frequency = 44100; 

 Смежные вопросы

  • Нет связанных вопросов^_^