目录

  • 27.复数矩阵,快速傅里叶变换
    • 打赏

27.复数矩阵,快速傅里叶变换

对于实矩阵而言,特征值为复数时,特征向量一定为复向量,由此引入对复向量的学习

  1. 求模长及内积

    假定一个复向量 z⃗= [ z 1 z 2 ⋮z n] \vec{z} = \begin{bmatrix} z_1 \\ z_2 \\ \vdots\\ z_n \end{bmatrix}z = z1z2zn ,其中 z1, z2, ⋯  , zn z_1 , z_2 , \cdots , z_nz1,z2,,zn为复数,所以该向量不再属于 Rn R^nRn,而是属于 nnn维复空间 Cn C^nCn

    显然再使用 z ⃗Tz⃗\sqrt{\vec{z}^T \vec{z}}z Tz 无法求出模长,比如对于 z⃗= [1i] \vec{z} = \begin{bmatrix} 1 \\ i \end{bmatrix}z =[1i] z ⃗Tz⃗ = [1i][1i]= 0 ≠ 2 \sqrt{\vec{z}^T \vec{z}} = \begin{bmatrix} 1 & i \end{bmatrix} \begin{bmatrix} 1 \\ i \end{bmatrix} = 0 \ne \sqrt{2}z Tz =[1i][1i]=0=2

    由上一讲的内容可以得到 ∣ z⃗∣ = z⃗‾Tz⃗|\vec{z}| = \sqrt{\overline{\vec{z}}^T \vec{z}}z =z Tz ,我们把求共轭和转置两步操作一起记作 HHH(来自 H e r m i t eHermiteHermite),即z ⃗H=z⃗‾T \vec{z}^H = \overline{\vec{z}}^Tz H=z T

    同理,求内积时也使用 HHH,即对于两个复向量 x⃗, y⃗ \vec{x} , \vec{y}x ,y ,有 x⃗⋅ y⃗=x ⃗Hy⃗ \vec{x} \cdot \vec{y} = \vec{x}^H \vec{y}x y =x Hy ,此时内积为 000仍然可以说明向量正交,对于矩阵也类似

  2. 对称矩阵的推广

    对于实矩阵,对称矩阵即满足 AT= AA^T = AAT=A的矩阵,推广到复矩阵,我们把满足 AH= AA^H = AAH=A的矩阵称作厄米特矩阵

    可以发现厄米特矩阵的对角线元素均为实数,因为它们在转置时不变,所以在求共轭时也不变,其它元素与转置后的对应元素互为共轭

    由上一讲可知厄米特矩阵的特征值一定为实数

  3. 正交矩阵的推广

    对于实矩阵,正交矩阵即满足 QTQ = IQ^T Q = IQTQ=I的方阵,推广到复矩阵,我们把满足 QHQ = IQ^H Q= IQHQ=I的方阵称作酉矩阵

    可以发现酉矩阵的列向量组成复空间下的一组标准正交基,其转置与正交一致且均为酉矩阵

  4. 傅里叶矩阵

    傅里叶变换是一种分析信号的方法,它可分析信号的成分,也可用这些成分合成信号。许多波形可作为信号的成分,比如正弦波、方波、锯齿波等,傅里叶变换用正弦波作为信号的成分。由于傅里叶变换经常用在计算机上,而在电子工程或计算机中,方阵的行和列都是从 000开始到 n − 1n – 1n1结束的,所以在讨论傅里叶矩阵时遵从这种下标规则。

    傅里叶矩阵是一种酉矩阵,它满足 ( Fn) i , j=1 nw i ∗ j, i , j = 0 , ⋯  , n − 1(F_n)_{i , j} = \dfrac{1}{n} w^{i * j} , i , j = 0 , \cdots , n – 1(Fn)i,j=n1wij,i,j=0,,n1 w = e 2 π i / n w = e^{2 \pi i / n}w=e2πi/n),即:

    Fn=1 n[111⋯11w w 2⋯ w n−1 1 w 2 w 4⋯ w 2(n−1)⋮⋮⋮ ⋱ ⋮ 1 w n−1w 2(n−1) ⋯ w (n−1 ) 2 ] F_n = \dfrac{1}{n} \begin{bmatrix} 1 & 1 & 1 & \cdots & 1 \\ 1 & w & w^2 & \cdots & w^{n – 1} \\ 1 & w^2 & w^4 & \cdots & w^{2(n – 1)} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & w^{n – 1} & w^{2(n – 1)} & \cdots & w^{(n – 1)^2} \end{bmatrix}Fn=n1 11111ww2wn11w2w4w2(n1)1wn1w2(n1)w(n1)2

    可以发现 w = e 2 π i / n= c o s 2πn+ i s i n 2πn w = e^{2 \pi i / n} = cos\ \dfrac{2 \pi}{n} + i sin\ \dfrac{2 \pi}{n}w=e2πi/n=cosn2π+isinn2π,落在复平面原点为圆心的单位圆上,且对应的角度为一圈的1 n \dfrac{1}{n}n1,所以 www乘上自己相当于增加角度2πn \dfrac{2 \pi}{n}n2π,因此 w k n= ( wn)k= 1 , k ∈ Zw^{kn} = (w^n)^k = 1 , k \in Zwkn=(wn)k=1,kZ

    证明傅里叶矩阵是酉矩阵:

    ​  设 Fn F_nFn的列向量分别为f ⃗0,f ⃗2, ⋯  ,f ⃗ n − 1 \vec{f}_0 , \vec{f}_2 , \cdots , \vec{f}_{n – 1}f 0,f 2,,f n1,即证f ⃗aH f ⃗b= { 0 , a ≠ b 1 , a = b \vec{f}_a^H \vec{f}_b = \left\{\begin{matrix} 0 , a \ne b \\ 1,a = b \end{matrix}\right.f aHf b={0,a=b1,a=b

    ​  f ⃗aH f ⃗b=( Fn) 0 , a ‾∗ ( Fn) 0 , b+( Fn) 1 , a ‾∗ ( Fn) 1 , b+ ⋯ +( Fn) n − 1 , a ‾∗ ( Fn) n − 1 , b = w 0 ( a + b )+ w a + b+ ⋯ + w ( n − 1 ) ( a + b ) \begin{aligned} \vec{f}_a^H \vec{f}_b & = \overline{(F_n)_{0 , a}} * (F_n)_{0 , b} + \overline{(F_n)_{1 , a}} * (F_n)_{1 , b} + \cdots + \overline{(F_n)_{n – 1 , a}} * (F_n)_{n – 1 , b} \\ & = w^{0(a + b)} + w^{a + b} + \cdots + w^{(n – 1)(a + b)} \end{aligned}f aHf b=(Fn)0,a(Fn)0,b+(Fn)1,a(Fn)1,b++(Fn)n1,a(Fn)n1,b=w0(a+b)+wa+b++w(n1)(a+b)

    暂时不会证明 \color{OrangeRed}暂时不会证明暂时不会证明

  5. 傅里叶变换

    n = 4n = 4n=4时,2πn=π 2 \dfrac{2 \pi}{n} = \dfrac{\pi}{2}n2π=2π,所以 www的乘方落在实轴和虚轴上2,由此得到四阶傅里叶矩阵 F4=1 4[11111i − 1 − i1 − 11 − 11 − i − 1i] F_4 = \dfrac{1}{4} \begin{bmatrix} 1 & 1 & 1 & 1 \\ 1 & i & -1 & -i \\ 1 & -1 & 1 & -1 \\ 1 & -i & -1 & i \end{bmatrix}F4=41 11111i1i11111i1i

    F4 F_4F4左乘四维向量即为四点离散傅里叶变换( D F TDFTDFT),用 F4 − 1 F_4^{-1}F41左乘四维向量即为傅里叶逆变换

  6. 快速傅里叶变换

    实际上可以将傅里叶矩阵分解为一系列“稀疏矩阵”,这些矩阵具有大量零元素,可以很方便地求逆及用于相乘

    现在考虑 F64 F_{64}F64 F32 F_{32}F32之间的联系,假设 F32, F64 F_{32} , F_{64}F32,F64中的 www分别为 w32, w64 w_{32} , w_{64}w32,w64,则 w642= w32 w_{64}^2 = w_{32}w642=w32

    先说结论: F64=1 2[IDI − D][ F 32OO F 32][1000⋯0010⋯ ⋮⋮⋮⋮⋮ 0100⋯0001⋯ ⋮⋮⋮⋮⋮ ] F_{64} = \dfrac{1}{2} \begin{bmatrix} I & D \\ I & -D\end{bmatrix} \begin{bmatrix} F_{32} & O \\ O & F_{32}\end{bmatrix} \begin{bmatrix} 1 & 0 & 0 & 0 & \cdots \\ 0 & 0 & 1 & 0 & \cdots \\ \vdots & \vdots & \vdots & \vdots & \vdots \\ 0 & 1 & 0 & 0 & \cdots \\ 0 & 0 & 0 & 1 & \cdots \\ \vdots & \vdots & \vdots & \vdots & \vdots \end{bmatrix}F64=21[IIDD][F32OOF32] 1000001001000001 ,其中 D = [100⋯00 w0⋯000 w 64 2⋯0 ⋮⋮⋮ ⋱ ⋮ 000⋯ w 64 31] D = \begin{bmatrix} 1 & 0 & 0 & \cdots & 0 \\ 0 & w_{} & 0 & \cdots & 0 \\ 0 & 0 & w_{64}^2 & \cdots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \cdots & w_{64}^{31} \end{bmatrix}D= 10000w0000w6420000w6431

    证明: 可以发现 F64 F_{64}F64拆分出的第三个矩阵将用于进行傅里叶变换的向量的偶数位元素提到了前面而将奇数位元素放到了后面,然后拆分出的第二个矩阵对刚才得到的新向量中的前后两部分分别做一次 323232阶傅里叶变换

    ​  对于新向量前半部分,第 iii个元素在求 323232阶傅里叶变换后的第 jjj行时乘上了 w32 j i w_{32}^{ji}w32ji,而新向量前半部分的第 iii个元素是原向量的第 2 ∗ i2*i2i个元素,这说明它在求 646464阶傅里叶变换后的第 jjj行时应该乘上 w64 2 j i w_{64}^{2ji}w642ji,刚好 w32 j i= w64 2 j i w_{32}^{ji} = w_{64}^{2ji}w32ji=w642ji,所以 F64 F_{64}F64拆分出的第一个矩阵左半部分上方是单位向量,对于下方,新向量前半部分的第 iii个元素在求 646464阶傅里叶变换后的第 32 + j32 + j32+j行时应乘上 w64 2 ( 32 + j ) i= w32 ( 32 + j ) i= w32 j iw32 32 i= w32 j i( − 1 )i= w32 j i w_{64}^{2(32 + j)i} = w_{32}^{(32 + j)i} = w_{32}^{ji} w_{32}^{32i} = w_{32}^{ji} (-1)^i = w_{32}^{ji}w642(32+j)i=w32(32+j)i=w32jiw3232i=w32ji(1)i=w32ji,所以左半部分下方也是单位矩阵

    ​  对于新向量后半部分,第 iii个元素在求 323232阶傅里叶变换后的第 jjj行时乘上了 w32 j i w_{32}^{ji}w32ji,而在求 646464阶傅里叶变换后的第 jjj行时应该乘上 w64 j ( 2 i + 1 ) w_{64}^{j(2i + 1)}w64j(2i+1),即 w32 j i∗ w64j w_{32}^{ji} * w_{64}^jw32jiw64j,由此得到 DDD,对于拆分出的第一个矩阵右半部分下方,新向量后半部分的第 iii个元素在求 646464阶傅里叶变换后的第 32 + j32 + j32+j行时应乘上 w64 2 ( 32 + j ) i= w32 j i( − 1 )i= − w32 j i w_{64}^{2(32 + j)i} = w_{32}^{ji} (-1)^i = -w_{32}^{ji}w642(32+j)i=w32ji(1)i=w32ji,所以右半部分下方是 − D-DD

    ​  最后说明1 2 \dfrac{1}{2}21,因为前面进行 323232阶傅里叶变换时只除以了 323232,所以最后还要再除以 222才能达到除以 646464

    ​  为了直观地说明,此处只证明了 F64 F_{64}F64 F32 F_{32}F32的拆分,对于 F 2 n F_{2n}F2n Fn F_nFn的拆分,将具体的数字换为字母后也可得证

    直接进行 646464阶傅里叶变换的时间复杂度是 O ( n2)O(n^2)O(n2),而拆分为三个矩阵后,第三个矩阵和原向量相乘时间复杂度为 O ( n )O(n)O(n),第二个矩阵和新向量相乘时间复杂度为 O (n22)O(\dfrac{n^2}{2})O(2n2),此时得到的向量和第一个矩阵相乘时间复杂度为 O ( n )O(n)O(n),总时间复杂度为 O ( 2 (n 2)2+ n )O(2 (\dfrac{n}{2})^2 + n)O(2(2n)2+n),当然这还没有结束,因为第二个矩阵的 F32 F_{32}F32可以进行类似的拆分得到含有 F16 F_{16}F16的三个矩阵,这样刚才求得的总时间复杂度进一步简化得到 O ( 2 ( 2 (n 4)2+n 2) + n ) = O ( 22(n 4)2+ 2 n )O(2(2 (\dfrac{n}{4})^2 + \dfrac{n}{2}) + n) = O(2^2 (\dfrac{n}{4})^2 + 2n)O(2(2(4n)2+2n)+n)=O(22(4n)2+2n),以此类推,一层层拆分下去,时间复杂度就会降为 O ( n + nl o gn )O(n + n\ log\ n)O(n+nlogn),即 O ( nl o gn )O(n\ log\ n)O(nlogn)


打赏

制作不易,若有帮助,欢迎打赏!