【问题标题】:How to represent stereo audio data for FFT如何为 FFT 表示立体声音频数据
【发布时间】:2011-03-18 07:19:14
【问题描述】:

如何为 FFT 表示立体声(2 声道)音频数据?你呢

A.取两个通道的平均值,并将其分配给数字的实部,而虚部为 0。

B.将一个通道分配给实分量,将另一个通道分配给图像分量。

有理由做其中一个吗?我搜索了网络,但找不到任何明确的答案。

我正在做一些简单的频谱分析,不知道更好,使用了选项 A)。这给了我一个意想不到的结果,而选项 B)按预期进行。以下是更多细节:

我有一个钢琴“middle-C”的WAV文件。根据定义,中间 C 为 260Hz,因此我预计峰值频率为 260Hz,谐波峰值更小。我通过音频编辑软件(Sound Forge)查看频谱确认了这一点。但是当我使用选项 A) 自己进行 FFT 时,峰值为 520Hz。对于选项 B),峰值在 260Hz。

我错过了什么吗?到目前为止,我想出的解释是,使用 real 和 imag 组件表示立体声数据意味着这两个通道是独立的,我想它们不是,因此会造成混乱。

【问题讨论】:

    标签: fft


    【解决方案1】:

    我认为您没有正确计算平均值。 :-)

    C.分别处理每个通道,将幅度分配给实部,将虚部保留为 0。

    【讨论】:

    • 或者只使用实数优化的 FFT - 大多数工具包都提供一个,它可以防止混淆实部和虚部,至少对于输入;)有些甚至提供“n维”变体;将声音输入的每个通道视为一个维度。当然,您必须在之后找到 FFT 结果的平均值。
    【解决方案2】:

    选项 B 没有意义。选项 A,相当于将信号转换为单声道,是可以的(如果您对全局频谱感兴趣)。 您的问题(双频)肯定与您在使用 FFT 例程时的一些误解有关。

    【讨论】:

    【解决方案3】:

    进行 FFT 后,您需要获得复频谱的幅度。要获得幅度,请取复频谱的绝对值 |X(w)|。如果您想查看功率谱,请对幅度谱进行平方,|X(w)|^2。

    就您的频移而言,我认为这与您将虚部设置为零有关。 如果您将复频谱想象为笛卡尔空间中的一系列复矢量或位置矢量。如果您采用一个离散频率区间 X(w),则将有一个实分量表示其在实轴(x 方向)上的方向,而一个虚分量表示其在虚轴(y 方向)上的方向。这个离散频率有四个重要的值,1.实值,2.虚值,3.幅度和4.相位。如果您只取实数值并将虚数设置为 0,那么您将设置幅度 = 实数和相位 = 0 度或 90 度。因此,您已经修改了生成的频谱,并对每个频率区间应用了偏差。查看Magnitude of a vector 上的 wiki,也称为向量的欧几里得范数,以重新理解。 Leonbloy 是正确的,但我希望这能提供更多信息。

    【讨论】:

    • 我认为您对 OP 何时将虚部设置为零(即在 FFT 的输入中)感到困惑。这完全没问题,因为音频数据没有虚部,而转换后的数据有。 FFT 完成后,您当然是对的。您需要计算幅度,而不仅仅是实际部分。我认为 leonbloy 的误解更多地与频率箱的标签有关,而不是与规范有关:)
    【解决方案4】:

    将 FFT 视为从单个信号中获取信息的一种方式。您要问的是显示来自两个信号的数据的最佳方式是什么。我的答案是独立对待每个人,并为每个人显示一个 FFT。

    如果您想要真正快速的流式 FFT,您可以阅读我在此处编写的算法:www.depthcharged.us/?p=176

    【讨论】:

      猜你喜欢
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      相关资源
      最近更新 更多