一窥数字傅里叶变换矩阵

前言

DFT技术虽然很神奇,但总觉得是个黑洞,摸不着头脑,今天研究一下DFT matrix,能更加清楚的了解一些内核的东西。

DFT vs IDFT matrics

这是一个N*N方阵,矩阵的基本元素由 W = e − j 2 π / N W=e^{-j2\pi/N} W=ej2π/N来构成,每个位置元素 a i j = W ( i − 1 ) ∗ ( j − 1 ) = e − j 2 π ( i − 1 ) ( j − 1 ) / N a_{ij}=W^{(i-1)*(j-1)}=e^{-j2\pi (i-1)(j-1)/N} aij=W(i1)(j1)=ej2π(i1)(j1)/N。即矩阵元素的索引是从自然数1开始的,但指数运算需要从0(据说现在小学已经把0化为自然数了。。。)开始。简单的列一下这个矩阵: W = [ e − j 0 e − j 0 e − j 0 ⋯ e − j 0 e − j 0 e − j 2 π / N e − j 4 π / N ⋯ e − j 2 ( N − 1 ) π / N e − j 0 e − j 4 π / N e − j 8 π / N ⋯ e − j 4 ( N − 1 ) π / N ⋮ ⋮ ⋮ ⋱ ⋮ e − j 0 e − j 2 ( N − 1 ) π / N e − j 4 ( N − 1 ) π / N ⋯ e − j 2 ( N − 1 ) ( N − 1 ) π / N ] = [ 1 1 1 ⋯ 1 1 e − j 2 π / N e − j 4 π / N ⋯ e − j 2 ( N − 1 ) π / N 1 e − j 4 π / N e − j 8 π / N ⋯ e − j 4 ( N − 1 ) π / N ⋮ ⋮ ⋮ ⋱ ⋮ 1 e − j 2 ( N − 1 ) π / N e − j 4 ( N − 1 ) π / N ⋯ e − j 2 ( N − 1 ) ( N − 1 ) π / N ] \bold W=\begin{bmatrix} e^{-j0} &e^{-j0} &e^{-j0} & \cdots & e^{-j0} \\ e^{-j0} &e^{-j2\pi /N} &e^{-j4\pi /N} & \cdots &e^{-j2(N-1)\pi /N} \\ e^{-j0} &e^{-j4\pi /N} &e^{-j8\pi /N} & \cdots &e^{-j4(N-1)\pi /N} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ e^{-j0} &e^{-j2(N-1)\pi /N} &e^{-j4(N-1)\pi /N} & \cdots & e^{-j2(N-1)(N-1)\pi /N} \end{bmatrix}\\ =\begin{bmatrix} 1 &1 &1 & \cdots & 1 \\ 1 &e^{-j2\pi /N} &e^{-j4\pi /N} & \cdots &e^{-j2(N-1)\pi /N} \\ 1 &e^{-j4\pi /N} &e^{-j8\pi /N} & \cdots &e^{-j4(N-1)\pi /N} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 &e^{-j2(N-1)\pi /N} &e^{-j4(N-1)\pi /N} & \cdots & e^{-j2(N-1)(N-1)\pi /N} \end{bmatrix} W=ej0ej0ej0ej0ej0ej2π/Nej4π/Nej2(N1)π/Nej0ej4π/Nej8π/Nej4(N1)π/Nej0ej2(N1)π/Nej4(N1)π/Nej2(N1)(N1)π/N=11111ej2π/Nej4π/Nej2(N1)π/N1ej4π/Nej8π/Nej4(N1)π/N1ej2(N1)π/Nej4(N1)π/Nej2(N1)(N1)π/N
这个矩阵是主对角对称矩阵。即 W T = W \bold W^T=\bold W WT=W

酉矩阵特性

上述矩阵满足 W † W = N I \bold W^\dagger \bold W=NI WW=NI
即厄米特共轭与原矩阵的乘积是N倍的单位阵。具有酉矩阵的特点(差了N倍,不知道失算uniary,还是paraunitary)。上面的式子还暗示了 W † / N = W − 1 \bold W^\dagger/N=\bold W^{-1} W/N=W1,另外一个推论是 W † = W ∗ \bold W^\dagger=\bold W^* W=W

矩阵DFT运算

假设一组序列为 X = [ x ( 0 ) , x ( 1 ) , . . . x ( N − 1 ) ] T X=[x(0),x(1),...x(N-1)]^T X=[x(0),x(1),...x(N1)]T,这组序列的DFT变换 X ( k ) = ∑ n = 0 N − 1 x ( n ) e − j 2 π k n / N = ∑ n = 0 N − 1 x ( n ) W k n = W X X(k) = \sum_{n=0}^{N-1}x(n)e^{-j2\pi kn/N} = \sum_{n=0}^{N-1}x(n) W^{kn} =\bold WX X(k)=n=0N1x(n)ej2πkn/N=n=0N1x(n)Wkn=WX这里的n和k都是0开始的了。 x ( n ) = 1 N ∑ n = 0 N − 1 X ( k ) e j 2 π k n / N = 1 N ∑ n = 0 N − 1 X ( k ) W − k n x(n) =\frac{1}{N} \sum_{n=0}^{N-1}X(k)e^{j2\pi kn/N} =\frac{1}{N} \sum_{n=0}^{N-1}X(k)W^{-kn} x(n)=N1n=0N1X(k)ej2πkn/N=N1n=0N1X(k)Wkn

矩阵的值长什么样

我们利用python代码来一窥DFT矩阵的样子

    pi = math.pi
    M = 16
    W = np.exp((2*pi/M)*1j)
    nature = np.arange(M)
    DFT_Matrix = np.ones([M,M],np.complex)
    for row in range(M):
        DFT_Matrix[row]=W**(-nature*(row))

当M=2时,得到如下的值,最后一个值 e − j 2 π / 2 = − 1 e^{-j2\pi /2}=-1 ej2π/2=1

 [1.+0.j 1.+0.j]
 [ 1.+0.0000000e+00j -1.-1.2246468e-16j]

M=4时,

[1.+0.j 1.+0.j 1.+0.j 1.+0.j]
[ 1.0000000e+00+0.0000000e+00j  6.1232340e-17-1.0000000e+00j\n -1.0000000e+00-1.2246468e-16j -1.8369702e-16+1.0000000e+00j]
[ 1.+0.0000000e+00j -1.-1.2246468e-16j  1.+2.4492936e-16j\n -1.-3.6739404e-16j]
[ 1.0000000e+00+0.0000000e+00j -1.8369702e-16+1.0000000e+00j\n -1.0000000e+00-3.6739404e-16j  5.5109106e-16-1.0000000e+00j]

操练

根据【2】提供的图形,对256个点进行DFT变换,将时域频域画在一张图里,就差不多这个样子了。图中每个算法采样点换成256,然后增加几行代码:

    Y = np.matmul(DFT_Matrix, y)
    y_idx = np.linspace(0, 2 * pi, 256)
    plt.plot(y_idx, np.absolute(Y))

在这里插入图片描述
在这里插入图片描述在这里插入图片描述纯属娱乐,但这个工具对于不要求运算速度的话,还是很直观的。

总结

这个小算法能够比较清晰的将DFT算子展现在你面前,帮助理解DFT的玄妙之处

参考

1.Multirate Systems and Filter Banks, P.Vaidyanathan
2.Python信号分析 | 信号的表示(二)【三角、复指数、矩形脉冲、阶跃】

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值