L27-复数矩阵和快速傅里叶变换

linear-algebra

L27-复数矩阵和快速傅里叶变换

参考

复向量 complex vector 是指构成向量的元素中含有复数,同理复矩阵 complex matrix 是指构成矩阵的元素中含有复数。

课程前面所讨论大多数向量和矩阵都只是由实数构成,而对于复向量和复矩阵,由于复数的存在,所以之前介绍的一些相关的性质和定义会有所不同。

复向量

实数向量 vv 模长与向量的平方的关系 v2=vTv\|v\|^{2}=v^{T}v(从矩阵相乘的角度考虑,其中一个向量需要转置)

而对于复向量 z=[z1z2zn]z=\begin{bmatrix} z_{1} \\ z_{2} \\ \vdots \\ z_{n} \end{bmatrix},它在 nn 维复数向量空间 Cn\mathbb{C}^{n} 中(而不是 Rn\mathbb{R}^{n} 实数向量空间中),则它的模长(平方)计算方式需要进行「修整」为共轭向量(的转置)与向量本身相乘

z2=zTz=z12+z22++zn2\begin{aligned} \|z\|^{2}&=\overline{z}^{T}z \\ &=\|z_{1}\|^{2}+\|z_{2}\|^{2}+\dots+\|z_{n}\|^{2} \end{aligned}

可以使用更简单的符号 zHz^{H} 表示共轭向量的转置 zT\overline{z}^{T}(包含两种运算),该符号读作 Hermitian 埃尔米特

所以复向量的模长平方也可以表示为 z2=zHz\|z\|^{2}=z^{H}z

提示

如果将实数向量的模长(平方)计算公式,直接套用于复向量中,例如 z=[1i]z=\begin{bmatrix} 1 \\ i \end{bmatrix}

z=zTz=[1i][1i]=12+i2=11=0\begin{aligned} z&=z^{T}z \\ &=\begin{bmatrix} 1 & i \end{bmatrix}\begin{bmatrix} 1 \\ i \end{bmatrix} \\ &=1^{2}+i^{2} \\ &=1-1 \\ &=0 \end{aligned}

如果直接进行平方,可能会得到 i2i^{2} 由于它是负数 1-1 所以会对实数部分进行抵消,而不能得到反映向量模长的结果

而使用共轭向量相乘,得到 i2-i^{2} 由于它是 11,所以并不会对虚部进行「扩张」,也不会对实数进行抵消,所得的结果正好是实部与虚部(系数)的平方和

例如对于 z=[1i]z=\begin{bmatrix} 1 \\ i \end{bmatrix} 其模长的平方为

z2=zTz=[1i][1i]=1+(i2)=1+1=2\begin{aligned} \|z\|^{2}&=\overline{z}^{T}z \\ &= \begin{bmatrix} 1 & -i \end{bmatrix} \begin{bmatrix} 1 \\ i \end{bmatrix} \\ &=1+(-i^{2}) \\ &=1+1 \\ &=2 \end{aligned}

类似地,实数向量的内积 inner product/dot product 计算公式 yTxy^{T}x,对于复向量也需要进行「修整」为共轭向量

yTx=y1x1+y2x2++ynxn\overline{y}^{T}x=\overline{y}_{1}x_{1}+\overline{y}_{2}x_{2}+\dots+\overline{y}_{n}x_{n}

内积也可以使用 hermitian 符号表示 yHxy^{H}x

提示

复向量的内积所得到的结果一般也是复数

而复向量的模长(平方)就是复向量与其本身的内积,所得到的结果就比较特别,是各个元素的实部与虚部的平方和

复矩阵

对于仅由实数构成的矩阵 AA,如果它是对称矩阵 symmetric matrix,则满足等式 AT=AA^{T}=A

而对应于复数矩阵,这种矩阵称作 Hermitain Matrix 埃尔米特矩阵,所需满足的等式是 AT=A\overline{A}^{T}=A

在复矩阵中,对称矩阵称为 Hermitain Matrix 埃尔米特矩阵,所满足的等式是 AT=A\overline{A}^{T}=A 也可以简写为 AH=AA^{H}=A

例如 AT=A=[23+i3i5]A^{T}=A=\begin{bmatrix} 2 & 3+i \\ 3-i & 5 \end{bmatrix}

提示

在复矩阵中的 Hermitain Matrix 埃尔米特矩阵,与实数矩阵中的对称矩阵具有类似的特性,即它的特征值 eigenvalue 是实数,特征向量 eigenvector 相互垂直/正交


对于仅由实数构成的正交矩阵 QQ,满足的等式 QTQ=IQ^{T}Q=I

具体而言,各列向量 qiq_{i} 需要满足以下公式

qiTqj={0,if ij1,if i=jq_{i}^{T}q_{j}=\begin{cases} 0, & if \ i \ne j \\ 1, & if \ i = j \end{cases}

而对应于复数矩阵,这种矩阵称作 Unitarty Matrix 酉矩阵,各列向量 qiq_{i} 需要满足以下公式

qiTqj={0,if ij1,if i=j\overline{q}_{i}^{T}q_{j}=\begin{cases} 0, & if \ i \ne j \\ 1, & if \ i = j \end{cases}

在复矩阵中,正交矩阵称为 Unitarty Matrix 酉矩阵,所满足的等式可以简写为 QHQ=IQ^{H}Q=I

傅里叶矩阵

傅里叶级数 Fourier series 是一种将周期性函数或信号表示为不同频率函数(三角函数)之和的方法

f(x)=a0+a1cosx+b1sinx+a2cos2x+b2sin2x+f(x)=a_{0}+a_{1}\cos x+b_{1}\sin x+a_{2}\cos 2x+b_{2}\sin 2x+\dots

在处理有限数据集时,离散傅里叶变换是实现这种分解的关键,以下用矩阵的形式来表示

Fn=[111111ww2wn11w2w4w2(n1)1wn1w2(n1)w(n1)2]F_{n}= \begin{bmatrix} 1 & 1 & 1 & 1 & 1 \\ 1 & w & w^{2} & \dots & w^{n-1} \\ 1 & w^{2} & w^{4} & \dots & w^{2(n-1)} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & w^{n-1} & w^{2(n-1)} & \dots & w^{(n-1)^{2}} \end{bmatrix}

以上是一个 n×nn \times n 的傅立叶矩阵,它属于酉矩阵(正交矩阵),各列向量相互垂直/正交

索引值

傅里叶变换常用于处理信号,在物理中数据集的索引值一般是从 00 开始的,而在纯数学研究中数据集的索引值则是从 11 开始的

在傅里叶矩阵中沿用物理习惯,索引值从 00 开始

其中各元素的通式是 (Fn)ij=wij(F_{n})_{ij}=w^{ij}(其中 i,j=0,,n1i,j=0, \dots, n-1,索引值从 00 开始)

对于傅里叶矩阵 FnF_{n} 中的元素 ww,满足 wn=1w^{n}=1 所以 w=ei2π/n=cos(2π/n)+isin(2π/n)w=e^{i\cdot 2\pi/n}=\cos(2\pi/n)+i\sin(2\pi/n),则 ww 是落在(极坐标系)复平面的单位圆上

所以 ww 是具有周期的,例如对于 F4F_{4},则 ww 是位于复平面单位元的(逆时针)四分之一处 w=ei2π/4=eπ2i=iw=e^{i \cdot 2\pi/4}=e^{\frac{\pi}{2}i}=i,那么 w2=i2=1w^{2}=i^{2}=-1w3=i3=iw^{3}=i^{3}=-iw4=i4=1w^{4}=i^{4}=1 周期为 44

提示

以上关于 ww 的公式变换在课堂中并没有证明,应该是使用了欧拉公式将复指数函数转换为三角函数

eix=cosx+isinxe^{ix}=\cos x+i\sin x

当变量为 x=πx=\pi 时,可得 eiπ=cosπ+isinπ=1+0e^{i\pi}=\cos \pi+i\sin \pi=-1+0

一般写成 eiπ+1=0e^{i\pi}+1=0 称为欧拉恒等式,被尊称为「最美的数学公式」,因为该公式将 eeiiπ\pi1100 这五个数学中特殊的数结合在一起了

可以使用一些支持复数的在线计算器,基于欧拉公式将复数幂指数转换为三角函数

快速傅里叶变换

根据前面的推导,可以得到 4×44 \times 4 傅里叶矩阵

F4=[11111ii2i31i2i4i61i3i6i9]=[11111i1i11111i1i]\begin{aligned} F_{4}&= \begin{bmatrix} 1 & 1 & 1 & 1 \\ 1 & i & i^{2} & i^{3} \\ 1 & i^{2} & i^{4} & i^{6} \\ 1 & i^{3} & i^{6} & i^{9} \end{bmatrix} \\ &= \begin{bmatrix} 1 & 1 & 1 & 1 \\ 1 & i & -1 & -i \\ 1 & -1 & 1 & -1 \\ 1 & -i & -1 & i \end{bmatrix} \end{aligned}

4×44 \times 4 傅里叶矩阵可以对一个具有四个分量(四个数据点)的向量进行傅里叶变换,通过将 F4F_{4} 与向量相乘

例如向量 [1000]\begin{bmatrix} 1 \\ 0 \\ 0 \\ 0 \end{bmatrix} 表示一个在时间点为 00 时所记录得到的信号值,可以通过 F4F_{4} 矩阵对其进行傅里叶变换

[11111i1i11111i1i][1000]=[1111]\begin{bmatrix} 1 & 1 & 1 & 1 \\ 1 & i & -1 & -i \\ 1 & -1 & 1 & -1 \\ 1 & -i & -1 & i \end{bmatrix} \begin{bmatrix} 1 \\ 0 \\ 0 \\ 0 \end{bmatrix}= \begin{bmatrix} 1 \\ 1 \\ 1 \\ 1 \end{bmatrix}

通过傅里叶变换将这一个信号分解到四个频率上,它们具有相同的值

提示

可以再使用 F4F_{4} 矩阵对分解的结果向量进一步变换

[11111i1i11111i1i][1111]=[4000]=4[1000]\begin{bmatrix} 1 & 1 & 1 & 1 \\ 1 & i & -1 & -i \\ 1 & -1 & 1 & -1 \\ 1 & -i & -1 & i \end{bmatrix} \begin{bmatrix} 1 \\ 1 \\ 1 \\ 1 \end{bmatrix}= \begin{bmatrix} 4 \\ 0 \\ 0 \\ 0 \end{bmatrix}= 4 \begin{bmatrix} 1 \\ 0 \\ 0 \\ 0 \end{bmatrix}

可以恢复得到原向量(与之平行的向量)

用公式表示以上运算 F4HF4v=vF^{H}_{4}F_{4}v=v 可知 F4HF4F^{H}_{4}F_{4}II,可证得 F4F_{4} 是酉矩阵

这也符合前面的总结,即傅里叶矩阵是酉矩阵(对应于实数矩阵中的正交矩阵)

在进一步变换所得到的向量是 [4000]\begin{bmatrix} 4 \\ 0 \\ 0 \\ 0 \end{bmatrix} 而不是 [1000]\begin{bmatrix} 1 \\ 0 \\ 0 \\ 0 \end{bmatrix} 由于所乘上的矩阵 F4F_{4} 严格而言「不是」酉矩阵,由于它的各个列向量的模长并不是 11,矩阵应该乘上系数(各个列向量的模长的倒数) 1nFn\frac{1}{\sqrt{n}}F_{n} 才是酉矩阵

在进行傅里叶变换时,傅里叶矩阵 F2nF_{2n} 与向量 xx 相乘,如果以矩阵的元素为基准,来计算运算操作的复杂度,则需要 (2n)2=4n2(2n)^{2}=4n^{2} 次运算

由于构成傅里叶矩阵的元素 ww 具有周期性,例如 w2n2=wnw_{2n}^{2}=w_{n},所以高阶的傅里叶矩阵可以分解为更低阶的傅里叶矩阵,简化傅立叶变换的运算步骤

F2n=[IDID][Fn00Fn]PF_{2n}= \begin{bmatrix} I & D \\ I & -D \end{bmatrix} \begin{bmatrix} F_{n} & 0 \\ 0 & F_{n} \end{bmatrix} P

其中 II 是单位矩阵,DD 是对角矩阵,PP 是置换矩阵,FnF_{n} 是更低阶的傅里叶矩阵

D=[10000w0000w20000wn1]D= \begin{bmatrix} 1 & 0 & 0 & \dots & 0 \\ 0 & w & 0 & \dots & 0 \\ 0 & 0 & w^{2} & \dots & 0 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \dots & w^{n-1} \end{bmatrix}

对角矩阵 DD 的维度是 n×nn \times n,对角线上的元素是由 ww 及其高次幂构成

P=[1000000010000000100100000001000000001]P= \begin{bmatrix} {\color{Red}1 } & 0 & 0 & 0 & \dots & 0 & 0 \\ 0 & 0 & {\color{Red}1 } & 0 & \dots & 0 & 0 \\ \vdots & \vdots & \vdots & \vdots & \ddots & \vdots & \vdots \\ 0 & 0 & 0 & 0 & \dots & {\color{Red}1 } & 0 \\ 0 & {\color{Blue}1 } & 0 & 0 & \dots & 0 & 0 \\ 0 & 0 & 0 & {\color{Blue}1 } & \dots & 0 & 0 \\ \vdots & \vdots & \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & 0 & 0 & 0 & {\color{Blue}1 } \end{bmatrix}

置换矩阵 PP 的维度是 2n×2n2n \times 2n,当它与向量 xx 相乘时,其的作用(对于矩阵而言就是行交互)对向量的元素进行「重排序」,根据矩阵 PP 的元素的排布规律,可知它会将向量 xx 的偶数位置的元素(索引值从 00 开始)x0,x2,x4,x_{0}, x_{2}, x_{4}, \dots 提到前面,然后才是奇数位置的元素

傅里叶矩阵 f2nf_{2n} 通过以上分解,傅里叶变换就变成了计算两个 FnF_{n} 与向量相乘,可以简化运算步骤,从原来的 (2n)2(2n)^{2} 降低到 2×n22 \times n^{2},再算上「修正」矩阵与向量相乘的步骤(其中置换矩阵 PP 的运算十分简单,只是对原向量的元素进行重排序,主要的运算消耗是与 DD 相乘,但是由于 DD 是对称矩阵,它除了对角线上其他位置的元素都是零,所以运算也是相对简单的)

而对于 FnF_{n} 可以使用同样的方法进行分解,以降低运算量,依此类推,可以将 F2nF_{2n} 所对应的运算复杂度 (2n)2(2n)^{2} 降低到 12nlog2(n)\frac{1}{2}n\log_2(n)

以上通过将傅里叶矩阵进行分解而降低运算复杂度的算法/步骤,称为快速傅里叶变换 Fast Fourier Transform,简称为 FFT


Copyright © 2024 Ben

Theme BlogiNote

Icons from Icônes