当前位置: 首页 > article >正文

探秘基带算法:从原理到5G时代的通信变革【七】FFT/DFT

文章目录

      • 2.6 FFT/DFT
        • 2.6.1 离散傅里叶变换(DFT)
        • 2.6.2 快速傅里叶变换(FFT)
        • 2.6.3 方法论与分类体系
        • 2.6.4 优缺点与应用
        • 2.6.5 实现细节

本博客为系列博客,主要讲解各基带算法的原理与应用,包括:viterbi解码、Turbo编解码、Polar编解码、CORDIC算法、CRC校验、FFT/DFT、QAMtiaozhi/解调、QPSK调制/解调。其他博客链接如下:

  1. 探秘基带算法:从原理到5G时代的通信变革【一】引言
  2. 探秘基带算法:从原理到5G时代的通信变革【二】Viterbi解码
  3. 探秘基带算法:从原理到5G时代的通信变革【三】Turbo 编解码
  4. 探秘基带算法:从原理到5G时代的通信变革【四】Polar 编解码(一)
  5. 探秘基带算法:从原理到5G时代的通信变革【四】Polar 编解码(二)
  6. 探秘基带算法:从原理到5G时代的通信变革【五】CORDIC算法
  7. 探秘基带算法:从原理到5G时代的通信变革【六】CRC 校验
  8. 探秘基带算法:从原理到5G时代的通信变革【七】FFT/DFT
  9. 探秘基带算法:从原理到5G时代的通信变革【八】QAM 调制 / 解调
  10. 探秘基带算法:从原理到5G时代的通信变革【九】QPSK调制/解调
  11. 探秘基带算法:从原理到5G时代的通信变革【十】基带算法应用与对比

2.6 FFT/DFT

傅里叶变换(Fourier Transform)是信号处理和数据分析领域的重要工具,而离散傅里叶变换(Discrete Fourier Transform,DFT)和快速傅里叶变换(Fast Fourier Transform,FFT)则是其在数字领域的核心实现。本文将深入探讨DFT与FFT的原理、方法论、分类体系、优缺点以及实际应用方向,并通过详细的公式推导和实例分析帮助读者全面掌握这一技术。


2.6.1 离散傅里叶变换(DFT)

  • 原理

傅里叶变换的核心思想是将时域信号分解为不同频率的正弦波分量。对于连续信号,我们使用连续傅里叶变换;而对于离散信号,则需要采用离散傅里叶变换(DFT)。DFT的基本定义如下:
X [ k ] = ∑ n = 0 N − 1 x [ n ] e − j 2 π N k n , k = 0 , 1 , … , N − 1 X[k] = \sum_{n=0}^{N-1} x[n] e^{-j \frac{2\pi}{N} kn}, \quad k = 0, 1, \ldots, N-1 X[k]=n=0N1x[n]ejN2πkn,k=0,1,,N1

其中:

  • x [ n ] x[n] x[n] 是输入信号的第 n n n个采样值。
  • X [ k ] X[k] X[k] 是频域中第 k k k个频率分量。
  • N N N 是信号的总采样点数。
  • e − j 2 π N k n e^{-j \frac{2\pi}{N} kn} ejN2πkn 是复指数函数,用于表示正弦波分量。

  • DFT公式的逐步推导

为了更好地理解DFT公式,我们可以从欧拉公式入手。欧拉公式表明,复指数函数可以分解为正弦和余弦函数的线性组合:

e − j θ = cos ⁡ ( θ ) − j sin ⁡ ( θ ) e^{-j \theta} = \cos(\theta) - j \sin(\theta) ejθ=cos(θ)jsin(θ)

因此,DFT公式可以改写为:

X [ k ] = ∑ n = 0 N − 1 x [ n ] ( cos ⁡ ( 2 π N k n ) − j sin ⁡ ( 2 π N k n ) ) X[k] = \sum_{n=0}^{N-1} x[n] \left( \cos\left(\frac{2\pi}{N} kn\right) - j \sin\left(\frac{2\pi}{N} kn\right) \right) X[k]=n=0N1x[n](cos(N2πkn)jsin(N2πkn))

这说明DFT实际上是将输入信号 x [ n ] x[n] x[n]投影到一组正交基函数(正弦和余弦函数)上,从而得到信号的频率分量。

image-20250228133742386

图:DFT的几何意义。

进一步观察公式可以发现,DFT的核心运算是一个矩阵乘法操作。如果我们用矩阵形式表示DFT,可以写成:

X = W ⋅ x \mathbf{X} = \mathbf{W} \cdot \mathbf{x} X=Wx

其中:

  • X \mathbf{X} X 是频域向量。
  • x \mathbf{x} x 是时域向量。
  • W \mathbf{W} W 是一个 N × N N \times N N×N的矩阵,称为“旋转因子矩阵”。

image-20250228133920324

图:DFT的矩阵表示。

尽管DFT的数学定义简单明了,但其计算复杂度为 O ( N 2 ) O(N^2) O(N2),当 N N N较大时,计算成本会显著增加。为了解决这一问题,FFT应运而生。


2.6.2 快速傅里叶变换(FFT)

快速傅里叶变换(FFT)是一种高效的算法,用于加速DFT的计算。FFT的核心思想是利用对称性和周期性来减少不必要的重复计算。以下是FFT的基本推导过程:

假设输入信号长度 N N N为2的幂次方(即 N = 2 m N = 2^m N=2m),我们可以将DFT公式分为两部分:偶数索引项和奇数索引项。

X [ k ] = ∑ n = 0 N / 2 − 1 x [ 2 n ] e − j 2 π N k ( 2 n ) + ∑ n = 0 N / 2 − 1 x [ 2 n + 1 ] e − j 2 π N k ( 2 n + 1 ) X[k] = \sum_{n=0}^{N/2-1} x[2n] e^{-j \frac{2\pi}{N} k(2n)} + \sum_{n=0}^{N/2-1} x[2n+1] e^{-j \frac{2\pi}{N} k(2n+1)} X[k]=n=0N/21x[2n]ejN2πk(2n)+n=0N/21x[2n+1]ejN2πk(2n+1)

通过简化指数项,可以得到:

X [ k ] = ∑ n = 0 N / 2 − 1 x [ 2 n ] e − j 2 π N / 2 k n + W N k ∑ n = 0 N / 2 − 1 x [ 2 n + 1 ] e − j 2 π N / 2 k n X[k] = \sum_{n=0}^{N/2-1} x[2n] e^{-j \frac{2\pi}{N/2} kn} + W_N^k \sum_{n=0}^{N/2-1} x[2n+1] e^{-j \frac{2\pi}{N/2} kn} X[k]=n=0N/21x[2n]ejN/22πkn+WNkn=0N/21x[2n+1]ejN/22πkn

其中:

  • W N k = e − j 2 π N k W_N^k = e^{-j \frac{2\pi}{N} k} WNk=ejN2πk 称为旋转因子。

由此可见,FFT将原始问题分解为两个规模减半的子问题,从而大幅减少了计算量。最终,FFT的计算复杂度降低为 O ( N log ⁡ N ) O(N \log N) O(NlogN)

image-20250228134105718

图:FFT的蝶形运算结构。


2.6.3 方法论与分类体系

根据输入信号的特性,DFT和FFT可以分为以下几种类型:

  1. 实数输入DFT:当输入信号为实数时,频域结果具有共轭对称性,即 X [ k ] = X ∗ [ N − k ] X[k] = X^*[N-k] X[k]=X[Nk]。这种对称性可以进一步优化计算效率。

  2. 二维DFT:适用于图像处理等场景,二维DFT可以分解为两次一维DFT的级联操作。

  3. 短时傅里叶变换(STFT):用于分析非平稳信号,通过引入滑动窗口将信号分割为多个短片段,分别进行DFT计算。

表:DFT与FFT的主要分类。

分类特点
实数输入DFT频域结果具有共轭对称性,适合处理实数信号。
二维DFT将二维信号分解为行和列的一维DFT,广泛应用于图像处理领域。
STFT引入时间窗,适合分析随时间变化的信号特征。

image-20250228134258876

图:STFT。


2.6.4 优缺点与应用

  • 优点
  1. 高效性:FFT算法显著降低了DFT的计算复杂度,使其能够在大规模数据处理中发挥作用。
  2. 普适性:DFT和FFT适用于各种类型的信号处理任务,包括音频、图像、通信等领域。
  3. 理论基础扎实:基于严格的数学理论,能够提供可靠的频域分析结果。

  • 缺点
  1. 对输入长度的要求:FFT要求输入信号长度为2的幂次方,否则需要进行零填充。
  2. 频谱泄漏:由于DFT本质上是对信号的有限采样,可能导致频谱泄漏现象。
  3. 无法直接处理非均匀采样信号:对于非均匀采样的信号,需要额外的预处理步骤。

  • 应用方向

DFT和FFT在现代科技中有广泛的应用,以下列举几个典型场景:

  1. 音频信号处理:通过FFT分析音频信号的频谱特征,可用于音高检测、噪声消除等任务。
  2. 图像处理:二维DFT可以用于图像压缩、滤波和增强等操作。
  3. 通信系统:FFT是OFDM(正交频分复用)调制解调的核心算法之一。
  4. 科学计算:FFT常用于求解偏微分方程、卷积计算等问题。

image-20250228141243918

图:DFT与FFT在音频信号处理中的应用。


2.6.5 实现细节

在实际编程中,可以通过多种语言实现DFT和FFT。以下是一个简单的Python代码示例,展示如何使用NumPy库计算FFT:

import numpy as np
import matplotlib.pyplot as plt

# 输入信号
x = np.array([1, 2, 3, 4])

# 计算FFT
X = np.fft.fft(x)

# 输出结果
print("FFT Result:", X)

# 绘制频谱图
plt.stem(np.abs(X), use_line_collection=True)
plt.title("FFT Spectrum")
plt.xlabel("Frequency Bin")
plt.ylabel("Amplitude")
plt.show()


http://www.kler.cn/a/571015.html

相关文章:

  • GitHub开源协议选择指南:如何为你的项目找到最佳“许可证”?
  • 基于开源库编写MQTT通讯
  • 计算机毕业设计SpringBoot+Vue.js纺织品企业财务管理系统(源码+文档+PPT+讲解)
  • 【图论】判断图中有环的两种方法及实现
  • C# 矩形面积和周长的程序(Program for Area And Perimeter Of Rectangle)
  • 【项目管理】基于 C 语言的 QQ 聊天室实现(TCP + 多线程 + SQLite3)
  • 微软具身智能感知交互多面手!Magma:基于基础模型的多模态AI智能体
  • 信号量和互斥量 在linux下的API是什么?
  • 几道考研数学题求解
  • 清影2.0(AI视频生成)技术浅析(六):多模态融合与智能推荐
  • PL0 虚拟机
  • 【MySQL】【已解决】Windows安装MySQL8.0时的报错解决方案
  • 基于coze+微信小程序的ai对话
  • Libgdx游戏开发系列教程(2)——接水滴游戏实现
  • 23种设计模式之《责任链模式(Chain of Responsibility)》在c#中的应用及理解
  • 自动计算相机pose,pyrender渲染例子
  • MIPI接口:(4)MIPI CSI-2协议详解(上)
  • JavaWeb5、Maven
  • mssql2008与mssql2014绿色版数据库软件,免安装,下载解压就可以使用
  • 计算机网络基础:服务器远程连接管理(Telnet命令)