在MATLAB中,fft和/或ifft函数的输出在进行分析之前通常需要进行额外的处理。

缩放

Mathworks指出fftifft函数基于以下公式:
\ begin {align}
X [k]&= \ frac {1} {1} \ cdot \ sum_ {n = 1} ^ {N} x [n] \ cdot e ^ {\ frac {-j \ cdot 2 \ pi \ cdot(k-1)\ cdot( n-1)} {N}},\ quad \ textrm {where} \ quad 1 \ leq k \ leq N \\
x [n]&= \ frac {1} {N} \ cdot \ sum_ {k = 1} ^ {N} X [k] \ cdot e ^ {\ frac {+ j \ cdot 2 \ pi \ cdot(k-1)\ cdot(n-1)} {N}},\ quad \ textrm {where} \ quad 1 \ leq n \ leq N
\ end {align}


按信号长度缩放

我的同伴通常在处理fft之后立即按$ \ small \ frac {1} {N} $缩放数据。
(我们在缩放之前不考虑原始fft数据。)
%% Perform fft
X_f = fft(x, n_sample, 1) / n_sample; 
% fft must be normalized by the number of samples in the data.
% This convention was set by the software developer (Mathworks).


对吗?


如果是这样,为什么MATLAB ifft函数期望我们尚未按$ 1 / N $进行缩放?
是否存在不支持MATLAB ifft的函数或函数选项?会自动按$ 1 / N $缩放吗?

或者,在放置$ 1 / N $时是否有更好的约定?例如,将$ 1 / N $放置在fft中而不是ifft中,或者在两个等式中放置$ 1 / \ sqrt {N} $而不是$ 1 / N $?


按采样周期进行缩放

我听说fftifft函数假设采样周期$ T _ {\ rm采样} = 1 / f _ {\ rm采样} = 1 $,并且为了使这些函数正确,需要执行以下操作:


\开始{align}
X [k]&= \ frac {1} {T _ {\ rm采样}} \ cdot \ sum_ {n = 1} ^ {N} x [n] \ cdot e ^ {\ frac {-j \ cdot 2 \ pi \ cdot(k-1)\ cdot(n-1) } {N}},\ quad \ textrm {where} \ quad 1 \ leq k \ leq N \\
x [n]&= \ frac {T _ {\ rm采样}} {N} \ cdot \ sum_ {k = 1} ^ {N} X [k] \ cdot e ^ {\ frac {+ j \ cdot 2 \ pi \ cdot(k-1)\ cdot(n-1)} {N}},\ quad \ textrm {where} \ quad 1 \ leq n \ leq N
\ end {align}

查看链接:




链接1(请参阅Seis博士对Matt Szelistowski的评论)

链接2(请参阅Rick的回答)罗森(Rosson)与塞斯(Seis)博士的观点

链接3(见Matt(消息:7/16)评论和Poorya(14/16)发表评论


链接5(请参阅第8 + 9页)[似乎他在对fft和ifft使用逆约定]。

这是真的吗?

我很生气,因为我在维基百科上找不到任何包含采样周期的DFT或DTFT方程。

评论

顺便说一句,kando只是使用MATLAB声明了它:$$ \ begin {align} X [k]&= \ sum_ {n = 1} ^ {N} x [n] \ cdot e ^ {\ frac {-j 2 \ pi(k-1)(n-1)} {N}},\ quad \ textrm {where} \ quad 1 \ le k \ le N \\ x [n]&= \ frac {1 } {N} \ cdot \ sum_ {k = 1} ^ {N} X [k] \ cdot e ^ {\ frac {+ j 2 \ pi(k-1)(n-1)} {N}}, \ quad \ textrm {where} \ quad 1 \ le n \ le N \ end {align} $$,但是我不得不说,MATLAB的这种硬接线惯例将DC放入bin#1(或频率分量$ k的幅度) $放入垃圾箱$ k + 1 $)让我他妈的疯了!!!!

#1 楼

是否将正向FFT缩放1 / N取决于要进一步分析的结果:能量(保留Parseval的身份)或幅度(测量高度或伏特等)。

如果要测量或分析能量,则不要按1 / N进行缩放,而具有相同幅度的较长正弦波将产生较大的FFT结果,而较长的正弦则与较长的能量成比例信号。

更常见的一点是,如果要测量或分析幅度,则获得更长的正弦曲线(因此在相同的幅度下具有更多的总能量)可产生与较短的信号大致相同的FFT结果,您将需要按与长度成比例的比例按比例缩小FFT总和。该比率可以是reference_length / N,如果您选择用于进一步分析的任何维度或单位(包括时间间隔维度)的系统输入增益为1.0,则有时为1 / N。您需要按比例缩小比例,因为DFT是求和:对相似项求和的次数越多,结果就越大。

所以。能量或振幅。您想要哪个?

现在,如果按比例缩小正向FFT,则不应按比例缩小,以使IFFT(FFT(x))== x。否则反之亦然。

我认为用于缩放的1 / sqrt(N)是用于以下情况:需要某种形式上的对称性来进行证明,或者构建某种形式的硬件流水线时DFT和IDFT的算术单元/门的数量和/或数量必须相同。但是,对于任何典型类型的工程分析,都无法很好地直接测量能量或振幅。

评论


$ \ begingroup $
当您说“如果要测量能量时,不要按$ 1 / N $进行缩放” ...我不需要按$ 1 / \ sqrt N $进行缩放,以便变换是单一的,节省能量?还是因为我需要对整个信号求平方才能获得有效产生$ 1 / N $的能量?但是,如果这是真的,那么$ 1 / \ sqrt N $实际显示给我的频谱是多少?
$ \ endgroup $
– LCsa
17年8月24日在9:59



$ \ begingroup $
另外,当说“因此,在相同的振幅下具有更多的能量”时,您是说“频率”吗?
$ \ endgroup $
– LCsa
17年8月24日在10:09

#2 楼

Matlab使用的缩放惯例在DSP中很常见。您也可以使用单一DFT,其中DFT和IDFT都按$ 1 / \ sqrt {N} $的比例缩放。您还可以将DFT的系数$ 1 / N $和IDFT的系数$ 1 $使用。只要您保持一致,就没有关系(除了数值方面的考虑,尤其是在使用定点实现时)。因此,没有“更好的”约定,只有“约定”,您只需要就使用哪种约定达成共识。

评论

% fft must be normalized by the number of samples in the data.
% This convention was set by the software developer (Mathworks).


是错误的。没有人说您必须标准化FFT的结果。如果您愿意,也可以自由地这样做。

此外,FFT也不假设采样周期$ T $。请注意,DFT可以用于本质上离散的数据,而无需任何采样。根据您的数据以及对结果的处理方式,必须相应考虑$ T $。例如,如果要使用DFT(由FFT实现)来近似连续时间傅立叶变换,则会得到以下表达式:

$$ X \ left(\ frac {2 \ pi k} {NT} \ right)\ approx T \ sum_ {n = 0} ^ {N-1} x(nT)e ^ {-j2 \ pi kn / N},\ quad 0 \ le k
其中$ T $是采样周期,$ N $是DFT长度,$ x(t)$是连续时间信号,$ X(\ omega) $是其连续时间傅立叶变换。 $(1)$的右侧只是$ x $(t)$的$ N $个样本的DFT,按$ T $缩放,这里我们假设$ x(t)$的相关部分位于范围$ t \ in [0,NT] $。有关使用DFT近似连续时间傅立叶变换的更多详细信息,可以在此答案中找到。

评论


$ \ begingroup $
什么是反对票?请评论。
$ \ endgroup $
– Matt L.
16年7月6日在19:34

$ \ begingroup $
我通常以无记名投票的方式进行投票,但是这次我会例外。取决于人们对DFT所做的事情,肯定有比其他更好的约定。 (但在所有情况下,没有哪个公约比其他公约更好。)
$ \ endgroup $
–罗伯特·布里斯托-约翰逊
16年7月6日在20:22

#3 楼

特别是由于这是一个关于约定的问题,因此我不会加强MATLAB的荒谬约定,只会回答正确和适当的约定。也就是说,MATLAB的DFT索引是不正确的,但是我对这三种常见的缩放约定中的哪一个非常不可知。

我也不限制$ 0 \ le n
so
$$ x [n + N] = x [n] \ quad \ quad \ forall \ n \ in \ mathbb {Z} $$
$$ X [k + N] = X [k] \ quad \ quad \ forall \ k \ in \ mathbb {Z} $$

还可以在“时域”($ x [n] $)或“频域”( $ X [k] $)与所有约定一致地定义:

$$ h [n] \ circledast x [n] \ triangleq \ sum_ {i = 0} ^ {N-1} h [i] x [ni] = \ sum_ {i = 0} ^ {N-1} x [i] h [ni] $$
$$ W [k] \ circledast X [k] \ triangleq \ sum_ {i = 0} ^ {N-1} W [i] X [ki] = \ sum_ {i = 0} ^ {N-1} X [i] W [ki] $$

,因此一个约定优于另一个约定(假设两个约定均有效)的唯一好处就是可以简化某些定理的表达。


DFT:

$$ \ begin {align}
\ mathcal {DFT} \ {x [n] \}和\ triangleq X [k] \ triangleq \ sum_ {n = 0} ^ {N-1} x [n] \,e ^ {-j 2 \ pi kn / N} \\
\ mathcal {iDFT} \ {X [k] \}&\ triangleq x [n] = \ frac {1} {N} \ sum_ {k = 0} ^ { N-1} X [k] \,e ^ {+ j 2 \ pi kn / N} \\
\ end {align} $$

具有简化循环的优点“时域”中的卷积

$$ \ mathcal {DFT} \ {h [n] \ circledast x [n] \} = H [k] \ cdot X [k] $$

但是如果您在“频域”中卷积,则有一个比例因子需要担心:

$$ \ mathcal {iDFT} \ {W [k] \ circledast X [k] \} = \ frac {1} {N} \ cdot w [n] \ cdot x [n] $$

Parseval定理也有比例因子值得担心。

$$ \ sum_ {n = 0} ^ {N-1} \ Big | x [n] \ Big | ^ 2 = \ frac {1} {N} \ sum_ {k = 0} ^ {N-1 } \ Big | X [k] \ Big | ^ 2 $$

和对偶定理:

$$ \ mathcal {DFT} \ {X [n] \ } = N \ cdot x [-k] $$
$$ \ mathcal {iDFT} \ {x [k] \} = \ frac {1} {N} \ cdot X [-n] $$


DFT的另一种常见缩放约定:

$$ \ begin {align}
\ mathcal {iDFT} \ {X [k] \}和\ triangleq x [n] \ triangleq \ sum_ {k = 0} ^ {N-1} X [k] \,e ^ {+ j 2 \ pi kn / N} \\
\ mathcal {DFT} \ {x [n] \}和\ triangleq X [k] = \ frac {1} {N} \ sum_ {n = 0} ^ {N-1} x [n] \,e ^ {- j 2 \ pi kn / N} \\
\ end {align} $$

的优点是,从概念上讲,它与傅立叶级数稍微靠近,其中$ e ^ {j \ omega_k n} \ triangleq e ^ {j(2 \ pi k / N)n} $是四个ierier基函数和$ X [k] $是傅里叶系数。因此,如果您正在查看原始时域数据$ x [n] $,并在$ N $样本的缓冲区中看到具有$ k $个周期的正弦曲线,且振幅为(零峰值)A $ ,则表示$ \ Big | X [k] \ Big | = \ Big | X [-k] \ Big | = \ Big | X [N-k] \ Big | = \ frac {A} {2} $。

它在频域中的循环卷积方面也更加简单

$$ \ mathcal {iDFT} \ {W [ k] \ circledast X [k] \} = w [n] \ cdot x [n] $$

但是,如果您在时间中卷积,则必须担心缩放比例因子域:

$$ \ mathcal {DFT} \ {h [n] \ circledast x [n] \} = \ frac {1} {N} \ cdot H [k] \ cdot X [ k] $$

Parseval定理也有比例因子值得担心。

$$ \ frac {1} {N} \ sum_ {n = 0} ^ { N-1} \ Big | x [n] \ Big | ^ 2 = \ sum_ {k = 0} ^ {N-1} \ Big | X [k] \ Big | ^ 2 $$

和对偶定理:

$$ \ mathcal {DFT} \ {X [n] \} = \ frac {1} {N} \ cdot x [-k] $$
$$ \ mathcal {iDFT} \ {x [k] \} = N \ cdot X [-n] $$


DFT的单位缩放惯例与它的逆,并在变换或逆变换中保留能量:

$$ \ begin {align}
\ mathcal {DFT} \ {x [n] \}和\ triangleq X [k ] \ triangleq \ frac {1} {\ sqrt {N}} \ sum_ {n = 0} ^ {N-1} x [n] \,e ^ {-j 2 \ pi kn / N} \\
\ mathcal {iDFT} \ {X [k] \}和\ triangleq x [n] = \ frac {1} {\ sqrt {N}} \ sum_ {k = 0} ^ {N-1} X [ k] \,e ^ {+ j 2 \ pi kn / N} \\
\ end {align} $$

时域或频域中的卷积具有相同的比例因子担心:

$$ \ mathcal {DFT} \ {h [n] \ circledast x [n] \} = \ frac {1} {\ sqrt {N}} \ cdot H [ k] \ cdot X [k] $$

$$ \ mathcal {iDFT} \ {W [k] \ circledast X [k] \} = \ frac {1} {\ sqrt {N }} \ cdot w [n] \ cdot x [n] $$

,但是Parseval的定理没有比例因子值得担心。

$$ \ sum_ {n = 0} ^ {N-1} \ Big | x [n] \ Big | ^ 2 = \ sum_ {k = 0} ^ {N-1} \ Big | X [k] \ Big | ^ 2 $$

对偶定理也没有:

$$ \ mathcal {DFT} \ {X [n] \} = x [-k] $$
$$ \ mathcal {iDFT} \ {x [k] \} = X [-n] $$



评论


$ \ begingroup $
在谈论DFT约定时,通常只涉及缩放因子,而不涉及未发出索引的问题。如果您以为那是通用的DSP约定,而您以为我是在指索引,那是一种误解。我当然提到了缩放。索引是完全不相关的,因为它与DFT的定义无关(并且与缩放无关)。
$ \ endgroup $
– Matt L.
16年7月6日在20:04

$ \ begingroup $
当您在MATLAB中使用max(abs(X))函数查找光谱峰的位置并且忘记从返回的索引中减去1时,这不是他妈的“非问题”要做数学。这是一个问题。对此感到悲伤。索引原点与“ DFT的定义”与缩放一样重要。它与是否需要簿记有关。
$ \ endgroup $
–罗伯特·布里斯托-约翰逊
2016年7月6日20:11



$ \ begingroup $
可能是我,但这次不是:)但是,尽管如此,我还是不同意您对索引的重视,但是我很欣赏那是个人的。同样,请不要犹豫,因为我感谢您投入时间进行回答。
$ \ endgroup $
– Matt L.
16年7月6日在20:53