0

我明白为什么我需要在 fft 中使用窗口函数,我记录了一个正弦波(16 位 pcm 格式),我有我想分析的正弦波音频记录,我已经将麦克风音频记录成一个字节数组,转换它返回到表示正弦波的样本数组,其值来自 [-1,1] - 值除以 32768。我是否需要在数组上应用具有值 [-1,1](除一)的窗口或我是否需要将其应用于示例数组而不将其除以 32768?我在 SO 和 google 上查找了一些答案,找不到任何关于正确方法的解释。

4

1 回答 1

1

线性时不变的特性之一是多个线性时不变系统级联的结果是相同的,无论操作的顺序如何(至少在理论上,实际上过滤器等可以具有小的非线性,这会使结果根据顺序略有不同)。

从理论的角度来看,对所有样本应用一个恒定的比例因子可以看作是这样一个线性时不变的系统。对于特定的计算机实现,缩放也可以被认为是近似线性时不变的,只要缩放不会引入显着的精度损失(例如,通过将数字缩放到浮点最小可表示值附近的值),也不会导致失真超出支持范围的缩放值。在您的情况下,简单地除以 32768 很可能不会引入明显的失真,因此可以认为是(近似)线性时不变系统。

类似地,应用一个将每个样本乘以不同的窗口值的窗口,也可以看作是另一个线性时不变系统。

确定您有这样一个级联的线性时不变系统后,您可以在应用窗口之前或之后执行 32768 的缩放。

PS:正如 Paul 在评论中提到的,如果您之后要使用浮点值,您可能希望首先执行从 16 位字到浮点的转换(无论是否缩放)。尝试在定点算术中执行缩放可能证明比必要的更复杂,并且如果不仔细执行,可能会丢失我上面提到的精度。

于 2015-03-29T22:48:03.283 回答