DFT
离散傅里叶变换有定义如下
有离散信号f – – = ( f – – [ 0 ] , f – – [ 1 ] , … , f – – [ N − 1 ] ) f _ = ( f _ [ 0 ] , f _ [ 1 ] , … , f _ [ N − 1 ] ) ,它的DFT是离散信号F f – –– – ( F f – –– – [ 0 ] , F f – –– – [ 1 ] , … , F f – –– – [ N − 1 ] ) F f _ ( F f _ [ 0 ] , F f _ [ 1 ] , … , F f _ [ N − 1 ] )
F f – –– – [ m ] = N − 1 ∑ k = 0 f – – [ k ] e − 2 π i k m N F f _ [ m ] = ∑ k = 0 N − 1 f _ [ k ] e − 2 π i k m N
时域和频域的倒数关系
我们回到连续信号,从头开始推导这一关系。
设有一连续信号在时域与频域同时受限,时域与频域都有N N 个采样点(上节课已推导过,时域与频域抽样点的数目是一样的),时域采样间隔为Δ t Δ t ,频域采样间隔为Δ s Δ s ,根据不同的Δ t Δ t 与Δ s Δ s 可以采集到不同的f – – f _ ,与F f – –– – F f _ 。
有N Δ t = L N Δ t = L ,L L 为时间上的限制;N Δ s = 2 B N Δ s = 2 B ,2 B 2 B 为带宽限制。
Δ t Δ s = L N ⋅ 2 B N = 2 B L N 2 = N N 2 = 1 N Δ t Δ s = L N ⋅ 2 B N = 2 B L N 2 = N N 2 = 1 N
因此有
Δ t Δ s = 1 N Δ t Δ s = 1 N
时域的采样间隔和频域的采样间隔会根据抽样点数成倒数关系(reciprocity relationship)。这该关系对于进行DFT很有现实意义。如:当我们确定好时域的采样间隔Δ t Δ t 与抽样点数N N 时,频域的采样间隔Δ s Δ s 就被固定了,即频域分辨率是由时域所做的选择而确定的。(The resolution in frequency is determined by the choices you make in time.)
引入新符号ω – – ω _
令ω – – ω _ 为离散的复指数信号(或为复指数向量),且
ω – – = ( 1 , e 2 π i 1 N , e 2 π i 2 N , … , e 2 π i N − 1 N ) ω _ = ( 1 , e 2 π i 1 N , e 2 π i 2 N , … , e 2 π i N − 1 N )
ω – – [ m ] = e 2 π i m N ω _ [ m ] = e 2 π i m N
那么对ω – – ω _ 进行幂运算,有
ω – – n = ( 1 , e 2 π i n N , e 2 π i 2 n N , … , e 2 π i n ( N − 1 ) N ) ω _ n = ( 1 , e 2 π i n N , e 2 π i 2 n N , … , e 2 π i n ( N − 1 ) N )
ω – – − n = ( 1 , e − 2 π i − n N , e − 2 π i 2 n N , … , e − 2 π i n ( N − 1 ) N ) ω _ − n = ( 1 , e − 2 π i − n N , e − 2 π i 2 n N , … , e − 2 π i n ( N − 1 ) N )
ω – – − n [ m ] = e − 2 π i m n N ω _ − n [ m ] = e − 2 π i m n N
把它代入到DFT中,有
F f – –– – [ m ] = N − 1 ∑ n = 0 f – – [ n ] e − 2 π i m n N = N − 1 ∑ n = 0 f – – [ n ] ω – – − n [ m ] F f _ [ m ] = ∑ n = 0 N − 1 f _ [ n ] e − 2 π i m n N = ∑ n = 0 N − 1 f _ [ n ] ω _ − n [ m ]
隐藏序号m m ,则有
F f – –– – = N − 1 ∑ n = 0 f – – [ n ] ω – – − n F f _ = ∑ n = 0 N − 1 f _ [ n ] ω _ − n
DFT特性
1) 输入和输出的周期性(The periodicity of the inputs and outputs)。
DFT的定义迫使我们把输入f – – f _ 与输出F f – –– – F f _ 不仅当作定义在0 0 到N − 1 N − 1 整数上的,并且是周期为N N 的周期离散函数,这是因为ω – – ω _ ,它的离散复指数应该是一个周期为N N 的周期离散函数。我们将在下节课讲述这一特性。
(The definition of DFT compels you to regard the input f – – f _ output F f – –– – F f _ ,its discrete Fourier transform as not just defined on the integers from 0 0 to N − 1 N − 1 ,but as periodic discrete signals of period N N . This is so because ω – – ω _ itself,its discrete complex exponential should be – is naturally a periodic discrete signal of period N N .)
2) 离散复指数的正交性(Orthogonality of the discrete complex exponentials)
回顾一下上述的离散复指数信号ω – – ω _ ,
ω – – = ( 1 , e 2 π i 1 N , e 2 π i 2 N , … , e 2 π i N − 1 N ) ω _ = ( 1 , e 2 π i 1 N , e 2 π i 2 N , … , e 2 π i N − 1 N )
ω – – k = ( 1 , e 2 π i k N , e 2 π i 2 k N , … , e 2 π i k ( N − 1 ) N ) ω _ k = ( 1 , e 2 π i k N , e 2 π i 2 k N , … , e 2 π i k ( N − 1 ) N )
如果k ≠ l k ≠ l ,则有ω – – k ω _ k 与ω – – l ω _ l 是正交的。
这里不把ω – – ω _ 当作离散信号,而是把它当作N N 维向量,我们在讨论傅里叶级数复指数的时候引入了正交 ,这里可谓它的离散版本,即
如果k ≠ l k ≠ l ,
ω – – k ⋅ ω – – l = N − 1 ∑ n = 0 ω – – k [ n ] ¯ ¯¯¯¯¯¯¯¯¯ ¯ ω – – l [ n ] = N − 1 ∑ n = 0 e 2 π i k n N ¯ ¯¯¯¯¯¯¯¯¯¯ ¯ e 2 π i l n N = N − 1 ∑ n = 0 e 2 π i k n N e − 2 π i l n N = N − 1 ∑ n = 0 ( e 2 π i k − l N ) n = 1 − ( e 2 π i k − l N ) N 1 − e 2 π i k − l N ( G e o m e t r i c S e r i e s , b e c a u s e k ≠ l , t h i s f r a c t i o n i s o k ) = 1 − e 2 π i ( k − l ) 1 − e 2 π i k − l N = 1 − ( i s i n ( 2 π ( k − l ) ) + c o s ( 2 π ( k − l ) ) ) 1 − e 2 π i k − l N ( E u l a r f o r m u l a ) = 1 − ( 0 + 1 ) 1 − e 2 π i k − l N = 0 ω _ k ⋅ ω _ l = ∑ n = 0 N − 1 ω _ k [ n ] ω _ l [ n ] ¯ = ∑ n = 0 N − 1 e 2 π i k n N e 2 π i l n N ¯ = ∑ n = 0 N − 1 e 2 π i k n N e − 2 π i l n N = ∑ n = 0 N − 1 ( e 2 π i k − l N ) n = 1 − ( e 2 π i k − l N ) N 1 − e 2 π i k − l N ( G e o m e t r i c S e r i e s , b e c a u s e k ≠ l , t h i s f r a c t i o n i s o k ) = 1 − e 2 π i ( k − l ) 1 − e 2 π i k − l N = 1 − ( i s i n ( 2 π ( k − l ) ) + c o s ( 2 π ( k − l ) ) ) 1 − e 2 π i k − l N ( E u l a r f o r m u l a ) = 1 − ( 0 + 1 ) 1 − e 2 π i k − l N = 0
如果k = l k = l ,
ω – – k ⋅ ω – – l = N − 1 ∑ n = 0 ω – – k [ n ] ¯ ¯¯¯¯¯¯¯¯¯ ¯ ω – – l [ n ] = N − 1 ∑ n = 0 ( e 2 π i k − l N ) n = N − 1 ∑ n = 0 ( e 0 ) n ( k = l ) = N ω _ k ⋅ ω _ l = ∑ n = 0 N − 1 ω _ k [ n ] ω _ l [ n ] ¯ = ∑ n = 0 N − 1 ( e 2 π i k − l N ) n = ∑ n = 0 N − 1 ( e 0 ) n ( k = l ) = N
因此
ω – – k ⋅ ω – – l = { 0 , k ≠ l N , k = l ω _ k ⋅ ω _ l = { 0 , k ≠ l N , k = l
当l ≠ k l ≠ k 时ω – – k ω _ k 与ω – – l ω _ l 是正交的,但是它们并不是标准正交,因为∥ ∥ ω – – k ∥ ∥ = ω – – k ⋅ ω – – k = N ‖ ω _ k ‖ = ω _ k ⋅ ω _ k = N 而不是等于1 1 ,因此有时为了归一为标准正交向量,会把N N 引入到ω – – ω _ 中。
IDFT
离散傅里叶逆变换有公式如下
F − 1 f – –––– – [ m ] = 1 N N − 1 ∑ n = 0 f – – [ n ] e 2 π i m n N = 1 N N − 1 ∑ n = 0 f – – [ n ] ω – – n [ m ] F − 1 f _ [ m ] = 1 N ∑ n = 0 N − 1 f _ [ n ] e 2 π i m n N = 1 N ∑ n = 0 N − 1 f _ [ n ] ω _ n [ m ]
省略序号m m ,则
F − 1 f – –––– – = 1 N N − 1 ∑ n = 0 f – – [ n ] ω – – n F − 1 f _ = 1 N ∑ n = 0 N − 1 f _ [ n ] ω _ n
IDFT的职责是把进行了DFT的离散信号复原,即
F − 1 F f – –––––– – = f – – F − 1 F f _ = f _
F − 1 F f – –––––– – [ m ] = f – – [ m ] F − 1 F f _ [ m ] = f _ [ m ]
证明过程需要用到ω – – ω _ 的正交性质
F − 1 F f – –––––– – [ m ] = 1 N N − 1 ∑ n = 0 F f – –– – [ n ] e 2 π i m n N = 1 N N − 1 ∑ n = 0 ( N − 1 ∑ k = 0 f – – [ k ] e − 2 π i k n N ) e 2 π i m n N = 1 N N − 1 ∑ k = 0 f – – [ k ] ( N − 1 ∑ n = 0 e − 2 π i k n N e 2 π i m n N ) = 1 N N − 1 ∑ k = 0 f – – [ k ] ( ω – – k ⋅ ω – – m ) = 1 N N − 1 ∑ k = 0 f [ k ] ⋅ N ( ω – – k ⋅ ω – – m = { 0 , k ≠ m N , k = m ) = f [ m ] F − 1 F f _ [ m ] = 1 N ∑ n = 0 N − 1 F f _ [ n ] e 2 π i m n N = 1 N ∑ n = 0 N − 1 ( ∑ k = 0 N − 1 f _ [ k ] e − 2 π i k n N ) e 2 π i m n N = 1 N ∑ k = 0 N − 1 f _ [ k ] ( ∑ n = 0 N − 1 e − 2 π i k n N e 2 π i m n N ) = 1 N ∑ k = 0 N − 1 f _ [ k ] ( ω _ k ⋅ ω _ m ) = 1 N ∑ k = 0 N − 1 f [ k ] ⋅ N ( ω _ k ⋅ ω _ m = { 0 , k ≠ m N , k = m ) = f [ m ]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2013-01-03 [c++]已知二叉树的前序遍历与中序遍历结果(二叉树中不含重复数字),重构二叉树