欢迎光临散文网 会员登陆 & 注册

数学实现信号分析[4]: 离散傅里叶变换

2019-08-11 16:10 作者:nyasyamorina  | 我要投稿

*** 越来越简洁的封面 ***

在之前说过了普通的傅里叶变换, 而且也讲过在计算机里是不存在连续的东西, 针对计算机的离散数据, 专门有一种东西叫做离散傅里叶变换 (Discrete Fourier transform), 在学习DFT之前希望读者可以看一下下面关于FT的视频, 这种"缠绕机器"的概念始终贯穿在DFT中 (特别是后面的快速傅里叶变换FFT)

之前说到在计算机里时间是不重要的, 重要的是数据排列顺序, 为了方便理解"频率"这个属性, 我们吧一串间隔相同的数列紧凑地放在  t ∈ [0, 1)  中, 这样频率就有了相应的定义了. 如下图

序列 {xi} 均匀排列在 [0, 1) 之间

为了适应离散数据, 原傅里叶变换必须作一些调整

这里记总数据数为 n,  则第 i 个数据对应的t为 i / n , 那么原傅里叶变换再根据定积分的定义可以得到DFT的计算式子, 并且因为数据是分布在0到1之间, 那么频率必须是整数倍, 数据之间间隔为1/n, 那么最大频率为n就已经足够了, 更有在积分定义式里的dt也可以直接无视, 因为结果只会相差n倍, 那么得到:

DFT的计算, xi 为数据

图解:

黑色点为原点0, 蓝色点为DFT结果/n (既是重心)

w = 0
w = 1

w = 2
w = 3
w = 4
w = 5
w = 6
w = 7

现在就来尝试一下用代码实现DFT吧

首先要定义基本的东西

然后就是DFT

我们可以来检验一下

我们可以看到计算结果是和numpy里精确的结果一样 (忽略浮点数误差的话)


拓展:

傅里叶变换通常都有相应的反变换 (即由频率还原f(t)), DFT也有相应的反变换 iDFT, 我这里直接扔代码(无注释), 推到正确的iDFT就当作是作业吧   (这里我假设输入数据全为实数)



终于结束啦, 发一下上一期的那首歌的DFT结果

下一篇预告: FFT >> DFT

数学实现信号分析[4]: 离散傅里叶变换的评论 (共 条)

分享到微博请遵守国家法律