目录
27.复数矩阵,快速傅里叶变换
对于实矩阵而言,特征值为复数时,特征向量一定为复向量,由此引入对复向量的学习
-
求模长及内积
假定一个复向量 z ⃗ = [ z 1 z 2 ⋮ z n ] \vec{z} = \begin{bmatrix} z_1 \\ z_2 \\ \vdots\\ z_n \end{bmatrix} z = z1z2⋮zn ,其中 z 1 , z 2 , ⋯ , z n z_1 , z_2 , \cdots , z_n z1,z2,⋯,zn为复数,所以该向量不再属于 R n R^n Rn,而是属于 n n n维复空间 C n C^n Cn
显然再使用 z ⃗ T z ⃗ \sqrt{\vec{z}^T \vec{z}} z Tz 无法求出模长,比如对于 z ⃗ = [ 1 i ] \vec{z} = \begin{bmatrix} 1 \\ i \end{bmatrix} z =[1i]有 z ⃗ T z ⃗ = [ 1 i ] [ 1 i ] = 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 ⃗ ‾ T z ⃗ |\vec{z}| = \sqrt{\overline{\vec{z}}^T \vec{z}} ∣z ∣=z Tz ,我们把求共轭和转置两步操作一起记作 H H H(来自 H e r m i t e Hermite Hermite),即 z ⃗ H = z ⃗ ‾ T \vec{z}^H = \overline{\vec{z}}^T z H=z T
同理,求内积时也使用 H H H,即对于两个复向量 x ⃗ , y ⃗ \vec{x} , \vec{y} x ,y ,有 x ⃗ ⋅ y ⃗ = x ⃗ H y ⃗ \vec{x} \cdot \vec{y} = \vec{x}^H \vec{y} x ⋅y =x Hy ,此时内积为 0 0 0仍然可以说明向量正交,对于矩阵也类似
-
对称矩阵的推广
对于实矩阵,对称矩阵即满足 A T = A A^T = A AT=A的矩阵,推广到复矩阵,我们把满足 A H = A A^H = A AH=A的矩阵称作厄米特矩阵
可以发现厄米特矩阵的对角线元素均为实数,因为它们在转置时不变,所以在求共轭时也不变,其它元素与转置后的对应元素互为共轭
由上一讲可知厄米特矩阵的特征值一定为实数
-
正交矩阵的推广
对于实矩阵,正交矩阵即满足 Q T Q = I Q^T Q = I QTQ=I的方阵,推广到复矩阵,我们把满足 Q H Q = I Q^H Q= I QHQ=I的方阵称作酉矩阵
可以发现酉矩阵的列向量组成复空间下的一组标准正交基,其转置与正交一致且均为酉矩阵
-
傅里叶矩阵
傅里叶变换是一种分析信号的方法,它可分析信号的成分,也可用这些成分合成信号。许多波形可作为信号的成分,比如正弦波、方波、锯齿波等,傅里叶变换用正弦波作为信号的成分。由于傅里叶变换经常用在计算机上,而在电子工程或计算机中,方阵的行和列都是从 0 0 0开始到 n − 1 n - 1 n−1结束的,所以在讨论傅里叶矩阵时遵从这种下标规则。
傅里叶矩阵是一种酉矩阵,它满足 ( F n ) i , j = 1 n w 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=n1wi∗j,i,j=0,⋯,n−1( w = e 2 π i / n w = e^{2 \pi i / n} w=e2πi/n),即:
F n = 1 n [ 1 1 1 ⋯ 1 1 w w 2 ⋯ w n − 1 1 w 2 w 4 ⋯ w 2 ( n − 1 ) ⋮ ⋮ ⋮ ⋱ ⋮ 1 w n − 1 w 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 111⋮11ww2⋮wn−11w2w4⋮w2(n−1)⋯⋯⋯⋱⋯1wn−1w2(n−1)⋮w(n−1)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=cos n2π+isin n2π,落在复平面原点为圆心的单位圆上,且对应的角度为一圈的 1 n \dfrac{1}{n} n1,所以 w w w乘上自己相当于增加角度 2 π n \dfrac{2 \pi}{n} n2π,因此 w k n = ( w n ) k = 1 , k ∈ Z w^{kn} = (w^n)^k = 1 , k \in Z wkn=(wn)k=1,k∈Z
证明傅里叶矩阵是酉矩阵:
设 F n F_n Fn的列向量分别为 f ⃗ 0 , f ⃗ 2 , ⋯ , f ⃗ n − 1 \vec{f}_0 , \vec{f}2 , \cdots , \vec{f}{n - 1} f 0,f 2,⋯,f n−1,即证 f ⃗ a H 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 ⃗ a H f ⃗ b = ( F n ) 0 , a ‾ ∗ ( F n ) 0 , b + ( F n ) 1 , a ‾ ∗ ( F n ) 1 , b + ⋯ + ( F n ) n − 1 , a ‾ ∗ ( F n ) 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)n−1,a∗(Fn)n−1,b=w0(a+b)+wa+b+⋯+w(n−1)(a+b)
暂时不会证明 \color{OrangeRed}暂时不会证明 暂时不会证明
-
傅里叶变换
当 n = 4 n = 4 n=4时, 2 π n = π 2 \dfrac{2 \pi}{n} = \dfrac{\pi}{2} n2π=2π,所以 w w w的乘方落在实轴和虚轴上2,由此得到四阶傅里叶矩阵 F 4 = 1 4 [ 1 1 1 1 1 i − 1 − i 1 − 1 1 − 1 1 − i − 1 i ] 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 11111i−1−i1−11−11−i−1i
用 F 4 F_4 F4左乘四维向量即为四点离散傅里叶变换( D F T DFT DFT),用 F 4 − 1 F_4^{-1} F4−1左乘四维向量即为傅里叶逆变换
-
快速傅里叶变换
实际上可以将傅里叶矩阵分解为一系列"稀疏矩阵",这些矩阵具有大量零元素,可以很方便地求逆及用于相乘
现在考虑 F 64 F_{64} F64与 F 32 F_{32} F32之间的联系,假设 F 32 , F 64 F_{32} , F_{64} F32,F64中的 w w w分别为 w 32 , w 64 w_{32} , w_{64} w32,w64,则 w 64 2 = w 32 w_{64}^2 = w_{32} w642=w32
先说结论: F 64 = 1 2 [ I D I − D ] [ F 32 O O F 32 ] [ 1 0 0 0 ⋯ 0 0 1 0 ⋯ ⋮ ⋮ ⋮ ⋮ ⋮ 0 1 0 0 ⋯ 0 0 0 1 ⋯ ⋮ ⋮ ⋮ ⋮ ⋮ ] 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[IID−D][F32OOF32] 10⋮00⋮00⋮10⋮01⋮00⋮00⋮01⋮⋯⋯⋮⋯⋯⋮ ,其中 D = [ 1 0 0 ⋯ 0 0 w 0 ⋯ 0 0 0 w 64 2 ⋯ 0 ⋮ ⋮ ⋮ ⋱ ⋮ 0 0 0 ⋯ 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= 100⋮00w0⋮000w642⋮0⋯⋯⋯⋱⋯000⋮w6431
证明: 可以发现 F 64 F_{64} F64拆分出的第三个矩阵将用于进行傅里叶变换的向量的偶数位元素提到了前面而将奇数位元素放到了后面,然后拆分出的第二个矩阵对刚才得到的新向量中的前后两部分分别做一次 32 32 32阶傅里叶变换
对于新向量前半部分,第 i i i个元素在求 32 32 32阶傅里叶变换后的第 j j j行时乘上了 w 32 j i w_{32}^{ji} w32ji,而新向量前半部分的第 i i i个元素是原向量的第 2 ∗ i 2*i 2∗i个元素,这说明它在求 64 64 64阶傅里叶变换后的第 j j j行时应该乘上 w 64 2 j i w_{64}^{2ji} w642ji,刚好 w 32 j i = w 64 2 j i w_{32}^{ji} = w_{64}^{2ji} w32ji=w642ji,所以 F 64 F_{64} F64拆分出的第一个矩阵左半部分上方是单位向量,对于下方,新向量前半部分的第 i i i个元素在求 64 64 64阶傅里叶变换后的第 32 + j 32 + j 32+j行时应乘上 w 64 2 ( 32 + j ) i = w 32 ( 32 + j ) i = w 32 j i w 32 32 i = w 32 j i ( − 1 ) i = w 32 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,所以左半部分下方也是单位矩阵
对于新向量后半部分,第 i i i个元素在求 32 32 32阶傅里叶变换后的第 j j j行时乘上了 w 32 j i w_{32}^{ji} w32ji,而在求 64 64 64阶傅里叶变换后的第 j j j行时应该乘上 w 64 j ( 2 i + 1 ) w_{64}^{j(2i + 1)} w64j(2i+1),即 w 32 j i ∗ w 64 j w_{32}^{ji} * w_{64}^j w32ji∗w64j,由此得到 D D D,对于拆分出的第一个矩阵右半部分下方,新向量后半部分的第 i i i个元素在求 64 64 64阶傅里叶变换后的第 32 + j 32 + j 32+j行时应乘上 w 64 2 ( 32 + j ) i = w 32 j i ( − 1 ) i = − w 32 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 -D −D
最后说明 1 2 \dfrac{1}{2} 21,因为前面进行 32 32 32阶傅里叶变换时只除以了 32 32 32,所以最后还要再除以 2 2 2才能达到除以 64 64 64
为了直观地说明,此处只证明了 F 64 F_{64} F64到 F 32 F_{32} F32的拆分,对于 F 2 n F_{2n} F2n到 F n F_n Fn的拆分,将具体的数字换为字母后也可得证
直接进行 64 64 64阶傅里叶变换的时间复杂度是 O ( n 2 ) O(n^2) O(n2),而拆分为三个矩阵后,第三个矩阵和原向量相乘时间复杂度为 O ( n ) O(n) O(n),第二个矩阵和新向量相乘时间复杂度为 O ( n 2 2 ) 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),当然这还没有结束,因为第二个矩阵的 F 32 F_{32} F32可以进行类似的拆分得到含有 F 16 F_{16} F16的三个矩阵,这样刚才求得的总时间复杂度进一步简化得到 O ( 2 ( 2 ( n 4 ) 2 + n 2 ) + n ) = O ( 2 2 ( 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 + n l o g n ) O(n + n\ log\ n) O(n+n log n),即 O ( n l o g n ) O(n\ log\ n) O(n log n)
打赏
制作不易,若有帮助,欢迎打赏!