【发布时间】:2014-06-23 15:09:25
【问题描述】:
我想对 AudioRecorder 录制并保存到 wav 文件的信号应用 FFT。我使用的 FFT 有一个 Complex[] 输入参数。我很困惑,从字节转换为复数除以 32768 和只在虚部加 0 并将实部作为字节进行转换有区别吗?
编辑:
public Complex[] convertToComplex(byte[] file)
{
int size= file.length;
double[]x=new double[size];
Complex[]data= new Complex[size];
for(int i=0;i<size;i++)
{
x[i]=file[i]/32768.0;
data[i]=new Complex(x[i],0);
// Log.d("tag", "indice"+i+":"+data[i]);
}
return data;
}
【问题讨论】:
-
只是为了确认您的音频是 16 位 PCM 对吗?如果是这样,那么不幸的是你的转换是错误的,看看我是如何在我的代码中进行转换的。
-
是的,它是 16 位 PCM。我不明白你为什么使用short。
-
myAudioSamples 的长度是 1/2 myAudioBytes?
-
是的,myAudioSamples 的长度是 1/2 myAudioBytes。我使用“short”是因为它正好有 16 位,您也可以使用双精度(64 位)或浮点型(32 位),因为您的样本仍然适合在。