该FFT(或快速傅立叶变换)实际上是一种算法,为的计算离散傅立叶变换或DFT。通过利用数据点的数量是一个复合整数这一事实,典型的实现方式可以实现DFT的传统计算速度的提高,因为是质数,所以这里不是这种情况。(虽然对于为素数的情况,存在FFT ,但它们使用可能在MATLAB中实现或可能未实现的不同表示形式)。实际上,许多人故意选择
的形式为或以便通过FFT加快DFT计算。101 N N 2 k 4 kN101NN2k4k
关于为什么发生镜像的问题,hotpaw2本质上已说明了原因,因此以下仅是细节的补充。将
数据点的序列的定义为序列,其中
,其中。很明显,即使是实值序列,通常也是复数值序列。但请注意,当x=(x[0],x[1],x[2],…,x[N−1])NX=(X[0],X[1],X[2],…,X[N−1])
X[m]=∑n=0N−1x[n](exp(−j2πmN))n,m=0,1,…,N−1
j=−1−−−√Xxx是一个实值序列,是一个实数。此外,如果是
偶数,则由于,我们也有
是实数。但是,无论是奇数还是偶数,实值序列的DFT都
具有您在注释中提到的
厄米对称性。对于任何
固定的,我们都有
X[0]=∑n=0N−1x[n]Nexp(−jπ)=−1NX[N2]=∑n=0N−1x[n](exp(−j2πN/2N))n=∑n=0N−1x[n](−1)n
NX米1 ≤ 米≤ ñ - 1 X [ 米]Xx m1≤m≤N−1,
因此,对于,。作为这种情况的特殊情况,请注意,如果当为偶数时选择,则会得到,从而证实了先前的结论是
X[m]X[N−m]=∑n=0N−1x[n](exp(−j2πmN))n=∑n=0N−1x[n](exp(−j2πN−mN))n=∑n=0N−1x[n](exp(−j2π+j2πmN))n=∑n=0N−1x[n](exp(j2πmN))n=(X[m])∗
1≤m≤N−1X[N−m]=(X[m])∗m=N/2NX[N/2]=(X[N/2])∗X[N/2]是一个实数。请注意,厄米对称性的影响是
所述个在一个实数值序列的DFT仓具有相同的大小作为第斌。m(N−m)
MATLABi的人员将需要对此进行翻译,以说明MATLAB数组从向上编号的事实。1
转到实际数据,你是的DC值加上
略多于一个周期的频率的正弦波的赫兹。确实,您得到的是
,其中。因此,样本的第一个和最后一个具有相同的值。因此,您要计算的DFT由
和
之间的不匹配 会导致DFT混乱:值
x11
x[n]=1+sin(2π(0.01n)), 0≤n≤100
x[0]=x[100]=1101X[m]=∑n=0100(1+sin(2π(n100)))(exp(−j2πm101))n
100101X[m]对于都是非零的,尽管很小。另一方面,假设您要调整MATLAB程序中的数组,以在处获取样本,以使
则DFT为
您会看到您的DFT
恰好是(或至少在舍入误差内),而
逆 DFT将得出,
2≤m≤99t
100t=0,0.01,0.02,…,0.99x[n]=1+sin(2π(0.01n)), 0≤n≤99.
X[m]=∑n=099(1+sin(2π(n100)))(exp(−j2πm100))n,
X=(100,−50j,0,0,…,0,50j)0≤n≤99x[n]=1100∑m=099X[m](exp(j2πn100))m=1100[100−50jexp(j2πn100)1+50j(exp(j2πn100))99]=1+12j[exp(j2πn100)−exp(j2π−n100)]=1+sin(2π(0.01n))
,这正是您的起点。