离散傅立叶变换(DFT)

前置知识

傅里叶级数

离散傅立叶变换

傅立叶级数可以将一个周期为 2 π 2\pi 2π的函数展开成
f ( t ) = ∑ n = − ∞ + ∞ c n e j n t c n = 1 2 π ∫ − π π f ( t ) e − j n t   d t \begin{aligned} &f(t)=\sum_{n=-\infty}^{+\infty} c_{n} e^{j n t} \\ &c_{n}=\frac{1}{2 \pi} \int_{-\pi}^{\pi} f(t) e^{-j n t} \mathrm{~d} t \end{aligned} f(t)=n=+cnejntcn=2π1ππf(t)ejnt dt
但是现在只有一个向量 [ f 0 , f 1 , ⋯   , f N − 1 ] \left[f_{0}, f_{1}, \cdots, f_{N-1}\right] [f0,f1,,fN1]
这个向量对 f ( t ) f(t) f(t)的采样
假定 f ( n ) f(n) f(n) f ( x ) f(x) f(x)在一个周期内的等距离采样,
w = e 2 π j N w=e^{\frac{2 \pi j}{N}} w=eN2πj
那么每个采样点就可以写成 f k = f ( k 2 π N ) = ∑ n = − ∞ + ∞ c n e k n 2 π j N = ∑ n = − ∞ + ∞ c n w k n f_{k}=f\left(k \frac{2 \pi}{N}\right)=\sum_{n=-\infty}^{+\infty} c_{n} e^{k n \frac{2 \pi j}{N}}=\sum_{n=-\infty}^{+\infty} c_{n} w^{k n} fk=f(kN2π)=n=+cneknN2πj=n=+cnwkn
先看 f ( 2 π N ) f\left(\frac{2 \pi}{N}\right) f(N2π)
f ( 2 π N ) = ⋯ + c 0 w 0 + c 1 w 1 + ⋯ + c N − 1 w N − 1 + c N w N + c N + 1 w N + 1 + ⋯ = ( c 0 + c N + c − N + c 2 N + ⋯   ) w 0 + ( c 1 + c N + 1 + c − N + 1 + c 2 N + 1 + ⋯   ) w 1 + … ( c N − 1 + c 2 N − 1 + c − 1 + ⋯   ) w N − 1 \begin{aligned} &\quad f\left(\frac{2 \pi}{N}\right) \\ =& \cdots+c_{0} w^{0}+c_{1} w^{1}+\cdots+c_{N-1} w^{N-1}+c_{N} w^{N}+c_{N+1} w^{N+1}+\cdots \\ =&\left(c_{0}+c_{N}+c_{-N}+c_{2 N}+\cdots\right) w^{0}+\\ &\left(c_{1}+c_{N+1}+c_{-N+1}+c_{2 N+1}+\cdots\right) w^{1}+\\ & \ldots \\ &\left(c_{N-1}+c_{2 N-1}+c_{-1}+\cdots\right) w^{N-1} \end{aligned} ==f(N2π)+c0w0+c1w1++cN1wN1+cNwN+cN+1wN+1+(c0+cN+cN+c2N+)w0+(c1+cN+1+cN+1+c2N+1+)w1+(cN1+c2N1+c1+)wN1
(利用了 w N = 1 w^{N}=1 wN=1)
可以看出, w k w^k wk前面的系数的下标模 N N N等于 k k k
换句话说,我们其实只要 w 0 , w 1 , ⋯   , w N − 1 w^{0}, w^{1}, \cdots, w^{N-1} w0,w1,,wN1就能表示 f ( 2 π N ) f\left(\frac{2 \pi}{N}\right) f(N2π)
再看 f ( 2 2 π N ) f\left(2\frac{2 \pi}{N}\right) f(2N2π)
f ( 2 2 π N ) = ⋯ + c 0 w 0 + c 1 w 2 + ⋯ + c N − 1 w 2 ( N − 1 ) + c N w 2 N + c N + 1 w 2 ( N + 1 ) + ⋯ = ( c 0 + c N + c − N + c 2 N + ⋯   ) w 0 + ( c 1 + c N + 1 + c − N + 1 + c 2 N + 1 + ⋯   ) w 2 + … ( c N − 1 + c 2 N − 1 + c − 1 + ⋯   ) w 2 ( N − 1 ) \begin{aligned} &\quad f\left(2 \frac{2 \pi}{N}\right) \\ =& \cdots+c_{0} w^{0}+c_{1} w^{2}+\cdots+c_{N-1} w^{2(N-1)}+c_{N} w^{2 N}+c_{N+1} w^{2(N+1)}+\cdots \\ =&\left(c_{0}+c_{N}+c_{-N}+c_{2 N}+\cdots\right) w^{0}+\\ &\left(c_{1}+c_{N+1}+c_{-N+1}+c_{2 N+1}+\cdots\right) w^{2}+\\ & \ldots \\ &\left(c_{N-1}+c_{2 N-1}+c_{-1}+\cdots\right) w^{2(N-1)} \end{aligned} ==f(2N2π)+c0w0+c1w2++cN1w2(N1)+cNw2N+cN+1w2(N+1)+(c0+cN+cN+c2N+)w0+(c1+cN+1+cN+1+c2N+1+)w2+(cN1+c2N1+c1+)w2(N1)
虽然 w w w的次数比较高,但是利用 w N = 1 w^{N}=1 wN=1,会发现,
w 2 n ( n = 0 , 1 , ⋯   , N − 1 ) w^{2 n}(n=0,1, \cdots, N-1) w2n(n=0,1,,N1)一定对应 w n ( n = 0 , 1 , ⋯   , N − 1 ) w^{n}(n=0,1, \cdots, N-1) wn(n=0,1,,N1)中的一个
所以我们也可以用 w 0 , w 1 , ⋯   , w N − 1 w^{0}, w^{1}, \cdots, w^{N-1} w0,w1,,wN1表示 f ( 2 2 π N ) f\left(2\frac{2 \pi}{N}\right) f(2N2π)
同理 f ( k 2 π N ) f(k\frac{2\pi}{N}) f(kN2π) 也一样
所以我们就可以改写一下
f ( t ) = ∑ n = 0 N − 1 c n e j n t f 0 = f ( 0 2 π N ) = ∑ n = 0 N − 1 c n w 0 n f 1 = f ( 1 2 π N ) = ∑ n = 0 N − 1 c n w 1 n … f N − 1 = f ( ( N − 1 ) 2 π N ) = ∑ n = 0 N − 1 c n w ( N − 1 ) n \begin{aligned} &f(t)=\sum_{n=0}^{N-1} c_{n} e^{j n t} \\ &f_{0}=f\left(0 \frac{2 \pi}{N}\right)=\sum_{n=0}^{N-1} c_{n} w^{0 n} \\ &f_{1}=f\left(1 \frac{2 \pi}{N}\right)=\sum_{n=0}^{N-1} c_{n} w^{1 n} \\ &\ldots \\ &f_{N-1}=f\left((N-1) \frac{2 \pi}{N}\right)=\sum_{n=0}^{N-1} c_{n} w^{(N-1) n} \end{aligned} f(t)=n=0N1cnejntf0=f(0N2π)=n=0N1cnw0nf1=f(1N2π)=n=0N1cnw1nfN1=f((N1)N2π)=n=0N1cnw(N1)n
这就是N元1次方程组了
接着我们就可以写成矩阵的形式
[ f 0 f 1 … f N − 1 ] = [ 1 1 1 ⋯ 1 1 w w 2 ⋯ w N − 1 ⋯ 1 w N − 1 w 2 ( N − 1 ) ⋯ w ( N − 1 ) ( N − 1 ) ] [ c 0 c 1 … c N − 1 ] \left[\begin{array}{c} f_{0} \\ f_{1} \\ \ldots \\ f_{N-1} \end{array}\right]=\left[\begin{array}{ccccc} 1 & 1 & 1 & \cdots & 1 \\ 1 & w & w^{2} & \cdots & w^{N-1} \\ & & \cdots & & \\ 1 & w^{N-1} & w^{2(N-1)} & \cdots & w^{(N-1)(N-1)} \end{array}\right]\left[\begin{array}{c} c_{0} \\ c_{1} \\ \ldots \\ c_{N-1} \end{array}\right] f0f1fN1=1111wwN11w2w2(N1)1wN1w(N1)(N1)c0c1cN1
F N = [ 1 1 1 ⋯ 1 1 w w 2 ⋯ w N − 1 ⋯ 1 w N − 1 w 2 ( N − 1 ) ⋯ w ( N − 1 ) ( N − 1 ) ] F_N=\begin{bmatrix} 1&1&1&\cdots & 1\\ 1&w&w^2&\cdots & w^{N-1}\\ &&\cdots&\\ 1&w^{N-1}&w^{2(N-1)}&\cdots & w^{(N-1)(N-1)} \end{bmatrix} FN=1111wwN11w2w2(N1)1wN1w(N1)(N1)叫做傅立叶矩阵
于是我们可以求逆来计算系数
[ c 0 c 1 … c N − 1 ] = F N − 1 [ f 0 f 1 … f N − 1 ] \left[\begin{array}{c} c_{0} \\ c_{1} \\ \ldots \\ c_{N-1} \end{array}\right]=F_{N}^{-1}\left[\begin{array}{c} f_{0} \\ f_{1} \\ \ldots \\ f_{N-1} \end{array}\right] c0c1cN1=FN1f0f1fN1
接下来讲一下如何求逆
首先 w ‾ = e − 2 π j N = w − 1 \overline{w}=e^{-\frac{2\pi j}{N}}=w^{-1} w=eN2πj=w1
F N F_N FN的每个元素 F i j = w i w j F_{i j}=w^{i} w^{j} Fij=wiwj
所以 F N T = F N F_{N}^{T}=F_{N} FNT=FN
共轭转置
F N H = [ 1 1 1 ⋯ 1 1 w ‾ w ‾ 2 ⋯ w ‾ N − 1 ⋯ 1 w ‾ N − 1 w ‾ 2 ( N − 1 ) ⋯ w ‾ ( N − 1 ) ( N − 1 ) ] F_N^{H}=\begin{bmatrix} 1&1&1&\cdots & 1\\ 1&\overline{w}&\overline{w}^2&\cdots & \overline{w}^{N-1}\\ &&\cdots&\\ 1&\overline{w}^{N-1}&\overline{w}^{2(N-1)}&\cdots & \overline{w}^{(N-1)(N-1)} \end{bmatrix} FNH=1111wwN11w2w2(N1)1wN1w(N1)(N1)
F N F N H = f i j F_{N} F_{N}^{H}=f_{i j} FNFNH=fij
f i j = ∑ k = 0 N − 1 w i k w ˉ k j = ∑ k = 0 N − 1 w k ( i − j ) f_{i j}=\sum_{k=0}^{N-1} w^{i k} \bar{w}^{k j}=\sum_{k=0}^{N-1} w^{k(i-j)} fij=k=0N1wikwˉkj=k=0N1wk(ij)
f i j = { N , i = j 1 − w N ( i − j ) 1 − w i − j , i ≠ j = { N , i = j 0 , i ≠ j f_{ij}=\left\{\begin{matrix} N,i=j\\\frac{1-w^{N(i-j)}}{1-w^{i-j}} ,i\neq j\end{matrix}\right. =\left\{\begin{matrix} N,i=j\\ 0,i\neq j \end{matrix}\right. fij={N,i=j1wij1wN(ij),i=j={N,i=j0,i=j
F N F N H = N E F N − 1 = 1 N F N H \begin{aligned} &F_{N} F_{N}^{H}=N E \\ &F_{N}^{-1}=\frac{1}{N} F_{N}^{H} \end{aligned} FNFNH=NEFN1=N1FNH
[ c 0 c 1 ⋯ c N − 1 ] = 1 N F N H [ f 0 f 1 … f N − 1 ] \left[\begin{array}{c} c_{0} \\ c_{1} \\ \cdots \\ c_{N-1} \end{array}\right]=\frac{1}{N} F_{N}^{H}\left[\begin{array}{c} f_{0} \\ f_{1} \\ \ldots \\ f_{N-1} \end{array}\right] c0c1cN1=N1FNHf0f1fN1
有时候会看到网上离散傅立叶变换是
X [ k ] = ∑ n = 0 N − 1 x [ n ] e − k 2 π n i N ( k = 0 , 1 , ⋯   , N − 1 ) x [ n ] = 1 N ∑ k = 0 N − 1 X [ k ] e n 2 π k j N \begin{aligned} &X[k]=\sum_{n=0}^{N-1} x[n] e^{-k \frac{2 \pi n i}{N}}(k=0,1, \cdots, N-1) \\ &x[n]=\frac{1}{N} \sum_{k=0}^{N-1} X[k] e^{n \frac{2 \pi k j}{N}} \end{aligned} X[k]=n=0N1x[n]ekN2πni(k=0,1,,N1)x[n]=N1k=0N1X[k]enN2πkj
其实本质上是一样的
X [ k ] = ∑ n = 0 N − 1 x [ n ] w − k n X[k]=\sum_{n=0}^{N-1} x[n] w^{-k n} X[k]=n=0N1x[n]wkn
于是对应关系如下
[ x [ 0 ] x [ 1 ] ⋯ x [ N − 1 ] ] = [ f 0 f 1 ⋯ f N − 1 ] \begin{bmatrix} x\left[0 \right ]\\ x\left[1 \right ]\\ \cdots\\ x\left[N-1 \right ] \end{bmatrix} =\begin{bmatrix} f_0\\ f_1\\ \cdots\\ f_{N-1} \end{bmatrix} x[0]x[1]x[N1]=f0f1fN1
[ X [ 0 ] X [ 1 ] ⋯ X [ N − 1 ] ] = N [ c 0 c 1 ⋯ c N − 1 ] \begin{bmatrix} X\left[0 \right ]\\ X\left[1 \right ]\\ \cdots\\ X\left[N-1 \right ]\end{bmatrix}=N\begin{bmatrix} c_0\\ c_1\\ \cdots\\ c_{N-1} \end{bmatrix} X[0]X[1]X[N1]=Nc0c1cN1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Nightmare004

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

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

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

打赏作者

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

抵扣说明:

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

余额充值