【问题标题】:JTransform / MATLAB resultsJTransform / MATLAB 结果
【发布时间】:2012-06-24 21:35:38
【问题描述】:

我为 Android 编写了一个测试程序,我从麦克风录制音频并使用 JTransform lib 来计算 fft。 我与 matlab 进行比较,但我没有得到相同的结果。例如:

JTransform:

real: 0.035003662109375 imag: 0.036529541015625
real: 0.036712646484375 imag: 0.0355224609375
real: 0.033966064453125 imag: 0.033111572265625
real: 0.034149169921875 imag: 0.035858154296875
real: 0.036712646484375 imag: 0.0360107421875

MATLAB:

4.1469          
1.6639 + 0.6458i
5.1224 +17.1221i
-4.3110 - 1.8984i
9.3352 + 4.8483i

录音机:

DoubleFFT_1D fft1d = new DoubleFFT_1D(bufferSize / 2);
short[] sourceBuffer = new short[bufferSize];
double[] fftBuffer = new double[bufferSize];
FFT fft = new FFT();
recorder.startRecording();
isRecording.set(true);
while(isRecording.get())
{
  int read = recorder.read(sourceBuffer, 0, bufferSize);
  //Log.e(LOG_TAG, "read: " + read + " bufferSize: " + bufferSize);
  if(read != AudioRecord.ERROR_INVALID_OPERATION)
  {
    for(int i = 0; i < bufferSize && i < read; ++i)
    {
      // signed int16 to double (2^15 = 32768)
      fftBuffer[i] = (double) (sourceBuffer[i] / 32768.0);
      try
      {
        // for matlab
        soundFile.write(fftBuffer[i] + "\n");
      }
      catch (IOException e)
      {
        Log.e(LOG_TAG, e.getMessage());
      }
    }
  }
}
fft1d.realForward(fftBuffer);

related post

【问题讨论】:

    标签: java android signal-processing fft audiorecord


    【解决方案1】:

    我几乎可以肯定这是你的问题:

    // signed int16 to double (2^15 = 32768)
    fftBuffer[i] = (double) (sourceBuffer[i] / 32768.0);
    

    JTransform 确实采用双缓冲区,但据我所知,它不限于 -1/1。我用它来识别音高,从来没有像那样划分它。只需将其转换为双精度就可以了。

    不过,老实说,我最终还是使用了 libGdx 的 FFT 类,因为它对我来说基准测试速度更快。

    【讨论】:

    • 是的,你说得对,我想我应该在 [-1 , 1] 而不是 [ -32768.0, 32768.0 ] 之间缩放值
    • 只是一些东西,你知道为什么当输入数据高于采样率时,为什么 freqz 函数从 matlab 切割大小到采样率?
    • 我不确定您的意思,也从未使用过 matlab,但通常 FFT 返回一个表示频带的数组,并且您检测到的频率不能高于采样的一半速度。听起来就像描述的那样工作。
    • 谢谢你的回答,我需要提高我的理论知识(:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 2016-12-20
    • 2010-10-21
    • 2015-06-03
    相关资源
    最近更新 更多