我一直在寻找快速和完整的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;
}
但是当我看this documentation时,我不明白eache方法的输入是什么。
复数以顺序存储为两个双精度值
我是否需要转换为Complex才能使用此库?
答案 0 :(得分:2)
DoubleFFT_1D
有方法realForward
,它采用一组实值样本(双精度数),因此您无需将输入转换为Complex。
您链接的documentation进一步描述了输入要求,具体取决于您使用realForward(double[])
还是realForward(double[], int)
。
答案 1 :(得分:1)
使用Java进行DSP操作比使用优化的库在NDK中进行操作慢得多。
Superpowered Audio SDK具有许多DSP功能,包括一个优于Apple vDSP的FFT。
特别是如果您想接收幅度和阶段。
检查SuperpoweredPolarFFT方法:http://superpowered.com/docs/_superpowered_f_f_t_8h.html#a0b63c427504bcbbd9ead8a2ff58daf62