我正在使用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之间的点积吗?
答案 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)中使用常数。