FFT 图怎么可能不对称?

信息处理 fft Python
2022-02-12 21:45:02

从互联网上的讨论中,我了解到在 512 个样本点 fft 中,只要我的信号是真实的,只有前 256 个包含相关信息。另一半包含前半部分的复共轭。我的问题基于堆栈交换上讨论。

我正在尝试绘制 wav 文件的 fft。我使用了 2 个文件 - 一个包含一些音乐的 wav 文件和另一个由脚本生成的以 440Hz 播放的文件。第二个(440hz 信号)的 fft 图显示了 2 个峰值 - 一个在 440hz,另一个在图的另一端。这是意料之中的。但是,音乐 wav 文件的情节是不对称的。怎么可能? 不对称图

我使用了文件 onclassical_demo_elysium_anonymous-elysium_the-young-false-man_small-version_live-and_restored found hereScipy 没有先正确解析它,我不得不使用 audacity 剥离元标记,然后才能让它工作。

我使用了 print 并且得到了 440hz 音调:

[ 203395.00000000  +0.j          203395.08226712 -57.78564066j
203395.32901382-115.57039787j ...,  203395.74007235+173.35334037j
203395.32901385+115.57039784j  203395.08226713 +57.78564063j]

对于音乐文件,我得到了这个:

[[ 2.+0.j -4.+0.j]
[-1.+0.j -7.+0.j]
[ 0.+0.j -2.+0.j]
..., 
[ 0.+0.j -6.+0.j]
[ 0.+0.j -2.+0.j]
[ 1.+0.j -1.+0.j]]

我认为它们中的任何一个都不是对称的!或者第一个和最后一个值至少应该在实数部分重合,对吗?

只是为了它,440hz信号图:

440hz 信号图

我尝试绘制 abs(fft) - 仍然不对称。此外,为什么情节同时具有蓝色和绿色 - 真实和复杂的部分?

2个回答

使用wav您链接到的文件版本,我在 matlab 中执行了 fft 并得到:

前 3 个术语:

 left channel       right channel
-1.1594 + 0.0000i  -1.8450 + 0.0000i
-0.4186 - 1.0013i  -0.2851 - 1.7655i
 0.5507 - 0.7589i   1.0478 - 0.4655i

最后 3 个术语:

 left channel       right channel
 0.7388 - 0.3032i   0.4740 - 0.6654i
 0.5507 + 0.7589i   1.0478 + 0.4655i
-0.4186 + 1.0013i  -0.2851 + 1.7655i

看起来共轭对称

我想知道您是否同时处理左右通道,它认为它是二维信号还是复值信号。

获得不对称 fft 结果的唯一方法是信号是否复杂。

严格实数输入的 FFT 结果围绕第一个 bin(bin 0)循环共轭对称。因此,最后一个 bin 的复共轭应该等于第二个 bin(bin 1),而不是第一个 bin。