如何为FFT表示立体声(2声道)音频数据?你
一个。取两个通道的平均值并将其分配给数字的实部,并将虚部保留为0。
B中。将一个通道分配给实际组件,将另一个通道分配给imag组件。
有理由做其中一个吗?我在网上搜索但没有找到任何明确的答案。
我正在做一些简单的频谱分析,并且不知道任何更好的,使用选项A)。这给了我一个意想不到的结果,而选项B)按预期进行。以下是一些更多细节:
我有一个钢琴“中C”的WAV文件。根据定义,中C为260Hz,因此我预计峰值频率为260Hz,谐波峰值较小。我通过音频编辑软件(Sound Forge)查看频谱来证实这一点。但是当我自己选择FFT时,选项A),峰值为520Hz。选项B),峰值为260Hz。
我错过了什么吗?到目前为止我提出的解释是,使用真实和图像组件来表示立体数据意味着这两个通道是独立的,我认为它们不是,因此是混乱。
答案 0 :(得分:4)
我认为你没有正确对待平均值。 : - )
℃。分别处理每个通道,将幅度分配给实部,并将虚部保留为0。
答案 1 :(得分:2)
选项B没有意义。选项A,相当于将信号转换为单声道,是可以的(如果您对全球频谱感兴趣)。 您的问题(双频)肯定与使用FFT例程时的一些误解有关。
答案 2 :(得分:2)
进行FFT后,您需要获得复杂频谱的幅度。为了得到幅度,你取复数谱的绝对值| X(w)|。如果要查看功率谱,可以对幅度谱进行平方,| X(w)| ^ 2。
就你的频移而言,我认为它与你将虚部设置为零有关。 如果您将复杂的频谱想象为笛卡儿空间中的一系列复矢量或位置矢量。如果您采用一个离散频率仓X(w),则会有一个实数分量表示其在实轴(x方向)上的方向,而一个虚拟分量表示在虚轴(y方向)上。关于这个离散频率有四个重要的值,1。实数值,2。虚数值,3。幅度和4.相位。如果你只取实数值并将虚数设置为0,则设置Magnitude = real和phase = 0deg或90deg。因此,您已经修改了所得到的频谱,并对每个频率区域应用了偏差。看一下Magnitude of a vector上的wiki,也称为向量的欧几里德范数,以便了解你的理解。 Leonbloy是正确的,但我希望这可以提供更多信息。
答案 3 :(得分:0)
将FFT视为从单个信号中获取信息的一种方式。你问的是从两个信号显示数据的最佳方法是什么。我的答案是独立处理每个,并为每个显示FFT。
如果你想要一个非常快速的流式FFT,你可以阅读我在这里写的算法:www.depthcharged.us/?p = 176