傅里叶变换的一种交互式理解指南

傅里叶变换是有史以来最深刻的见解之一。不幸的是,它的真正含义往往被掩埋在密集的方程之下:

呀。与其跳进那些符号,我们不如直接亲身体验一下这个关键的思想。下面是对傅里叶变化的一个易懂的隐喻:

  • 傅里叶变换做了什么?给它一杯冰沙,它能发现食谱。
  • 如何做到的?将冰沙通过过滤器过滤,提炼出各种成分。
  • 为什么进行傅里叶变换?比起冰沙本身,菜谱更加容易分析、比较和修改。
  • 我们怎么重新得到冰沙?将各种成分混合起来。

下面是上述内容的"数学 描述"版本:

  • 傅里叶变换采用基于时间的模式,测量每一种可能的周期,并返回整个“周期菜谱”(找到每个周期的振幅、偏移量和转速)

  应该开始介绍公式了吗?不!让我们亲自动手,通过模拟仿真来体验一下任何的图案是如何由一系列的循环圆圈来构建的。

如果一切顺利,我们将会有一个惊喜时刻,并直观地认识到为什么傅里叶变化是合理的。我们会把详细的数据分析留作后续研究。

这并不是通过公式进行的强制推导,我希望我是水到渠成的推出这一认识。让我们继续!

从冰沙到菜谱

一种数学变化其实就是一种视角的转换。我们根据计量物体的不同将计数符号由“单个物体”(地上的线,计分系统)变化为“10个一组”(十进制)。游戏计分?挨个加上去。增长的特别多?请使用十进制。

傅里叶变换将我们从消费者的角度转换到生产者的角度。从 我有什么?到 它是由什么组成的? 

换句话说:给我们一杯冰沙,让我们来发现它的食谱。

为什么?因为食谱是对饮品的非常好的描述。你不会想要分享一个一点一滴非常细致的分析,你会想要说“我有一杯橘子/香蕉冰沙”。食谱比起冰沙本身更容易分类、比较和修改。

所以,给我们一杯冰沙,如何从中找到食谱呢?

很好,想象一下,你有如下的一系列过滤器:

  • 倒下通过“香蕉”过滤器:1盎司的香蕉被提取出来
  • 倒下通过“橘子”过滤器:2盎司的橘子
  • 倒下通过“牛奶”过滤器:3盎司的牛奶
  • 倒下通过“水”过滤器:3盎司的水

通过过滤各个成分我们可以反向工程分解出菜谱。那么潜在的风险是什么呢?

  • 过滤波必须是独立的。香蕉过滤器需要能够捕捉香蕉并且不捕捉其他任何东西。即使再加一点橘子也不会影响过滤后的香蕉数值。
  • 过滤波器必须是完整的。如果遗漏了某种过滤器我们就不能得到真正的食谱。(“那里面还有一些芒果!”)。我们通过过滤器进行的收集必须收集到任何一种可能的成分。
  • 各种成分必须是可混合的。冰沙必须能够被分离出来也能够被反向混合回去。(一块曲奇?就不是这样。谁想要面包屑呢?)无论以任何次序分离和混合成分都必须得到同样的结果。

以波形看世界

傅里叶变换有这样一个独特的观点:是否任何波形都可以被过滤为一簇圆形轨迹?

哇。这个想法是不可思议的,可怜的乔瑟夫·傅里叶一开始被否决了这一想法。(真的吗?乔,即使是一个梯形曲线也能由圆轨迹组成吗?)

抛开数学界在这一问题上数十年的辩论,我们希望学生毫无问题的吸收这一想法。让我们跟着直觉走。

傅里叶变换为一个信号找到食谱,就跟我们的冰沙的过程类似:

  • 由一个时间信号开始
  • 应用过滤器来测量每一个可能的“圆形成分”
  • 收集完整的配方,列出每一个“圆形成分”的数量

等一下。大部分指导材料在这个地方就会激动地将工程应用甩到你脸上。别紧张;我们只把这些例子当做“哇,我们终于发现先前令人困惑的想法背后的DNA了。”

  • 如果地震的震动可以被分为“成分”(不同速度和振幅的震动),那么建筑在设计时就可以避免与最强的那些成分有交互。
  • 如果声音波形能被分为组成部分(低音和高音频率),我们可以增加我们关心的部分,并且隐藏我们不关心的部分。随机信号的爆裂声可以被消除。相似的“声音配方”也许可以进行比较。(音乐识别服务就是比较配方,而不是原始的音频片段)
  • 如果电脑数据能用振荡模型来表示,也许就可以忽视掉最不重要的那一部分。这种“有损压缩”能够极大地缩减文件的大小(这就是为什么JPEG和MP3文件比起原始的.bmp和.wav文件要小得多。)
  • 如果一段无线电波是我们的信号,我们可以使用过滤器来聆听特定的频道。在前面的冰沙世界想象一下每个人都关注某一特定的成分:亚当关注苹果,鲍勃关注香蕉而查理关注花椰菜(sorry bud)。(注:此处翻译不出来,蒙了……)

 傅里叶变换在工程学中的确有用,但它更是一个关于通过明显现象发现本质的隐喻。

以圆的角度去思考,而不仅仅是正弦曲线

我最大困惑之一就是如何区分“正弦波”和“圆”的定义。

  • 一条“正弦曲线”是一种特殊的来回振荡的图案(一条正弦或余弦波形),并且百分之九十九的情况下,它指的是一维的运动。
  • 你可能知道一个“圆”是一个圆形的,二维的图案。如果你喜欢说的复杂一点,你也可以称呼一个圆轨迹为“复正弦曲线”。

将一个圆周轨迹标为“复正弦曲线”就像描述一个单词为一个“多字母”。你对细节的要求进入了错误的标准。单词是关于它们所表示的概念的,而不是可以被分解成的字母。

傅里叶变换是关于圆周轨迹的(不是一维的正弦曲线)并且欧拉公司是一种非常聪明的方法将两者整合起来。

 我们必须使用虚指数来描述一个圆周运动吗?并不是。但这样既方便又紧凑。当然,我们可以将轨迹描述为二个维度(实部和虚部)上的协同运动,但别忘了大前提:我们只是在描述圆上的运动。

沿着圆轨迹        

让我们假设我们在通过电话聊天,我希望我们同步画出同样的圆。(你之前同意的!)我应该怎么描述呢?

  • 这个圆有多大?(振幅,即半径大小)
  • 我们以多快的速度画?(频率。1圈/秒就是1Hz的频率或者是2πr/秒)
  • 我们从哪里开始画?(相角,0度就是x轴)

我可以说“半径为2英寸,45角开始,每秒画一圈,开始”。0.5秒之后,我们都应该画到了:开始角度+画过的角度=45+180=225度(在2英寸的圆上)。

 

 每一个圆轨迹都需要一个大小、速度和开始角度(振幅/频率/相角)。我们甚至可以混合轨迹:想象微小的汽车以不同速度在圆上行驶。

所有圆的轨迹的混合就是我们的信号,就像所有成分的混合口味就是我们的冰沙一样。

下面是对基础的圆周轨迹的模拟仿真:

 

每个圆的大小都按照顺序列出来。圆[0 1]表示

  • 0振幅,0Hz的循环(0Hz=一个常数循环,在0度沿着x轴)
  • 1振幅,1Hz的循环(每间隔一秒完成一次循环)

现在是标记部分:

  • 蓝色图表测量了循环的实数部分。另一个优美的数学困惑:一般一个圆的实数轴是水平的,但它的大小是表示在竖直轴上的。如果你喜欢可以想象上将圆旋转90度。
  • 时间点按照最高的频率在空间上划分。1Hz的信号需要两个时间分别表示开始和暂停(一个单独的数据点没有频率)。时间值[1 -1]表示在那些等空间间隔上的幅值。

我怎么觉得?[0 1]就是单纯的1Hz的圆。

现在让我们在混合上加上一个2Hz的圆。[0 1 1]表示“0Hz的幅度是0,1Hz的幅度是1,2Hz的幅度是1”:

哇,现在这辆小汽车逐渐变得狂野了:绿色的线是1Hz和2Hz的循环轨迹,而蓝色的线是混合的结果。切换蓝色的复选框可以清楚地看到最终的结果。这一混合的“口味”是一个摆线,它从最大值出开始并在接下来的间隔里逐渐降低。

黄色的点是我们真正测量信号值的时刻。我们定义了三个循环(0Hz,1Hz,2Hz),每个点都是信号途径上的1/3处。在这种情形下,循环[0 1 1]形成了时刻值[2 -1 -1],它从最大值2处开始,逐渐降至低处(-1)。

噢!我们不能忘记相角,就是开始角度。使用振幅:角度来设置相角。所以[0 1:45]就是一个始于45度角的1Hz的圆循环。

 

 这是[0 1]的位移版本。在时间这边,我们得到了[.7 .7]来代替[1 -1],因为我们的轨迹不再准确地随着仍然以中点为界的测量间隔而线性变化(这是可以想象的!)。

傅里叶变换发现了可以匹配任何时域信号的循环速度,振幅和相角的集合。

我们的信号变成了抽象的概念,我们既可以把它看做“时域上的观察结果”也可以看做“频域上的各种成分”。

闲话少说:尝试一下!在模拟器中,输入任何时间或循环图案你想要看到的。如果是时间点,你将会得到满足你想要时间点的循环轨迹的集合(混合成一段“波形”)。

但是……混合波形在黄色时间间隔中不是有着奇怪这数值吗?是的。但是有谁规定在我们不测量的地方信号应该是沿着直线或者曲线前进或者是跳到其他维度呢?这条混合曲线在我们所要求的的等空间点上准确地等于我们需要的数值。

在时间上实现一个峰值(making a spike in time)

我们可以使用循环在时间上实现一个类似(4 0 0 0)的峰值吗?我将使用小括号()来表示一个时间点序列,而中括号[]表示一个循环轨迹序列。

尽管一个峰值对我们这种以时间作为参考系是非常无聊的(一个数据点,不是吗?),但考虑一下在循环世界中它的复杂性。我们的循环成分必须在开始处相互配合(最大值,4),然后“向外激增”,在接下来的时间上每个循环都有拍档相互抵消。剩下的每一个测量点都是0,这对有着多条循环曲线运行而言就是一种棘手的平衡。(我们不能仅仅“将它们关了”)

让我们对每个时间点进行简单的处理:

  • 在0时刻,第一个瞬间,每个循环成分都在它的最大值处。不考虑其他时间点,(4 ? ? ?)由四个循环(0Hz 1Hz 2Hz 3Hz)构成,每一个都是振幅为1,相角为0。(等价于 1+1+1+1=4)
  • 在每一个接下来的测量点(t=1,2,3),所有循环的总和必须被抵消。

窍门是这样:当两个在一个圆的相反两边时(北和南,东和西,等等),它们的混合坐标就是0(如果平衡地分布在0度,120度和240度,3个循环也可以被抵消)。

想象在一个圆上有一簇动点。下面是每个循环在每个测量瞬间的位置:

  Time  0  1  2  3

  --------------------

  0Hz:  0  0  0  0

  1Hz:  0  1  2  3 

  2Hz:  0  2  0  2

  3Hz:  0  3  2  1

注意到3Hz的循环开始于0,移动到位置3,然后位置“6”(只有4个位置,6 modulo 4= 2),最后是位置“9”(9 modulo 4 = 1)。

 当我们的循环有四个单位时,相距半个循环(2个单位)的循环速度将会要么在同一条线上(0,4,8……这样的差别),要么在不同的两边(2,6,10……这样的差别)。

OK。让我们查看一下每个时刻:

  • 时刻0:所有的循环都处于最大值(和为4)
  • 时刻1:1Hz和3Hz曲线相互抵消(位置1和3相反),0Hz和2Hz曲线也相互抵消。总和为0.
  • 时刻2:0Hz和2Hz曲线都在位置0,而1Hz和3Hz曲线都在位置2(位置0的相反边)。总和仍然为0.
  • 时刻3:0Hz和2Hz的曲线相互抵消。1Hz和3Hz的曲线相互抵消。
  • 时刻4(时刻0的重复):所有的循环线性排列。

窍门是各个独立速度的曲线相互取消(0Hz vs 2Hz,1Hz vs 3Hz),或者不同速度曲线成对相互抵消(0Hz+2Hz vs 1Hz+3Hz)。

当每一个循环都有相等的强度和0相角时,我们在开始处取得最大值然后相互抵消。(我还没有一个漂亮的证明--有谁有吗?--但你可以自己看一下。尝试循环序列[1 1],[1 1 1],[1 1 1 1]然后观察我们形成的测量值序列(2 0),(3 0 0),(4 0 0 0))。

 在我的脑海中,我把这些信号标记为“时间尖峰”:他们在一个单独的瞬间有一个值,然后在其他时刻都是0(它的复杂名字叫δ函数)。

下面这是使用一个点集如何可视化最初始的排列:

 

 移动时间尖峰(Moving The Time Spike)

并不是所有的事情都会发生在0时刻。我们可以改变我们的峰值到(0 4 0 0)吗?

这些循环的成分似乎应该跟(4 0 0 0)相似,但循环必须在t=1(一秒钟后的将来)的时刻联合出现最大值。这就是相角用得着的地方。

想象在一场赛跑有4个运动员。正常的赛跑是使每一个人在起跑线出排好,也就是(4 0 0 0)时间模式。无聊。

如果我们想要让每个人同时结束呢?简单。只要让运动员向前或向后移动合适的距离。也许老奶奶应该在终止线前2英尺处开始,而尤塞恩·博尔特可以退后100m开始,最后他们可以携手穿过撞线。

相角转换,也就是开始角度,在循环宇宙中也就是延迟。下面是我们如何调整开始位置使得每个循环延迟了1秒钟:

  • 一个0Hz的循环根本没有移动,所以它已经匹配好了。
  • 一个1Hz的循环在完整的4后后走过一次循环,所以1秒的延迟转换为路程就是1/4圈。相角变化就是后退90度(-90)然后它将在t=1时相角为0,取得最大值。
  • 一个2Hz的循环是1Hz的循环两倍快,所以也需要给两倍的角度去覆盖(-180或+180相角变化--无论哪种都是穿过圆)。
  • 一个3Hz的循环是1Hz的循环三倍快,所以给它三倍的距离来移动(-270或者+90相角转换)。

 如果测量点序列(4 0 0 0)可以由循环序列[1 1 1 1]组成,那么循环点序列(0 4 0 0)也就可以由循环序列[1 1:-90 1:180 1:90]组成。(注:我在使用“1Hz”这个说法,但我表示的是“整个时间段内完成一次循环”)。

哇——我们正在我们的大脑中解析出这些循环。

干涉的可视化图像是类似的,除了联合点是在t=1的时刻。

 

 测试一下你的直觉:你可以制作(0 4 0 0)或者叫2秒的延迟?0Hz没有相角。1Hz有180度,2Hz有360度(也就是0度),然后3Hz有540(也就是180度),所以就是[1 1:180 1:180]。

发现完整的傅里叶变换(Discovering The Full Transform)

最大的洞察点:我们的信号就是一群时间尖峰!如果我们为每个时间尖峰发现配方,我们应该就能为整个信号得到配方。

傅里叶变换按频率建立了配方:

  • 将完整的信号(a b c d)分为“时间尖峰”:(a 0 0 0)(0 b 0 0)(0 0 c 0)(0 0 0 d)
  • 对任何频率(比如2Hz),假设配方都是“a/4+b/4+c/4+d/4”(每一个峰值的振幅被分散在所有频率中)。
  • 等一下!我们需要给每一个峰值补偿一个相角延迟(“一秒延迟”对应的角度取决于频率)
  • 每一个频率的真实配方=a/4(没有补偿)+b/4(1秒补偿)+c/4(2秒补偿)+d/4(3秒补偿)

我们可以通过循环每一个频率从而得到完整的转换。

下面是从“数学话”版本到完整的数学表达:

 

 一些标注:

  • N=我们所拥有的时间点的数量
  • n=我们正在考虑的当前时间点(0……N-1)
  • xn=在时间n时信号值
  • k=我们正在考虑的频率(0Hz一直到N-1Hz)
  • Xk=在信号中频率k的大小(振幅和相角,一个复数)
  • 1/N因子常常用于反向变换(从频域返回到时域)。

 

-----------------------------------------------------------------

未完待更  20200403

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值