0

我正在使用 Libgdx 库从 Android 应用程序中的加速度计信号进行 FFT。

我需要对信号进行归一化,因为我找到了两个信号的点积,我想要它的最大值 1。

对于“归一化”,我的意思是信号的欧几里得范数为 1。(欧几里德范数是向量模拟分量乘积之和的平方根。当我找到它的值时,对于归一化信号,我将向量的所有分量除以标准值)。

点积在频谱中,所以如果我在时域对信号进行归一化,频谱表示不是欧几里得归一化,那么我将再次进行欧几里得归一化。(我已经考虑在 FFT 之后按 1/N比例因子进行归一化,我认为它可能不会影响我的问题)。

如果我在 FFT 之前和之后进行欧几里得归一化,或者我只在 FFT 之后进行,有哪些区别?

编辑 1:还考虑 Libgdx 库中的 FFT 是复杂 DFT,并且我在输入中有实信号,而不是输出信号对于 0 到 (N/2)-1 和 N/2 到 N 是对称的。我验证 Parseval 定理如果我不应用任何窗口(如 Hamming 的窗口),则已验证。那么,如果我使用 0 到 N/2-1 个信号分量,我会得到 0 到 1 之间的点积吗?

4

1 回答 1

4

嗯,似乎没有人回答这个问题。不知道为什么,但我会简短地插话。

令 f[n] 为信号,F[k] 为傅里叶变换版本(显然是离散的)。

根据Parseval 定理,我们有:

  norm(f[n]) = (1/N) norm(F[k])

其中 N 是样本数。通过傅里叶变换的齐次性,如果g[n]=af[n],则G[k] = a F[k]。

最后,将这两者结合起来,为了使 norm(F[k]) 为 1,您需要做的是除以:

 (1)      norm(F[k]) = N norm(f[n])

在时域或频域中。

类似地,如果您希望 norm(f[n]) 为 1,您需要做的就是除以:

 (2)      norm(f[n]) = (1/N) norm(F[k])

最后:

如果我在 FFT 之前和之后进行欧几里得归一化,或者我只在 FFT 之后进行,有哪些区别?

因为傅立叶变换是线性的(并且保持同质性),所以无论您在之前还是之后进行划分都没有区别。但是,如果您希望时域的范数为 1,那么您应该使用 (2) 中的常数。另一方面,要使频域范数为 1,您应该在 (1) 中使用常数。

于 2013-02-06T23:39:04.540 回答