毫米波雷达基础知识系列——FFT

毫米波雷达基础知识系列——FFT及DSP优化实现

FFT来源

FFT来源于DFT离散傅里叶变换,DFT的计算公式为:
X ( k ) = ∑ n = 0 N − 1 x ( n ) W N k n X(k) = \sum_{n=0}^{N-1} x(n)W_{N}^{kn} X(k)=n=0N1x(n)WNkn
为什么不直接用DFT计算,而要用FFT的原因在于根据上面的公式计算量会很大。
我们以N等于5为例实际计算一下:
X ( 0 ) = x ( 0 ) × W 5 0 + x ( 1 ) × W 5 0 + x ( 2 ) × W 5 0 + x ( 3 ) × W 5 0 + x ( 4 ) × W 5 0 X ( 1 ) = x ( 0 ) × W 5 0 + x ( 1 ) × W 5 1 + x ( 2 ) × W 5 2 + x ( 3 ) × W 5 3 + x ( 4 ) × W 5 4 . . . \begin{array}{c} X(0) = x(0) \times W_{5}^{0} + x(1) \times W_{5}^{0}+x(2) \times W_{5}^{0}+x(3) \times W_{5}^{0}+x(4) \times W_{5}^{0}\\ X(1) = x(0) \times W_{5}^{0} + x(1) \times W_{5}^{1}+x(2) \times W_{5}^{2}+x(3) \times W_{5}^{3}+x(4) \times W_{5}^{4}\\ ... \end{array} X(0)=x(0)×W50+x(1)×W50+x(2)×W50+x(3)×W50+x(4)×W50X(1)=x(0)×W50+x(1)×W51+x(2)×W52+x(3)×W53+x(4)×W54...
可以看出来,每算一个X(k)就要计算5次乘法和4次加法,对于计算机来说,乘法运算要比加法运算耗时且更耗资源。也就是说,根据DFT完成一次完整的运算要进行N的2次方次乘法运算,N越大,计算就越困难。FFT能够明显降低运算次数,因此工程中不使用DFT,而用FFT进行计算。

FFT为什么快

FFT利用了旋转因子的周期性和特殊性,避免了一些不必要的运算,因此FFT执行起来比较快。旋转因子
W N k n = e − j ( 2 π / N ) k n  是旋转因子  W_{N}^{k n}=e^{-j(2 \pi / N) k n} \text { 是旋转因子 } WNkn=ej(2π/N)kn 是旋转因子 

FFT的种类

常规的FFT按基分类可以分为基2-FFT、基4-FFT、混合基FFT。一般来讲,基2FFT适用于采样序列的个数是2的N次方的情况,同理基4FFT适用于采样序列的个数是4的N次方的情况,基4FFT的速度要比基2FFT更快。混合基FFT是先用基4FFT处理前4的N次方个数据在处理后面2的N次方的数据。

基2FFT推导

基 2 FFT 算法利用了旋转因子的以下周期性特性。
W N 0 = e − j ( 2 π / N ) 0 = e − j ( 0 ) = cos ⁡ ( 0 ) + j sin ⁡ ( 0 ) = 1 W N k N / 2 = e − j ( 2 π / N ) k N / 2 = e − j ( π k ) = ( cos ⁡ ( − π ) + j sin ⁡ ( − π ) ) k = ( − 1 ) k W N 2 k n = e − j ( 2 π / N ) 2 k n = e − j ( 2 π / ( N / 2 ) ) k n = W N / 2 k n \begin{array}{l} W_{N}^{0}=e^{-j(2 \pi / N) 0}=e^{-j(0)}=\cos (0)+j \sin (0)=1 \\ W_{N}^{k N / 2}=e^{-j(2 \pi / N) k N / 2}=e^{-j(\pi k)}=(\cos (-\pi)+j \sin (-\pi))^{k}=(-1)^{k} \\ W_{N}^{2 k n}=e^{-j(2 \pi / N) 2 k n}=e^{-j(2 \pi /(N / 2)) k n}=W_{N / 2}^{k n} \end{array} WN0=ej(2π/N)0=ej(0)=cos(0)+jsin(0)=1WNkN/2=ej(2π/N)kN/2=ej(πk)=(cos(π)+jsin(π))k=(1)kWN2kn=ej(2π/N)2kn=ej(2π/(N/2))kn=WN/2kn
利用这些特性,可以把 N 点 DFT 分解为以下两个 N/2 点 DFT
X ( k ) = ∑ n = 0 N − 1 x ( n ) W N n k = ∑ n = 0 N / 2 − 1 x ( n ) W N n k + ∑ n = N / 2 N − 1 x ( n ) W N n k = ∑ n = 0 N / 2 − 1 [ x ( n ) W N n k + x ( n + N / 2 ) W N ( n + N / 2 ) k ] = ∑ n = 0 N / 2 − 1 [ x ( n ) W N n k + x ( n + N / 2 ) W N k N / 2 W N n k ] = ∑ n = 0 N / 2 − 1 [ x ( n ) W N n k + ( − 1 ) k x ( n + N / 2 ) W N n k ] = ∑ n = 0 N / 2 − 1 [ x ( n ) + ( − 1 ) k x ( n + N / 2 ) ] W N n k \begin{aligned} X(k) &=\sum_{n=0}^{N-1} x(n) W_{N}^{n k}=\sum_{n=0}^{N / 2-1} x(n) W_{N}^{n k}+\sum_{n=N / 2}^{N-1} x(n) W_{N}^{n k} \\ &=\sum_{n=0}^{N / 2-1}\left[x(n) W_{N}^{n k}+x(n+N / 2) W_{N}^{(n+N / 2) k}\right] \\ &=\sum_{n=0}^{N / 2-1}\left[x(n) W_{N}^{n k}+x(n+N / 2) W_{N}^{k N / 2} W_{N}^{n k}\right] \\ &=\sum_{n=0}^{N / 2-1}\left[x(n) W_{N}^{n k}+(-1)^{k} x(n+N / 2) W_{N}^{n k}\right] \\ &=\sum_{n=0}^{N / 2-1}\left[x(n)+(-1)^{k} x(n+N / 2)\right] W_{N}^{n k} \end{aligned} X(k)=n=0N1x(n)WNnk=n=0N/21x(n)WNnk+n=N/2N1x(n)WNnk=n=0N/21[x(n)WNnk+x(n+N/2)WN(n+N/2)k]=n=0N/21[x(n)WNnk+x(n+N/2)WNkN/2WNnk]=n=0N/21[x(n)WNnk+(1)kx(n+N/2)WNnk]=n=0N/21[x(n)+(1)kx(n+N/2)]WNnk
让我们把输出序列 X(k), k= 0,…, N-1 分解成两个序列:
偶数序列和奇数序列
其中偶数序列X(2r),r=0,…,N/2-1
X ( 2 r ) = ∑ n = 0 N / 2 − 1 [ x ( n ) + ( − 1 ) 2 r x ( n + N / 2 ) ] W N 2 n r = ∑ n = 0 N / 2 − 1 [ x ( n ) + x ( n + N / 2 ) ] W N 2 n r = ∑ n = 0 N / 2 − 1 [ x ( n ) + x ( n + N / 2 ) ] W N / 2 n r = D F T N / 2 ( x ( n ) + x ( n + N / 2 ) ) \begin{aligned} X(2 r) &=\sum_{n=0}^{N / 2-1}\left[x(n)+(-1)^{2 r} x(n+N / 2)\right] W_{N}^{2 n r} \\ &=\sum_{n=0}^{N / 2-1}[x(n)+x(n+N / 2)] W_{N}^{2 n r} \\ &=\sum_{n=0}^{N / 2-1}[x(n)+x(n+N / 2)] W_{N / 2}^{n r} \\ &=D F T_{N / 2}(x(n)+x(n+N / 2)) \end{aligned} X(2r)=n=0N/21[x(n)+(1)2rx(n+N/2)]WN2nr=n=0N/21[x(n)+x(n+N/2)]WN2nr=n=0N/21[x(n)+x(n+N/2)]WN/2nr=DFTN/2(x(n)+x(n+N/2))
基数序列X(2r+1),r=0,…N/2-1
X ( 2 r + 1 ) = ∑ n = 0 N / 2 − 1 [ x ( n ) + ( − 1 ) ( 2 r + 1 ) x ( n + N / 2 ) ] W N n ∗ ( 2 r + 1 ) = ∑ n = 0 N / 2 − 1 [ x ( n ) − x ( n + N / 2 ) ] W N n W N 2 n r = ∑ n = 0 N / 2 − 1 { [ x ( n ) − x ( n + N / 2 ) ] W N n } W N / 2 n r = D F T N / 2 ( ( x ( n ) − x ( n + N / 2 ) ) W N n ) \begin{aligned} X(2 r+1) &=\sum_{n=0}^{N / 2-1}\left[x(n)+(-1)^{(2 r+1)} x(n+N / 2)\right] W_{N}^{n^{*}(2 r+1)} \\ &=\sum_{n=0}^{N / 2-1}[x(n)-x(n+N / 2)] W_{N}^{n} W_{N}^{2 n r} \\ &=\sum_{n=0}^{N / 2-1}\left\{[x(n)-x(n+N / 2)] W_{N}^{n}\right\} W_{N / 2}^{n r} \\ &=D F T_{N / 2}\left((x(n)-x(n+N / 2)) W_{N}^{n}\right) \end{aligned} X(2r+1)=n=0N/21[x(n)+(1)(2r+1)x(n+N/2)]WNn(2r+1)=n=0N/21[x(n)x(n+N/2)]WNnWN2nr=n=0N/21{[x(n)x(n+N/2)]WNn}WN/2nr=DFTN/2((x(n)x(n+N/2))WNn)
按以上方法反复的分解 N 点 DFT 成 2/N 点 DFT 直到 N=2,使得 N 点傅立叶变换的运算复杂度由
原来的 N2降到 Nlog2N,这是非常显著的改进。这个算法也被称为频域抽取(Decimate-InFrequency, DIF)FFT 算法。。
用一个基2 8 点FFT的图表示上述过程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雷达爆破手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值