FFT是DFT的快速计算方法。
1.DFT是什么?
周期信号可以看做是若干sin或者cos信号叠加而成。
非周期信号可以看做是周期无穷大的周期信号。
需要注意n和k的定义域范围:(不足可以补0)
0
≤
n
≤
N
−
1
0
≤
k
≤
N
−
1
{\color{Red} 0\le n\le N-1} \\ {\color{Red} 0\le k\le N-1}
0≤n≤N−10≤k≤N−1
W N k n 可以看做对 x ( n ) 抽样, N 看做将整个单位圆均分成 N 份, n k 表示取其中的第 n k 角度 ( 份 ) 来采样,看其中的 n k 份单独拎出来看占了多少。 \begin{aligned} &W_N^{kn}可以看做对x(n)抽样,N看做将整个单位圆均分成N份,\\ &nk表示取其中的第nk角度(份)来采样,看其中的nk份单独拎出来看占了多少。 \end{aligned} WNkn可以看做对x(n)抽样,N看做将整个单位圆均分成N份,nk表示取其中的第nk角度(份)来采样,看其中的nk份单独拎出来看占了多少。
写成矩阵的形式:
[
W
N
0
∗
0
W
N
1
∗
0
⋮
W
N
(
N
−
2
)
∗
0
W
N
(
N
−
1
)
∗
0
W
N
0
∗
1
W
N
1
∗
1
⋮
W
N
(
N
−
2
)
∗
1
W
N
(
N
−
1
)
∗
1
⋯
⋯
⋯
⋯
W
N
0
∗
(
N
−
2
)
W
N
1
∗
(
N
−
2
)
⋮
W
N
(
N
−
2
)
∗
(
N
−
2
)
W
N
(
N
−
1
)
∗
(
N
−
2
)
W
N
0
∗
(
N
−
1
)
W
N
1
∗
(
N
−
1
)
⋮
W
N
(
N
−
2
)
∗
(
N
−
1
)
W
N
(
N
−
1
)
∗
(
N
−
1
)
]
[
x
(
0
)
x
(
1
)
⋯
x
(
N
−
2
)
x
(
N
−
1
)
]
=
[
X
(
0
)
X
(
1
)
⋯
X
(
N
−
2
)
X
(
N
−
1
)
]
\begin{bmatrix} &W_N^{0*0} &W_N^{1*0} &\vdots &W_N^{(N-2)*0} &W_N^{(N-1)*0} \\ &W_N^{0*1} &W_N^{1*1} &\vdots &W_N^{(N-2)*1} &W_N^{(N-1)*1} \\ &\cdots &\cdots & &\cdots &\cdots \\ &W_N^{0*(N-2)} &W_N^{1*(N-2)} &\vdots &W_N^{(N-2)*(N-2)} &W_N^{(N-1)*(N-2)} \\ &W_N^{0*(N-1)} &W_N^{1*(N-1)} &\vdots &W_N^{(N-2)*(N-1)} &W_N^{(N-1)*(N-1)} \\ \end{bmatrix} \begin{bmatrix} &x(0) \\ &x(1) \\ &\cdots \\ &x(N-2) \\ &x(N-1) \\ \end{bmatrix} =\begin{bmatrix} &X(0) \\ &X(1) \\ &\cdots \\ &X(N-2) \\ &X(N-1) \\ \end{bmatrix}
WN0∗0WN0∗1⋯WN0∗(N−2)WN0∗(N−1)WN1∗0WN1∗1⋯WN1∗(N−2)WN1∗(N−1)⋮⋮⋮⋮WN(N−2)∗0WN(N−2)∗1⋯WN(N−2)∗(N−2)WN(N−2)∗(N−1)WN(N−1)∗0WN(N−1)∗1⋯WN(N−1)∗(N−2)WN(N−1)∗(N−1)
x(0)x(1)⋯x(N−2)x(N−1)
=
X(0)X(1)⋯X(N−2)X(N−1)
2.FFT是什么?
FFT是DFT的快速计算方法。
f(t)经过FFT后变为f(w),时域函数变成频域函数,f(w)中的实数表示是cos,虚数表示sin,模表示频点幅值,相位可用于从模解出cos和sin,相位的意义就是该模乘以这个相位角的余弦值就得到了该频率下的余弦信号的振幅;
2. 旋转因子的性质
旋转因子 : W N k n = e − j 2 π n k / N W N 0 = W N N = 1 旋转因子 W N k n 的对称性 : W N k n + N / 2 = − W N k n 旋转因子 W N k n 的周期性 : W N k n + N = W N k n 旋转因子 W N k n 的可约性 : W N 2 k n = W N / 2 k n \begin{aligned} &旋转因子:W_N^{kn} = e^{-j2\pi nk/N}\\ &W_{N}^{0} =W_{N}^{N} = 1\\ &旋转因子W_N^{kn}的对称性:W_N^{kn+N/2} = -W_N^{kn}\\ &旋转因子W_N^{kn}的周期性:W_N^{kn+N} = W_N^{kn}\\ &旋转因子W_N^{kn}的可约性:W_N^{2kn} = W_{N/2}^{kn}\\ \end{aligned} 旋转因子:WNkn=e−j2πnk/NWN0=WNN=1旋转因子WNkn的对称性:WNkn+N/2=−WNkn旋转因子WNkn的周期性:WNkn+N=WNkn旋转因子WNkn的可约性:WN2kn=WN/2kn
5. 通用公式
偶序列 X 1 ( k ) = ∑ n = 0 ( N / 2 − 1 ) x ( 2 n ) W N / 2 k n 奇序列 X 2 ( k ) = ∑ n = 0 ( N / 2 − 1 ) x ( 2 n + 1 ) W N / 2 k n F F T 时域抽取 X ( k ) = X 1 ( k ) + W N k X 2 ( k ) ( 0 ≤ k ≤ N / 2 − 1 ) X ( k + N / 2 ) = X 1 ( k ) − W N k X 2 ( k ) ( 0 ≤ k ≤ N / 2 − 1 ) 注意 : 两点 F F T N = 2 x ( 0 ) 、 x ( 1 ) X 1 ( 0 ) = x ( 0 ) W 1 0 = x ( 0 ) X 2 ( 0 ) = x ( 1 ) W 1 0 = x ( 1 ) X ( 0 ) = X 1 ( 0 ) + W 2 0 X 2 ( 0 ) X ( 1 ) = X 1 ( 0 ) − W 2 0 X 2 ( 0 ) 两点的对应关系: X 1 ( k ) 与 X 1 ( k + N / 2 ) 进行蝶形运算, X 1 ( k + N / 2 ) 乘上的系数是 W N k \begin{aligned} &偶序列X_1(k) = \sum_{n=0}^{(N/2-1)} x(2n)W_{N/2}^{kn}\\ &奇序列X_2(k) = \sum_{n=0}^{(N/2-1)} x(2n+1)W_{N/2}^{kn}\\ & \\ &FFT时域抽取\\ &X(k) = X_1(k) + W_{N}^{k}X_2(k) \qquad \qquad (0\leq k \leq N/2-1)\\ &X(k+N/2) = X_1(k) - W_{N}^{k}X_2(k) \quad (0\leq k \leq N/2-1)\\ \\ \\ &注意 :\\ &两点FFT \qquad N=2\\ &x(0)、x(1)\\ &X_1(0)= x(0)W_{1}^{0}=x(0)\\ &X_2(0)= x(1)W_{1}^{0}=x(1)\\ &X(0)=X_1(0) + W_{2}^{0}X_2(0)\\ &X(1)=X_1(0) - W_{2}^{0}X_2(0)\\ &两点的对应关系:\\ &X_1(k)与X_1(k+N/2)进行蝶形运算,X_1(k+N/2)乘上的系数是W_N^k \end{aligned} 偶序列X1(k)=n=0∑(N/2−1)x(2n)WN/2kn奇序列X2(k)=n=0∑(N/2−1)x(2n+1)WN/2knFFT时域抽取X(k)=X1(k)+WNkX2(k)(0≤k≤N/2−1)X(k+N/2)=X1(k)−WNkX2(k)(0≤k≤N/2−1)注意:两点FFTN=2x(0)、x(1)X1(0)=x(0)W10=x(0)X2(0)=x(1)W10=x(1)X(0)=X1(0)+W20X2(0)X(1)=X1(0)−W20X2(0)两点的对应关系:X1(k)与X1(k+N/2)进行蝶形运算,X1(k+N/2)乘上的系数是WNk
6. 如何得到对应的数据对?
交换二进制的bit顺序,[7:0]---->[0:7]
将顺序码对应的二进制去倒位序,就使对应的数据相邻。
实现
x(n)将采样后的原始数据按照非自然顺序(反序)排,这样输出结果不用调整顺序。
W旋转因子按照自然顺序排.
q从0开始