【问题标题】:Java/Android - Distorted Audio using FFT in realtimeJava/Android - 实时使用 FFT 失真音频
【发布时间】: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


【解决方案1】:

我使用 ft.realInverse(input, true); 测试了你的 sn-p;加上适当的样本量,我解决了失真问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-11
    • 2012-01-09
    • 1970-01-01
    • 2015-06-29
    • 2014-05-04
    • 2018-10-25
    • 1970-01-01
    • 2012-04-08
    相关资源
    最近更新 更多