gpt4 book ai didi

algorithm - 使用 PCM 样本作为 DFT 的输入

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:18:00 24 4
gpt4 key购买 nike

我正在编写一个应用程序来计算声音信号的 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 样本值是否正确?

最佳答案

是的,您可以通过将 0 的虚部添加到每个实数值来创建复数。试试看,它会起作用的。但是,您只是将要处理的数据量增加了一倍,并且创建了大量冗余。您可以注意到输出中的冗余:正频率和负频率的结果系数将相同,除了虚部的符号不同。因此,为了提高效率和减少冗余,通常使用不同的转换将 N 实数值转换为 N/2 复数值,结果您(大致)得到 N/2 个频率。我不会在这里详细介绍,但是可以在这里找到复数 FFT 和实际输入转换的一个很好的实现:http://sourceforge.net/projects/kissfft/

关于你的最后一个问题:不。你不需要缩放你的输入。 DFT 是一种线性变换,因此缩放输入只会导致相同缩放的输出。

编辑: 顺便说一句,您确定这是您想要的复杂 DFT 吗?对于真实数据,特别是 PCM 数据,您应该考虑 Cosine Transform相反,它直接从实际输入数据映射到实际输出。

关于algorithm - 使用 PCM 样本作为 DFT 的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23841888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com