【问题标题】:FFT Size in jTransformsjTransforms 中的 FFT 大小
【发布时间】:2013-01-25 20:18:11
【问题描述】:

我需要在 Android 项目中计算音频数据的 FFT,我使用 jTransforms 来实现。

音频数据的样本长达几秒钟,并以 11025 赫兹的采样率记录。

我不确定如何在 jTransforms 中设置 FFT 的长度。 我真的不需要高频率分辨率,所以 1024 的大小就足够了。

但是根据我对 FFT 的了解,如果我减小 FFT 大小 F 并使用长度为 N > F 的样本,则只有原始样本的前 F 值会被转换。

这是真的还是我理解错了?

如果是真的,有没有一种有效的方法来转换整个信号并在之后减小 FFT-Size?

我需要它来使用支持向量机对不同的信号进行分类,而 FFT-Sizes > 1024 会给我太多的特征作为输出,所以我必须将 FFT 的结果减少到更紧凑的向量。

【问题讨论】:

    标签: size signal-processing fft resolution frequency


    【解决方案1】:

    如果您只想要 FFT 幅度结果,则对连续 1024 块长度的数据重复使用 FFT,并对所有连续幅度结果进行矢量求和,以获得整个更长信号的估计值。

    请参阅 Welch's Method 估计光谱密度,了解为什么这可能是一种有用的技术。

    【讨论】:

    • 难以置信,我的分类准确率达到了 100%!谢谢!
    【解决方案2】:

    我不熟悉jTransform库,但是你真的在计算之前设置了transform的大小吗?时域信号的幅度值和采样频率(11.025 kHz)足以计算FFT(注意FFT假设采样率恒定)

    频域分辨率将由奈奎斯特定理确定;信号中的最大可解析频率将等于采样率的一半。换句话说,以 11.025 kHz 对信号进行采样,您可以期望频率图包含 0 Hz - 5.5125 kHz 之间的频率值(和相应的幅度)。

    更新:

    如果您的输入信号较长,FFT 的分辨率(频率区间的窄度)将会增加/改善,因此如果您需要区分频率的非常小的变化,1024 个样本可能不够长。如果这对您的应用程序来说不是问题,并且您的数据的性质没有快速变化,并且您有处理时间,那么平均 3-4 次 FFT 估计将大大减少噪声并改善估计。

    【讨论】:

    • 是的。首先,我创建一个 DoubleFFT_1D 对象并在构造函数中设置 FFT 大小。然后我可以使用 .realForward(); 方法转换 double[]。我不需要那么高的频率分辨率,但转换应该覆盖整个输入,而不仅仅是前 1024 帧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多