【发布时间】:2014-05-24 06:16:10
【问题描述】:
我正在编写一个应用程序来计算声音信号的 DFT(使用 FFT 算法)。 FFT 算法的输入是 PCM 样本 - 即,我有一个 16 位无符号整数的大列表。
我知道我需要使用窗口函数独立计算声音信号的几个片段的 DFT,并且我已经编写了将输入声音文件解码为原始 PCM 样本的工作代码。
我的问题是关于definition of the DFT given on Wikipedia:
DFT 应该对输入 x(0), x(1), ..., x(N-1) 执行可逆的线性变换,其中每个 x(n) 是一个复数。但是,我不明白如何将解码后的样本整数转换为适合算法的复数。
我在网上看到过一些例子,每个样本被除以得到一个[0, 1)范围内的浮点值,然后虚部设置为0。
这是否需要缩小到 [0, 1)?并将每个样本表示为x + 0i,其中x 的样本值是否正确?
【问题讨论】:
-
yes 虚部 = 0 对于所有输入值,不需要缩放到 。请注意,有许多具有不同缩放因子的 DFT 实现,因此请检查输出信号的幅度或功率并根据您的需要重新缩放(以避免溢出......)我通常使用不会改变信号幅度的归一化 DFT
-
也看这里:stackoverflow.com/a/21658139/2521214 在其中一个 cmets 中是我的 win32 声卡示波器/频谱分析仪和发生器的链接,因此您可以将结果与它进行比较...