FFT之前或之后归一化信号有哪些区别?

时间:2013-02-06 20:31:11

标签: android signal-processing fft normalization libgdx

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

我需要将信号归一化,因为我找到了两个信号的点积,我希望它的最大值为1.

规范化”是指信号的 Euclidean Norm 为1。 (欧几里德范数是矢量模拟分量乘积之和的平方根。当我找到它的值时,对于归一化信号,我将矢量的所有分量除以范数值。)

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

如果我在FFT之前和之后进行欧几里德归一化,或者仅在FFT之后进行欧几里德归一化,那么差异是什么?

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

1 个答案:

答案 0 :(得分:2)

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

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

Parseval's theorem,我们有:

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

其中N是样本数。通过傅立叶变换的同质性,如果g [n] = a f [n],则G [k] = a F [k]。

最后,结合这两个,为了使规范(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)中使用常数。