我正在寻找快速和完整的DSP java库来使用android音频操作。我有一个问题,FFT是高度计算。然后我找到了JTransforms。我在任何地方都找不到关于如何使用它的文档。具体来说,我对输入信号感到困惑。在我的例子中,我有一个wav文件,转换为字节数组,然后转换为双数组,使用如下:
public static double[] read(byte[]file) {
byte[] data = new byte[file.length];
int N = data.length;
double[] d = new double[N/2];
for (int i = 0; i < N/2; i++) {
d[i] = ((short) (((data[2*i+1] & 0xFF) << 8) + (data[2*i] & 0xFF))) / ((double) MAX_16_BIT);
}
return d;
}
但是当我看这份文件时,我不明白每个eache方法的输入是什么。
复数按顺序存储为两个双值。
为了使用这个库,我需要转换为复合库吗?
发布于 2014-06-24 05:41:36
DoubleFFT_1D
有realForward
方法,它接受一个实值样本数组(双值),所以您不需要将输入转换为复杂的。
您所链接的文档进一步描述了不同的输入需求,这取决于您是使用realForward(double[])
还是realForward(double[], int)
。
发布于 2014-08-06 09:58:58
在Java中执行DSP比在NDK中使用经过良好优化的库要慢得多。
超级动力的Audio有很多DSP功能,包括一个比苹果的vDSP更好的快速傅立叶变换。
特别是如果你想接收震级和相位。
检查SuperpoweredPolarFFT方法:8h.html#a0b63c427504bcbbd9ead8a2ff58daf62
https://stackoverflow.com/questions/24385795
复制相似问题