探秘基带算法:从原理到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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/981187.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

水仙花数(华为OD)

题目描述 所谓水仙花数,是指一个n位的正整数,其各位数字的n次方和等于该数本身。 例如153是水仙花数,153是一个3位数,并且153 13 53 33。 输入描述 第一行输入一个整数n,表示一个n位的正整数。n在3到7之间&#x…

《Python实战进阶》No 7: 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战

第7集: 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战 在现代 Web 开发中,实时通信已经成为许多应用的核心需求。无论是聊天应用、股票行情推送,还是多人协作工具,WebSocket 都是实现高效实时通信的最佳选择之一。本…

极简Redis速成学习

redis是什么? 是一种以键值对形式存储的数据库,特点是基于内存存储,读写快,性能高,常用于缓存、消息队列等应用情境 redis的五种数据类型是什么? 分别是String、Hash、List、Set和Zset(操作命…

ADC采集模块与MCU内置ADC性能对比

2.5V基准电压源: 1. 精度更高,误差更小 ADR03B 具有 0.1% 或更小的初始精度,而 电阻分压方式的误差主要来自电阻的容差(通常 1% 或 0.5%)。长期稳定性更好,分压电阻容易受到温度、老化的影响,长…

python数据容器切片

从一个序列中取出一个子序列 序列[起始位置:结束位置:步长] 起始位置和结束位置 省略,表示从头取到尾 步长省略表示1 步长负数,表示从后往前取 步长-1 等同于将序列反转了

【网络安全 | 渗透测试】GraphQL精讲一:基础知识

未经许可,不得转载, 文章目录 GraphQL 定义GraphQL 工作原理GraphQL 模式GraphQL 查询GraphQL 变更(Mutations)查询(Queries)和变更(Mutations)的组成部分字段(Fields)参数(Arguments)变量别名(Aliases)片段(Fragments)订阅(Subscriptions)自省(Introspecti…

005-Docker 安装 Redis

Docker 安装 Redis 1.从镜像官网拉取Redis镜像2.创建实例并启动3.测试连接4.设置开机启动 1.从镜像官网拉取Redis镜像 镜像官网地址:https://hub.docker.com执行命令 -- 拉取最新的版本 docker pull redis查看镜像 docker images2.创建实例并启动 先创建好需要的…

【星云 Orbit • STM32F4】04.一触即发:GPIO 外部中断

【星云 Orbit- • STM32F4】04. 一触即发:外部中断控制 摘要 本文详细介绍了如何使用STM32F407微控制器的HAL库实现外部中断功能。通过配置GPIO引脚作为外部中断源,并在中断回调函数中处理按键事件,实现了按键控制LED状态翻转的功能。本文旨…

探索Elasticsearch:索引的CRUD

在企业环境中,Elasticsearch的索引CRUD(创建Create、读取Read、更新Update、删除Delete)操作是非常基础且频繁使用的功能。这些操作对于管理和维护数据至关重要,尤其是在处理大规模数据集和需要实时搜索与分析的应用场景中。 目录…

React antd的datePicker自定义,封装成组件

一、antd的datePicker自定义 需求:用户需要为日期选择器的每个日期单元格添加一个Tooltip,当鼠标悬停时显示日期、可兑换流量余额和本公会可兑流量。这些数据需要从接口获取。我需要结合之前的代码,确保Tooltip正确显示,并且数据…

NVIDIA GPU 架构详解:Pascal、Volta、Turing、Ampere、Ada、Hopper、Blackwell

目录 1. Pascal(帕斯卡)架构(2016)关键技术性能特性代表产品应用场景 2. Volta(伏特)架构(2017)关键技术性能特性代表产品应用场景 3.Turing(图灵)架构&#…

Linux 命令行的基本命令(生信)

常见的操作系统包括 Windows、Mac OS X 和 Unix 。Linux 是类 Unix 操作系 统, 可安装在各种各样的电脑硬件设备, 从手机、平板电脑、路由器到超级计算 机。Linux 是一个领先的操作系统,世界上最快的十台超级计算机运行的都是 Linux 操作系统…

ECharts--中国地图(无敌详细)

前段时间需要做一个中国地图的页面,要求是展示各地产品的销量,我就在网上搜了很多ECharts的资料,学习了一下怎么使用。 本着互相学习,共同进步的原则,特此分享一下自己的学习经验以及使用技巧。如果有用的话可以给老弟…

QwenVL 2.5-本地安装编译布署全教程

开篇 DeepSeek开源后我国又开源了一个震撼大模型,QwenVL2.5,这是一个多模态的模形,它可以认图、识图、更能作图,还能读懂video。 Qwen2.5-VL 的主要特点如下所示: 感知更丰富的世界:Qwen2.5-VL 不仅擅长识别常见物体,如花、鸟、鱼和昆虫,还能够分析图像中的文本、图表…

【含文档+PPT+源码】基于SpringBoot电脑DIY装机教程网站的设计与实现

项目介绍 本课程演示的是一款 基于SpringBoot电脑DIY装机教程网站的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本…

React高级内容探索

flushSync确保了DOM立即更新 flushSync让你强制React同步刷新提供回调中的任何更新,这确保了DOM立即更新 flushSync是DOM更新之后的,像vue中的nextTick: import { useState,useRef} from "react" import { flushSync} from &quo…

基于 MetaGPT 自部署一个类似 MGX 的多智能体协作框架

MGX(由 MetaGPT 团队开发的 mgx.dev)是一个收费的多智能体编程平台,提供从需求分析到代码生成、测试和修复的全流程自动化功能。虽然 MGX 本身需要付费,但您可以通过免费服务和开源项目搭建一个类似的功能。以下是一个分步骤的实现…

主时钟与虚拟时钟约束

1、主时钟约束 1.1、主时钟约束语法&#xff1a; create_clock -name< clock_name > -period <period> -waveform{ <rise_time> <fall_time> } [get_ports< port_name >] 说明&#xff1a; name 之后的<clock_name> 是clk 的name&a…

CyberRT(apollo) 定时器模块简述及bug分析

timer 模块 timer的定义&#xff0c;cyberrt中timer模块用于设置定时器任务&#xff0c;字面意思&#xff0c;设置设置定时周期及出发频次&#xff08;周期 or oneshot)&#xff0c;到达指定时间时间触发callback time wheel 时钟节拍轮&#xff0c;常见的定时器设计&#x…

网络安全月度报告

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 3.1.1网络安全现状及安全挑战 网络的出现给人们的工作和生活带来了极大的便利&#xff0c;但同时也带来了极大的安全风险。在信息传输和交换时&#xff0c;需要对…