MATLAB:


11

在MATLAB中,fft和/或ifft函数的输出通常需要进行额外的处理,然后再考虑进行分析。

我听过很多关于正确的观点的意见:

  • 缩放比例

    Mathworks声明fftifft函数基于以下方程式:

    X[k]=11n=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=1Nk=1NX[k]e+j2π(k1)(n1)N,where1nN
  • 按信号长度缩放

    我的同伴通常将数据缩放在处理后立即生效。 (在缩放之前,我们不考虑原始数据。)1Nfft
    fft

    %%执行
    X_f = fft(x,n_sample,1)/ n_sample; 必须通过数据中的样本数量对%fft进行归一化。 %此约定由软件开发人员(Mathworks)设置。

    它是否正确?

    1. 如果是这样,为什么MATLAB ifft函数期望我们尚未按比例缩放1/N
    2. 是否存在ifft不能自动按缩放的MATLAB 函数或函数选项?1/N

    或者,在放置是否应使用更好的约定?例如,将1 / N放在而不是,或将1 / 1/N1/Nfftifft在两个方程中都为 N,而不是1/N1/N1/N

  • 按采样周期缩放

    我听说fftand ifft函数假定采样周期,并且要使这些函数为真,以下内容需要应用:Tsampling=1/fsampling=1

X[k]=1Tsamplingn=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=TsamplingNk=1NX[k]e+j2π(k1)(n1)N,where1nN

查看链接:

  • 链接1(请参阅Seis博士对Matt Szelistowski的评论)
  • 链接2(请参见里克·罗森与塞斯博士的回答)
  • 链接3(请参见Matt的评论(消息:7/16)和Poorya的评论(14/16)
  • 链接4(请参阅第10页,幻灯片[1,1])
  • 链接5(请参阅第8 + 9页)[似乎他对fft和ifft使用了逆约定]。

这是真的?

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


2
顺便说一句,kando只是按原样说明(使用MATLAB):但我不得不说,MATLAB的此硬连线惯例加入DC到仓#1(或频率分量的振幅ķ到仓ķ+1驱动器箱他妈的Nutz的!!!!
X[k]=n=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=1Nk=1NX[k]e+j2π(k1)(n1)N,where1nN
kk+1
罗伯特·布里斯托

Answers:


6

是否将前向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必须相同。但是,对于任何典型类型的工程分析,都无法很好地直接测量能量或振幅。


当您说“如果要测量能量,则不要按缩放” ...我不需要按1 / 缩放1/N以便变换是单一的并保留能量?还是因为我需要对整个信号求平方才能获得有效产生1/N的能量?但是,如果这是真的,频谱按1/缩放的比例多少1/N1/N真的给我看吗?1/N
LCsa

另外,当说“因此,在相同的振幅下具有更多的能量”时,您是不是要说“频率”?
LCsa

7

Matlab使用的缩放惯例在DSP中很常见。您也可以使用单一DFT,其中DFT和IDFT都按比例缩放1/N1/N1

评论

必须通过数据中的样本数量对%fft进行归一化。
%此约定由软件开发人员(Mathworks)设置。

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

TT

(1)X(2πkNT)Tn=0N1x(nT)ej2πkn/N,0k<N

TNx(t)X(ω)(1)Nx(t)Tx(t)t[0,NT]。在此答案中,可以找到有关使用DFT近似连续时间傅立叶变换的更多详细信息。


2
什么是反对票?请评论。
马特·L。

1
我通常以无记名投票的方式投票,但是这次我将作例外。取决于人们对DFT所做的事情,肯定有比其他更好的约定。(但没有惯例是比别人更好的所有情况。)
罗伯特·布里斯托-约翰逊

5

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

0n<N0k<Nx[n]NX[k]N

x[n+N]=x[n] nZ
X[k+N]=X[k] kZ

x[n]X[k]

h[n]x[n]i=0N1h[i]x[ni]=i=0N1x[i]h[ni]
W[k]X[k]i=0N1W[i]X[ki]=i=0N1X[i]W[ki]

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


DFT最常见的缩放惯例:

DFT{x[n]}X[k]n=0N1x[n]ej2πkn/NiDFT{X[k]}x[n]=1Nk=0N1X[k]e+j2πkn/N

关于“时域”中的循环卷积具有简单性的优点

DFT{h[n]x[n]}=H[k]X[k]

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

iDFT{W[k]X[k]}=1Nw[n]x[n]

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

n=0N1|x[n]|2=1Nk=0N1|X[k]|2

和对偶定理:

DFT{X[n]}=Nx[k]
iDFT{x[k]}=1NX[n]

DFT的另一个常见缩放惯例:

iDFT{X[k]}x[n]k=0N1X[k]e+j2πkn/NDFT{x[n]}X[k]=1Nn=0N1x[n]ej2πkn/N

ejωknej(2πk/N)nX[k]x[n]kNA|X[k]|=|X[k]|=|X[Nk]|=A2

关于频域中的循环卷积,它也更加简单

iDFT{W[k]X[k]}=w[n]x[n]

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

DFT{h[n]x[n]}=1NH[k]X[k]

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

1Nn=0N1|x[n]|2=k=0N1|X[k]|2

和对偶定理:

DFT{X[n]}=1Nx[k]
iDFT{x[k]}=NX[n]

DFT 的单一缩放惯例在缩放方面与其逆缩放相同,并在整个变换或逆变换中保留能量:

DFT{x[n]}X[k]1Nn=0N1x[n]ej2πkn/NiDFT{X[k]}x[n]=1Nk=0N1X[k]e+j2πkn/N

时域频域中的卷积具有相同的缩放因子,可担心:

DFT{h[n]x[n]}=1NH[k]X[k]

iDFT{W[k]X[k]}=1Nw[n]x[n]

但是Parseval定理没有缩放因子需要担心。

n=0N1|x[n]|2=k=0N1|X[k]|2

对偶定理也不:

DFT{X[n]}=x[k]
iDFT{x[k]}=X[n]


在谈论DFT约定时,通常只涉及缩放因子,而不涉及没有索引问题。如果您以为那是通用的DSP约定,而您以为我是在指索引,那是一种误解。我当然提到了缩放。索引是完全不相关的,因为它与DFT 的定义无关(并且与缩放无关)。
Matt L.

当您在MATLAB中使用该max(abs(X))函数查找光谱峰的位置并且忘记1从返回的索引中减去并要对其进行数学运算时,这不是他妈的“非问题” 。这是一个问题。对此感到难过。标引原点与“ DFT的定义 ”和缩放一样重要。它与是否需要簿记有关。
罗伯特·布里斯托

可能是我,但是这次不是:)但是,尽管如此,我还是不同意您对索引的重视,但是我很欣赏那是个人的。同样,请不要犹豫,因为我感谢您投入时间进行回答。
Matt L.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.