【发布时间】:2011-04-06 19:47:37
【问题描述】:
这个问题与使用JTransform 包进行快速傅立叶变换的用户最为相关。我试图最终创建一个均衡器作为更大的实时音频项目的一部分。现在我只是尝试应用傅里叶变换,然后使用逆方法取回原始数据,然后输出该音频。我得到的是高度失真的音频。不知道有没有人有做这种事情的经验?
在对音频输入进行采样后,我在回调方法中应用转换。
public void onMarkerReached(AudioRecord recorder)
double[] input = new double[buffers[ix].length];
for(int i=0;i<input.length;i++)
{
input[i] = (double)buffers[ix][i];
}
DoubleFFT_1D ft = new DoubleFFT_1D(input.length);
ft.realForward(input);
//some filtering here
ft.realInverse(input, false);
for(int i=0;i<input.length;i++)
{
buffers[ix][i] = (short)input[i];
}
player.write(buffers[ix], 0,
buffers[ix].length);
}
}
我是否因为只保留变换的实部而丢失了部分信号?因为它只是音频数据,所以输入应该是真实的,对吧?不知道我在这里做错了什么,任何输入将不胜感激!
【问题讨论】:
-
您对实际 fft 的计算是如何工作的?您使用什么类型的算法来计算?
-
这是我正在使用的名为 JTransform 的 FFT 库的 API。 incanter.org/docs/parallelcolt/api/edu/emory/mathcs/jtransforms/…
-
我想我找到了一个可能的原因。我只是将变换应用于大约 10-30 个样本的数据集,这导致频域分辨率较低,因此当将样本变换回时域时,结果不一定与原始结果相同信号。
标签: java android real-time fft