DFT到FFT的推导

复制代码
# $\boldsymbol{F}_N$(DFT矩阵)的由来与完整推导
> 先明确:$\boldsymbol{F}_N$ 不是凭空定义的矩阵,它就是**离散傅里叶变换(DFT)的线性变换写成矩阵形式**。
> 连续傅里叶变换 → 对时域、频域同时采样 → 得到DFT公式 → 把DFT写成线性方程组 → 提取系数得到DFT矩阵 $\boldsymbol{F}_N$。

## 一、前置:DFT原始公式
设有长度为 $N$ 的时域离散信号:$x[n],\ n=0,1,\dots,N-1$
DFT 的定义式:
$$
X[k]=\sum_{n=0}^{N-1} x[n]\cdot \omega_N^{kn},\quad k=0,1,\dots,N-1
$$
其中旋转因子:
$$
\omega_N = e^{-j\frac{2\pi}{N}} = \cos\frac{2\pi}{N}-j\sin\frac{2\pi}{N}
$$
$X[k]$:第 $k$ 个频域分量。

这是**线性变换**:
输入向量 $\boldsymbol{x} = \begin{bmatrix}x[0]\\x[1]\\\vdots\\x[N-1]\end{bmatrix}$
输出向量 $\boldsymbol{X} = \begin{bmatrix}X[0]\\X[1]\\\vdots\\X[N-1]\end{bmatrix}$

线性变换一定可以写成:$\boldsymbol X = \boldsymbol{F}_N \boldsymbol x$

## 二、把求和式展开,推导出矩阵每一行
对每一个频点 $k$:
$$
\begin{aligned}
X[0] &= \omega_N^{0\cdot0}x[0] + \omega_N^{0\cdot1}x[1] + \dots + \omega_N^{0\cdot(N-1)}x[N-1] \\
X[1] &= \omega_N^{1\cdot0}x[0] + \omega_N^{1\cdot1}x[1] + \dots + \omega_N^{1\cdot(N-1)}x[N-1] \\
X[2] &= \omega_N^{2\cdot0}x[0] + \omega_N^{2\cdot1}x[1] + \dots + \omega_N^{2\cdot(N-1)}x[N-1] \\
&\vdots \\
X[k] &= \sum_{n=0}^{N-1}\omega_N^{kn}x[n] \\
&\vdots \\
X[N-1] &= \omega_N^{(N-1)\cdot0}x[0] + \omega_N^{(N-1)\cdot1}x[1] + \dots + \omega_N^{(N-1)(N-1)}x[N-1]
\end{aligned}
$$

矩阵乘法规则:$\boldsymbol X$ 的第 $k$ 项,等于矩阵第 $k$ 行点乘向量 $\boldsymbol x$。
所以**矩阵第 $k$ 行、第 $n$ 列元素:$\boldsymbol F_N[k,n] = \omega_N^{kn}$**

写出完整矩阵:
$$
\boldsymbol{F}_N=
\begin{bmatrix}
\omega_N^{0\cdot0} & \omega_N^{0\cdot1} & \omega_N^{0\cdot2} & \dots & \omega_N^{0\cdot(N-1)} \\
\omega_N^{1\cdot0} & \omega_N^{1\cdot1} & \omega_N^{1\cdot2} & \dots & \omega_N^{1\cdot(N-1)} \\
\omega_N^{2\cdot0} & \omega_N^{2\cdot1} & \omega_N^{2\cdot2} & \dots & \omega_N^{2\cdot(N-1)} \\
\vdots & \vdots & \vdots & \ddots & \vdots \\
\omega_N^{(N-1)\cdot0} & \omega_N^{(N-1)\cdot1} & \omega_N^{(N-1)\cdot2} & \dots & \omega_N^{(N-1)(N-1)} \\
\end{bmatrix}
$$

因为 $\omega_N^0=1$,所有第一行、第一列全部是1:
$$
\boldsymbol{F}_N=
\begin{bmatrix}
1 & 1 & 1 & \dots & 1 \\
1 & \omega_N & \omega_N^{2} & \dots & \omega_N^{N-1} \\
1 & \omega_N^{2} & \omega_N^{4} & \dots & \omega_N^{2(N-1)} \\
\vdots & \vdots & \vdots & \ddots & \vdots \\
1 & \omega_N^{N-1} & \omega_N^{2(N-1)} & \dots & \omega_N^{(N-1)^2} \\
\end{bmatrix}
$$
✅ 这就是 $\boldsymbol F_N$ 的推导结果。

## 三、物理由来:从连续傅里叶 → DFT
1. **连续傅里叶变换**:
$$
X(f)=\int_{-\infty}^{+\infty} x(t) e^{-j2\pi f t} dt
$$
含义:把信号分解成无数不同频率复指数 $e^{j2\pi f t}$ 的叠加。

2. 时域采样:$t_n = n\cdot T_s$,采样频率 $f_s=\frac{1}{T_s}$,得到离散序列 $x[n]=x(nT_s)$
积分变成求和:
$$
X(f) \approx T_s\sum_{n=0}^{N-1} x[n] e^{-j2\pi f n T_s}
$$

3. **频域也采样**:只取 $N$ 个离散频率点:$f_k = \frac{k f_s}{N},\ k=0,1,\dots,N-1$
把 $f=f_k$ 代入:
$$
\begin{aligned}
X[k] &= \sum_{n=0}^{N-1} x[n] e^{-j2\pi \cdot \frac{k f_s}{N} \cdot n T_s}\\
&=\sum_{n=0}^{N-1} x[n] e^{-j\frac{2\pi}{N}kn}\\
&=\sum_{n=0}^{N-1} x[n] \omega_N^{kn}
\end{aligned}
$$
> 时域有限长N点、频域有限长N点,双采样,就得到DFT。
> 每一个频点 $k$,对应一个基函数:$e^{j\frac{2\pi}{N}kn}$,矩阵的每一行就是这个基函数在各个采样时刻的值。

👉 **$\boldsymbol F_N$ 的每一行,就是一组离散采样后的复正弦基函数**。DFT本质就是把时域向量投影到这组复指数正交基上,得到各个频率分量的系数。

## 四、逆DFT矩阵 $\boldsymbol F_N^{-1}$ 的推导(顺带)
DFT变换是可逆的。逆变换公式:
$$
x[n]=\frac1N\sum_{k=0}^{N-1} X[k]\omega_N^{-kn}
$$
写成矩阵形式:$\boldsymbol x = \boldsymbol F_N^{-1}\boldsymbol X$。
对比DFT矩阵元素 $\boldsymbol F_N[k,n]=\omega_N^{kn}$,逆矩阵元素:
$$
\boldsymbol F_N^{-1}[n,k]=\frac1N \omega_N^{-kn} = \frac1N \big(\omega_N^{kn}\big)^*
$$
也就是:
$$
\boldsymbol F_N^{-1}=\frac1N \boldsymbol F_N^*
$$
$\boldsymbol F_N^*$ 代表共轭矩阵。

验证正交性:
$$
\boldsymbol F_N^* \boldsymbol F_N = N\cdot \boldsymbol I_N
$$
$\boldsymbol I_N$ 是单位矩阵。这组基不是单位正交,差一个系数 $N$。如果做归一化:$\frac{1}{\sqrt{N}}\boldsymbol F_N$,就是幺正矩阵。

## 五、关键澄清:FFT 和 $\boldsymbol F_N$
- $\boldsymbol F_N$ 是DFT的矩阵表达,**DFT是线性变换**;
- FFT不重新定义变换,FFT只是利用旋转因子 $\omega_N$ 的周期性/对称性,**对矩阵 $\boldsymbol F_N$ 做分块分解**,拆成很多稀疏矩阵相乘,避免直接做 $O(N^2)$ 的矩阵乘法。
$$
\boldsymbol F_N = \text{稀疏矩阵}_1 \cdot \text{稀疏矩阵}_2 \dots \boldsymbol P_N
$$
$\boldsymbol P_N$ 是位反转置换矩阵。蝶形运算就是这一串稀疏矩阵乘向量。

## 六、举N=4完整例子验证推导
N=4,$\omega_4=e^{-j\frac{2\pi}{4}}=-j$
$$
\boldsymbol F_4 =
\begin{bmatrix}
1 & 1 & 1 & 1 \\
1 & \omega_4 & \omega_4^2 & \omega_4^3 \\
1 & \omega_4^2 & \omega_4^4 & \omega_4^6 \\
1 & \omega_4^3 & \omega_4^6 & \omega_4^9 \\
\end{bmatrix}=
\begin{bmatrix}
1 & 1 & 1 & 1 \\
1 & -j & -1 & j \\
1 & -1 & 1 & -1 \\
1 & j & -1 & -j \\
\end{bmatrix}
$$
完全符合前面的元素规则:$\boldsymbol F_4[k,n]=\omega_4^{kn}$。

## 七、一句话总结整个推导链条
连续傅里叶积分 → 时域采样变成求和 → 频域再采样取N个频率 → 得到DFT求和公式;
DFT是线性变换,把方程组写成矩阵乘向量形式;
提取每个求和项的系数,得到矩阵元素 $\omega_N^{kn}$,最终得到DFT矩阵 $\boldsymbol F_N$。
相关推荐
别动我齐刘海1 小时前
ROS2 Jazzy + C++ 实战路线——ros2_control
c++·人工智能·python·opencv·机器学习·机器人·github
浔溺2 小时前
al+大数据每日学习笔记41
opencv·计算机视觉
江畔柳前堤18 小时前
字节跳动·大模型应用知识手册
前端·人工智能·深度学习·opencv·目标检测·重构·transformer
棣廷1 天前
初识OpenCV——Dlib CNN人脸检测
人工智能·深度学习·opencv
zx_741484811 天前
【计算机视觉入门】基于 dlib 与 OpenCV 的三大案例:人脸检测、年龄性别预测与疲劳检测
opencv·计算机视觉·dnn
yyk333241 天前
OpenCV中的表情识别
opencv
爱吃火鸡面呀1 天前
基于 dlib 与 OpenCV 的人脸换脸实战:从关键点检测到无缝融合
opencv·目标检测
爱吃火鸡面呀1 天前
MediaPipe 人体姿态估计与面部网格实战:从关键点检测到实时绘制
opencv
zx_741484811 天前
【计算机视觉入门】OpenCV + MediaPipe + dlib:从仿射变换到换脸、手势、姿态与人脸网格
python·opencv·计算机视觉