PART2 离散傅里叶变换

PART 2 离散傅里叶变换

1. 离散时间傅里叶变换

以上内容,属于对傅里叶变换较为基础的数学内容,在《微积分》等课程中有不少详尽的介绍。接下来,将会面对如何在计算机中实现傅里叶变换的问题。

首先,观察傅里叶变换公式:

F(ω)=f(t)ejωtdtf(t)=12πF(ω)ejωtdω

有这么几个问题:

  1. 在时域上,是负无穷到正无穷的积分,显然在计算机上无法做到;
  2. 在频域上,也是负无穷到正无穷的积分,显然在计算机上也无法做到;
  3. 原函数 f(t) 是连续非周期函数,“连续”这个条件在计算机上没法实现。

因此,需要对傅里叶变换进行离散化,从而更好的在计算机上实现相关功能。

首先,我们引入离散时间傅里叶变换。

1.1 离散时间傅里叶变换

为了解决上面提出的第三个问题,自然而然地引入采样的概念。通过采样,将原来的连续信号转变为离散信号,就可以作为计算机的输入了。

沿用之间的假设:对原信号做采样处理

f(t)=n=f(t)δ(tnTs)

其中,f(t) 是采样后的信号序列;δ(tnTs) 为狄克拉函数,nTs 是采样的时刻, Ts 是采样时间间隔,其倒数 fs=1Ts 表示采样频率。假设这满足香农采样定律,fs2fmax

将采样信号带入傅里叶变换中去:

F(ω)=f(t)ejωtdt=n=f(t)δ(tnTs)ejωtdt=n=f(t)ejωtδ(tnTs)dt

根据狄克拉函数的筛选性质:

(1)F(ω)=n=f(t)ejωtδ(tnTs)dt=n=f(nTs)ejωnTs

而在计算机的存储中,通常不会涉及 Ts 的值具体是多少,而是按照一个序列进行存储所以采用序列的形式代替,有:

(2)F(ω)=n=f(n)ejωn

此式即为离散时间的傅里叶变换(DTFT)

观察 (3) 式,我们发现相比于原来的傅里叶变换,首先是积分符号变成了求和符号,这就说明原来的连续时间变量变成了离散时间变量(狄克拉函数的作用)同时,在采样定律的限制下,频域不再是无穷,而是约束在 fs2 之内;

其次是函数自变量由 t 变成了 n,n是序列的索引,满足 t=n×Ts ,这样,Ts 就作为离散时间的最小分度,称为时间分辨率。

最后,发现即便是解决了连续时间的问题,但是求和上下限依旧为无穷,即针对的还是无限长时间序列,得到一个无限长的频谱序列,无法在计算机上实现。因此,需要更近一步处理,即为离散傅里叶变换。

2. 离散傅里叶变换

在离散时间序列傅里叶变换中,有:

F(ω)=n=f(n)ejωn

我们想,是否可以通过一定的方式,改变无限长的时间序列。幸运的是,在计算机的采样过程中,得到的一定是一段序列,而不是无限长的序列!这就说明,傅里叶变换中时间无限长的概念并不存在。然而,对于这一段时间序列,显然是不能进行傅里叶变换的。这就又回到了非周期函数做傅里叶展开时的问题,面临两种处理方式:

如果让周期趋于无穷,显然不可行。所以只能进行周期延拓。而一旦进行周期延拓,对应的频谱就变成了离散的,受限于采样定律,又是有限的。所以,沿着这个思路就可以解决最初提出的三个问题。

2.1 离散傅里叶变换

假设我们得到的序列共有 N 个数据,那么对应的离散傅里叶变换就是:

F(ω)=n=0N1f(n)ejωn

但是注意到,周期函数的频谱是离散的,显然不能用 ω 作为变量。

类似于时间分辨率,离散的频率一定存在最小分度,将其称为频率分辨率,记作:ωs ,令 k 作为离散频谱的索引,有 ω=kωs ,类似于 Ts 由采样频率决定,ωs 由信号周期决定。这是因为周期越大,频率越小,角频率也就越小,最大的周期就是 T=NTs

此时:

F(k)=n=0N1f(n)ejkωsn=n=0N1f(n)ejk2πTn=n=0N1f(n)ejk2πNTsn

在计算机的存储中,认为 Ts=1,将 n 变为序列,就有离散傅里叶变换(DFT):

F(k)=n=0N1f(n)ej2πkNn

我们再回到最初的傅里叶变换,是否也存在离散傅里叶逆变换?答案是存在的。这里不加证明的给出离散傅里叶变换式:

f(n)=1Nn=0N1F(k)ej2πkNn

就此,得到离散傅里叶变换对:

(3)F(k)=n=0N1f(n)ej2πkNnf(n)=1Nk=0N1F(k)ej2πkNn

观察 (3) 式,可以看出:

  1. 在时域上,通过采样,得到 0~N-1 共 N 个时域数据点,这些时域点之间实际的时间间隔是 Ts ,对N个点进行周期延拓,即可得到离散的频谱。采样定律限制了离散的频谱不是无限的。
  2. 在频域上,通过采样,得到 0~N-1 共 N 个频域数据点,这些频域点之间实际的频率间隔是 ωs ,对N个点进行周期延拓,即可得到离散的时谱。采样定律限制了离散的时谱不是无限的。
  3. 逆变换中的 N 分之一是从 dω 中提出来的。

2.2 离散傅里叶逆变换的证明

在后续的探索中,发现还是有必要对离散傅里叶逆变换(IDFT)进行一个简单的证明。

由傅里叶逆变换公式:

f(t)=12πF(ω)ejωtdω

在离散化后,取

t=nTsω=kωs

其中满足

Ts=1fsωs=2πT=2πNTs

此时,对 dw 的积分可以看作是对 kωs 中 k 的求和,因此:

f(nTs)=12πk=0N1F(kωs)ejkωsnTsd(kωs)

当序列化表示, Ts=1 时,有:

f(n)=12πk=0N1F(k)ejk2πNTsnTsd(k2πN)=1Nk=0N1F(k)ej2πkNn

即可得证离散傅里叶逆变换。

2.3 关于1N 的说明

事实上,离散傅里叶变换也可以从傅里叶级数推出。(关于这部分内容,将在最后的说明中加以阐述)

由傅里叶级数:

f(t)=F(nω1)ejnω1tF(nω1)=1T1[T12T12f(t)ejnω1tdt]n=0,±1,±2,

当取:

t=nTsT1=NTsω=kωsTs=1fsωs=2πT1=2πNTs

可以得到:

(4)F(k)=1Nn=0N1f(n)ej2πkNnf(n)=k=0N1F(k)ej2πkNn

(5) 式与 (4) 式比较,发现 1N 的位置出现在不同的地方!那么这两种公式孰对孰错?

事实上,这两种写法都是正确的。因为在傅里叶变换的过程中,我们关注点在于后面的 F(k) ,至于前面的系数,更多的是为了满足正变换和逆变换之间的自洽,即可以相互推导即可。所以, 1N 的位置不论放在哪里都可以,哪怕写成下面的形式也是可以的:

(5)F(k)=1Nn=0N1f(n)ej2πkNnf(n)=1Nk=0N1F(k)ej2πkNn

再利用Python实现的过程中,我们可以再次深刻的认知到这一点。

接下来,我们通过Python中程序验证公式的正确性。[附录 Ⅱ ]


了解更多 傅里叶变换

posted on   VicoZhang  阅读(204)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示