漫步线性代数十九——快速傅里叶变换(上)

傅里叶级数是无限维度上的线性代数,它里面的向量实际上是函数 f(x) ;他们分别投影到正弦和余弦上;然后乘以傅里叶系数 ak,bk 。用 ak,bk 乘以无限的正弦和余弦序列就重新构建了函数 f(x) ,这是个经典的情况,当然也是傅里叶希望看到的,但是在实际计算中,我们用的是离散傅里叶变换,傅里叶依然存在,只不过是在有限维而已。

这是基于正交的线性代数,输入是一个数列 y0,,yn1 而不是函数 f(x) ,输出 c0,,cn1 的长度和输入一样, y,c 之间是线性关系,所以肯定存在一个矩阵,而这个矩阵就是我们要介绍的傅里叶矩阵 F ,整个数字信号处理的技术依赖于它,它有许多非凡的性质。

我们获取完语音或图像或电视或声呐信号后,都需要将其数字化,这些信号用傅里叶矩阵F进行变换,随后还能变换回去——也就是重构,这里面的关键就是 F,F1 能够快速的进行变换:

F1 必须简单, F,F1 做乘法计算速度要快。

F1 很早就有了,它的形式和 F 很像。事实上,F对称并且正交(不考虑因子 n ),但是它有一个缺点,也是唯一缺点:存在复数。当然,这个代价相对比较少,在我们的接受范围内。这个难度被降到了最低全是基于一个事实: F,F1 的所有元素是某个数 w 的幂次,并且wn=1

4×4 的离散傅里叶变换中使用 w=i (注意 i4=1 ),整个DFT的关键点取决于 F 和它复数共轭F¯的乘积:

FF¯=11111ii2i31i2i4i61i3i6i911111(i)(i)2(i)31(i)2(i)4(i)61(i)3(i)6(i)9=4I(1)

FF¯ 告诉我们 F1=F¯/4 F 的列是正交的(在4I中的得到零), n×n 矩阵会得到 FF¯=nI ,然后 F 的逆仅仅是F¯/n。其中的奥妙在于看到复数 w=e2πi/n (当 n=4 时它等于 i )。

F的逆非常容易获得,这使得离散变换非常重要, F,F1 的乘法可以非常快速的完成,而不需要像往常矩阵乘法那样计算 n2 次乘法。矩阵向量乘法 Fc,F1y 只需要 12nlogn 步即可,这就是快速傅里叶变换。

这部分我们先从 w 和它的性质开始,然后转到F1,最后将FFT——快速傅里叶变换。在信号处理中最大的应用就是滤波,成功的关键在于卷积运算。用矩阵术语来说就是,所有的循环矩阵(circulant matrices)都可以用 F 来对角化,所以他们可以化简为两个FFT 和一个对角矩阵。

复根

实数方程可以由复根,例如方程x2+1=0的出现导致了 i (还有i)的发明,我们也将其称为一个解,并且这种情况是封闭的。如果有人问 x2i=0 的解,依然是有答案。复数的平方根还是复数。现在考虑一种组合 x+iy ,其中 x 表示实部,y表示虚部,所有 n 阶的实或复多项式有n个根(可能存在复数,也可能存在重复的),这个是代数的基本定理。

我们对 x4=1 这样的方程很感兴趣,它有四个解——1的四次根。1的两个平方根是 1,1 ,四次根就是平方根的平方根,也就是 1,1,i,i ,因为 i2=1 ,所以 i4=1 。对于八次根我们需要 i 的平方根,这会求出w=(1+i)/2,求 w 的平方后得到(1+2i+i2)/2,也就是 i (因为1+i2等于零),由此我们得到 w8=i4=1

在傅里叶矩阵中复数 cosθ+isinθ 是非常特别的,实部我们用 x 轴表示,虚部用y轴表示(图1),那么数字 w 位于单位圆上;它距离原点的距离是cos2θ+sin2θ=1,它与水平线之间的夹角是 θ ,在后面的文章我们会看到复数会以特征值的方式出现,目前为了求解 wn=1 ,我们只需要这些特殊的点,而且他们都在单位圆上。

w 的平方比较简单:

w2=(cosθ+isinθ)2=cos2θsin2θ+2isinθcosθ

实部 cos2θsin2θ cos2θ ,虚部 2sinθcosθ sin2θ (注意这里没有 i ,虚部是一个实数),因此w2=cos2θ+isin2θ w 的平方依然在单位院上,但是角度变成原来的两倍2θ,据此我们猜测 wn 位于夹角为 nθ 的线上,事实上的确如此。

有一个更好的方式来计算 w 的幂,正弦和余弦的组合还可以表示成如下方式:

cosθ+isinθ=eiθ(2)

当指数 iθ 是虚部时乘法规则(像 (e2)(e3)=e5 )依然成立, w=eiθ 的幂依然在单位圆上:

w2=ei2θ,wn=einθ,1w=eiθ(3)

n 次幂的角度对应的是nθ,当 n=1 时,倒数 1/w 的角度是 θ ,如果我们用 cosθ+isinθ 乘以 cosθ+isinθ ,将得到1:

eiθeiθ=(cosθ+isinθ)(cosθisinθ)=cos2θ+sin2θ=1

这是原书作者的小批注:我曾经收到来自纽约MIT监狱的一封信,有人问我欧拉方程(2)是正确的吗,因为数学中三个最关键的函数以如此优雅的方式组合在一起太令人震惊了。最好的解答就是观察指数的幂级数:

eiθ=1+iθ+(iθ)22!+(iθ)33!+

实部 1θ2/2+ cosθ ,虚部 θθ63/6+ sinθ ,由此得证。


这里写图片描述
图1

利用这个公式,我们就可以求解 wn=1 ,此时可将其变成 einθ=1 ,这样的话 nθ 肯定围绕着单位圆回到起点。方程的解选为 θ=2π/n :1的 n 次根就是:

wn=e2πi/n=cos2πn+isin2πn(4)

它的 n 次幂是e2πi,也就是1,当 n=8 时,它的根是 (1+i)/2

w4=cosπ2+isinπ2=iw8=cosπ4+isinπ4=1+i2

四次根在 θ=90 的方向,也就是 14(360) ,其他的四次根是 i2=1,i3=i,i4=1 ,八次根是 w28,w38,,w88 ,这些根等价于单位圆在区间 2π/n 上的点。这里再强调一下 w8 的平方是 w4 ,这是快速傅里叶变换的本质。这些值相加为零,首先是考虑简单的 1+i1i=0 ,然后是复杂的

1+w8+w28++w78=0(5)

一个证明方式是左边乘以 w8 ,得到 w8+w28++w88 ,其中 w88=1 ,数值没有发生变换,从图上来说,这八个点都旋转了 45 ,但是依然是这八个点。因为零是乘以 w8 后唯一不会变化的数,所以他们的和必须是零。当 n 是偶数时这些根可以成对消掉(像1+i2=0,i+i3=0),但是1三次根相加也是零。

傅里叶矩阵和它的逆

在连续情况下,傅里叶级数在整个区间上重现函数 f(x) ,它用了无限多个正弦和余弦函数(或者指数函数)。在离散情况下,只需要选择 n 个系数c0,,cn1,所以只需要 n 个点的方程。假设输入序列是y=2,4,6,8,输出序列是 c0,c1,c2,c3 ,那么根据 Fc=y 得:

c0c0c0c0++++c1ic1i2c1i3c1++++c2i2c2i4c2i6c2++++c3i3c3i6c3i9c3====2468(6)

(6)中的四个方程需要找到有四项的傅里叶级数,使得可以在区间 0 2π上将输入和四个点 x 匹配:

c0+c1eix+c2e2ix+c3e3ix=2468x=0x=π/2x=πx=3π/2

这些就是(6)中的四个方程,在 x=2π 处级数回到 y0=2 ,然后继续周期性的循环。离散傅里叶级数最好写成复数形式,也就是用指数 eikx 的组合而不是 sinkx,coskx

对于每个 n ,联系y,c的矩阵存在逆,用 n 个方程来表示需要有限级数c0+c1eix+( n 项目)和y(在 n 个点)一致,第一项在x=0的地方,也就是 c0++cn1=y0 ,其余的点都有 w 的幂,整个问题就是Fc=y

Fc=y11111ww2w(n1)1w2w4w2(n1)1wn1w2n1w(n1)2c0c1c2cn1=y0y1y2yn1(7)

傅里叶矩阵 F 中每项为Fjk=wjk,这样的话我们很自然的从 0 n1计算行和列,而不是用 1 n。对于第一行 j=0 ,第一列 k=0 ,对应的元素为 w0=1

为了求出 c ,我们需要知道F的逆。在 4×4 的情况下, F1 1/i=i 开始着手,这里用到了一个通用的规则:复数 w1=w¯ ,它位于夹角为 2π/n 的直线上,其中 w 位于夹角+2π/n的直线上。

22、根据 w1=1/w=w¯ ,矩阵的逆为:

F1=1n11111w1w2w(n1)1w2w4w2(n1)1w(n1)w(n1)2=F¯n(8)

据此

1111e2πi/3e4πi/31e4πi/3e8πi/3

的逆为

F1=131111e2πi/3e4πi/31e4πi/3e8πi/3

F j行乘以 F1 j 列都是(1+1++1)/n=1,比较麻烦的是非对角线部分,例如 F j行乘以 F1 k 列为零:

11+wjwk+w2jw2k++w(n1)jw(n1)k=0(9)

这个方程的关键点是看出这些项是 W=wjwk 的幂:

1+W+W2++Wn1=0(10)

W 依然是1的一个根:Wn=wnjwnk等于 1j1k=1 。因为 j k不相等,所以 W 和1不相等,由此知道在单位院上你还存在其他根,这些根都满足1+W++Wn1=0。另一个证明有下面的方程:

1Wn=(1W)(1+W+W2++Wn1)(11)

因为 Wn=1 ,所以左边等于零。但是 W 又不等于1,所以最后那个因式必须为零,也就是说F的列是正交的。

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值