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

[学习] 深入理解傅里叶变换:从时域到频域的桥梁

深入理解傅里叶变换:从时域到频域的桥梁

文章目录

  • 深入理解傅里叶变换:从时域到频域的桥梁
    • 1. 核心思想:从时域到频域
    • 2. 为什么需要傅里叶变换?
    • 3. 数学定义
      • 3.1 连续傅里叶变换(CFT)
      • 3.2 傅里叶级数(FS)
      • 3.3 离散时间傅里叶变换(DTFT)
      • 3.4 离散傅里叶变换(DFT)
    • 4. 关键概念与特性
      • 4.1 频谱
      • 4.2 正交性与基函数
      • 4.3 狄利克雷条件
      • 4.4 吉布斯现象
      • 4.5 卷积定理
      • 4.6 帕塞瓦尔定理(能量守恒)
      • 4.7 对称性
      • 4.8 时频分辨率不确定性原理
    • 5. 使用示例
      • 5.1 信号降噪处理
      • 5.1 信号降噪处理
    • 6. 总结

傅里叶变换不仅仅是一个数学工具,更是一种强大的思维方式,它为我们理解信号、系统乃至世界提供了全新的视角。通过将复杂信号分解为不同频率的正弦波或复指数函数的组合,傅里叶变换揭示了信号的本质结构,成为众多科学与工程领域的核心基础。


1. 核心思想:从时域到频域

想象你在听一段音乐:

  • 时域视角:你看到的是声音振幅随时间变化的波形图(横轴是时间,纵轴是振幅)。它告诉你某个特定时刻声音有多“响”。
  • 频域视角:你想知道这段音乐是由哪些不同频率(音高)的音符组成的,以及每个音符的强度(响度)有多大。这就是频域(横轴是频率,纵轴是强度/能量)。

傅里叶变换的精髓在于:它可以将任何复杂的信号(函数)分解成一系列不同频率、不同幅度、不同相位的正弦波(或复指数)的组合。就像把一束白光分解成七彩光谱一样。

时频域转换演示:

import numpy as np
import matplotlib.pyplot as plt# 创建复合信号
t = np.linspace(0, 1, 1000, endpoint=False)
signal = (np.sin(2 * np.pi * 5 * t) + (0.5 * np.sin(2 * np.pi * 20 * t))# 可视化时域信号
plt.figure(figsize=(12, 6))
plt.subplot(211)
plt.plot(t, signal)
plt.title('时域信号 (5Hz + 20Hz)')
plt.xlabel('时间 (s)')
plt.ylabel('振幅')# 傅里叶变换
fft_result = np.fft.fft(signal)
freqs = np.fft.fftfreq(len(t), t[1]-t[0])# 可视化频域
plt.subplot(212)
plt.plot(freqs[:len(freqs)//2], np.abs(fft_result[:len(freqs)//2]))
plt.title('频域表示')
plt.xlabel('频率 (Hz)')
plt.ylabel('振幅')
plt.tight_layout()
plt.show()

演示效果:通过FFT可以实现时域到频域的转换
在这里插入图片描述


2. 为什么需要傅里叶变换?

傅里叶变换之所以如此重要,是因为它在多个方面提供了独特的价值:

  1. 揭示隐藏结构:很多信号在时域中看起来杂乱无章,但在频域中,其组成频率及其强度一目了然。例如,识别音频中的特定乐器、检测心电图中的异常心跳频率。
  2. 简化分析:在频域中对信号进行滤波、压缩、特征提取等操作往往比在时域中更简单直观。例如,设计一个低通滤波器去除高频噪声,只需在频域中衰减高频分量。
  3. 理解系统特性:线性时不变系统对输入信号的响应,在频域中表现为简单的乘法(系统频率响应函数乘以输入频谱),这比在时域进行卷积运算要容易得多。
  4. 解决微分方程:傅里叶变换可以将某些微分方程转化为频域中的代数方程,大大简化求解过程。
  5. 广泛的应用:信号处理(音频、图像、视频)、通信系统、量子力学、光学、热传导、结构分析、金融数据分析等众多领域。

3. 数学定义

傅里叶变换有多种形式,适用于不同类型的信号:

3.1 连续傅里叶变换(CFT)

  • 适用对象:连续时间、非周期信号。
  • 正变换(时域 → 频域)
    F(ω)=∫−∞+∞f(t)⋅e−iωtdtF(\omega) = \int_{-\infty}^{+\infty} f(t) \cdot e^{-i\omega t} dt F(ω)=+f(t)etdt
  • 逆变换(频域 → 时域)
    f(t)=12π∫−∞+∞F(ω)⋅eiωtdωf(t) = \frac{1}{2\pi} \int_{-\infty}^{+\infty} F(\omega) \cdot e^{i\omega t} d\omega f(t)=2π1+F(ω)etdω
  • 解释
    • f(t)f(t)f(t):时域信号。
    • F(ω)F(\omega)F(ω):频域表示,通常是复数。
    • ω=2πf\omega = 2\pi fω=2πf 是角频率。
    • e−iωt=cos⁡(ωt)−isin⁡(ωt)e^{-i\omega t} = \cos(\omega t) - i\sin(\omega t)et=cos(ωt)isin(ωt):复指数函数,是傅里叶变换的基函数。
    • 积分过程:正变换本质上是将原始信号 f(t)f(t)f(t) 与频率为 ω\omegaω 的复指数基函数进行内积。结果 F(ω)F(\omega)F(ω) 的模 ∣F(ω)∣|F(\omega)|F(ω) 表示频率 ω\omegaω 成分的强度,其辐角 arg⁡(F(ω))\arg(F(\omega))arg(F(ω)) 表示相位偏移。
    • 逆变换:将所有频率分量叠加起来,就能重构原始信号。

3.2 傅里叶级数(FS)

  • 适用对象:连续时间、周期信号。
  • 复指数形式
    f(t)=∑n=−∞+∞cn⋅einω0tf(t) = \sum_{n=-\infty}^{+\infty} c_n \cdot e^{i n \omega_0 t} f(t)=n=+cneinω0t
    其中 ω0=2πT\omega_0 = \frac{2\pi}{T}ω0=T2π 是基波角频率。
  • 系数计算
    cn=1T∫0Tf(t)⋅e−inω0tdtc_n = \frac{1}{T} \int_{0}^{T} f(t) \cdot e^{-i n \omega_0 t} dt cn=T10Tf(t)einω0tdt
  • 解释cnc_ncn 是频率为 nω0n\omega_0nω0 的分量对应的复数系数,其模 ∣cn∣|c_n|cn 表示振幅,辐角 arg⁡(cn)\arg(c_n)arg(cn) 表示相位。频谱是离散的线谱。

3.3 离散时间傅里叶变换(DTFT)

  • 适用对象:离散时间、非周期信号。
  • 正变换
    X(eiω)=∑n=−∞+∞x[n]⋅e−iωnX(e^{i\omega}) = \sum_{n=-\infty}^{+\infty} x[n] \cdot e^{-i\omega n} X(e)=n=+x[n]eiωn
  • 解释x[n]x[n]x[n] 是离散时间序列,X(eiω)X(e^{i\omega})X(e) 是其频谱。它是角频率 ω\omegaω 的连续函数,但以 2π2\pi2π 为周期。频率范围通常取 [−π,π][-\pi, \pi][π,π][0,2π][0, 2\pi][0,2π]

3.4 离散傅里叶变换(DFT)

  • 适用对象:有限长的离散时间信号。
  • 正变换
    X[k]=∑n=0N−1x[n]⋅e−i2πNkn,k=0,1,…,N−1X[k] = \sum_{n=0}^{N-1} x[n] \cdot e^{-i \frac{2\pi}{N} k n}, \quad k = 0, 1, \ldots, N-1 X[k]=n=0N1x[n]eiN2πkn,k=0,1,,N1
  • 逆变换
    x[n]=1N∑k=0N−1X[k]⋅ei2πNkn,n=0,1,…,N−1x[n] = \frac{1}{N} \sum_{k=0}^{N-1} X[k] \cdot e^{i \frac{2\pi}{N} k n}, \quad n = 0, 1, \ldots, N-1 x[n]=N1k=0N1X[k]eiN2πkn,n=0,1,,N1
  • 解释
    • x[n]x[n]x[n]:长度为 NNN 的时域离散序列。
    • X[k]X[k]X[k]:长度为 NNN 的频域离散序列。
    • e−i2πNkne^{-i \frac{2\pi}{N} k n}eiN2πkn:DFT 的基函数。
    • kkk:频域索引,对应频率 fk=k⋅fsNf_k = k \cdot \frac{f_s}{N}fk=kNfs (Hz),其中 fsf_sfs 是采样频率。
  • 关键点
    • DFT 将有限长序列视为一个周期信号的一个周期。
    • X[k]X[k]X[k] 是 DTFT 在频率点 ωk=2πkN\omega_k = \frac{2\pi k}{N}ωk=N2πk 上的采样。
    • 快速傅里叶变换(FFT)是一种高效的 DFT 算法(O(Nlog⁡N)O(N \log N)O(NlogN)),使得傅里叶分析在实时应用中成为可能。

4. 关键概念与特性

4.1 频谱

  • 幅度谱∣F(ω)∣|F(\omega)|F(ω)∣X[k]∣|X[k]|X[k],表示各频率分量的强度。
  • 相位谱arg⁡(F(ω))\arg(F(\omega))arg(F(ω))arg⁡(X[k])\arg(X[k])arg(X[k]),表示各频率分量的相位偏移。相位信息对信号重构至关重要,但幅度谱通常更直观。

4.2 正交性与基函数

不同频率的复指数函数 eiωte^{i\omega t}et 在无穷区间上是正交的(内积为0)。这种正交性保证了信号可以唯一地分解成这些基函数的线性组合。

4.3 狄利克雷条件

一个函数能够进行傅里叶变换(或展开为傅里叶级数)需满足以下条件:

  • 在任意有限区间内只有有限个第一类间断点。
  • 在任意有限区间内只有有限个极值点。
  • 绝对可积:∫∣f(t)∣dt<∞\int |f(t)| dt < \inftyf(t)dt<

绝大多数物理信号都满足这些条件。

4.4 吉布斯现象

当用有限项傅里叶级数逼近具有间断点的信号(如方波)时,在间断点附近会出现振荡和过冲,且不随项数增加而消失,只是振荡区域变窄。这是傅里叶分析的一个固有特性。

4.5 卷积定理

这是傅里叶变换最重要的性质之一:

  • 时域卷积 ↔ 频域乘积f(t)∗g(t)↔F(ω)⋅G(ω)f(t) * g(t) \leftrightarrow F(\omega) \cdot G(\omega)f(t)g(t)F(ω)G(ω)
  • 时域乘积 ↔ 频域卷积
    • 连续:f(t)⋅g(t)↔12πF(ω)∗G(ω)f(t) \cdot g(t) \leftrightarrow \frac{1}{2\pi} F(\omega) * G(\omega)f(t)g(t)2π1F(ω)G(ω)
    • 离散时间:x[n]⋅y[n]↔X(eiω)∗Y(eiω)x[n] \cdot y[n] \leftrightarrow X(e^{i\omega}) * Y(e^{i\omega})x[n]y[n]X(e)Y(e)
    • DFT:x[n]⋅y[n]↔1NX[k]∗Y[k]x[n] \cdot y[n] \leftrightarrow \frac{1}{N} X[k] * Y[k]x[n]y[n]N1X[k]Y[k](循环卷积)

4.6 帕塞瓦尔定理(能量守恒)

信号在时域的总能量等于其在频域的总能量:

  • 连续:∫∣f(t)∣2dt=12π∫∣F(ω)∣2dω\int |f(t)|^2 dt = \frac{1}{2\pi} \int |F(\omega)|^2 d\omegaf(t)2dt=2π1F(ω)2dω
  • 离散(DFT):∑∣x[n]∣2=1N∑∣X[k]∣2\sum |x[n]|^2 = \frac{1}{N} \sum |X[k]|^2x[n]2=N1X[k]2

4.7 对称性

傅里叶变换具有多种对称性,如实数信号的共轭对称性:
F(−ω)=F∗(ω)F(-\omega) = F^*(\omega) F(ω)=F(ω)
这些性质在分析和计算中非常有用。

4.8 时频分辨率不确定性原理

类似于量子力学中的测不准原理,在信号分析中,你无法同时获得任意高的时间分辨率和频率分辨率。加窗(如短时傅里叶变换)是分析时变信号频谱的一种折中方法,但会带来分辨率限制。小波变换等方法是试图更好地解决这一问题的技术。


5. 使用示例

5.1 信号降噪处理

代码如下:

import numpy as np
import matplotlib.pyplot as plt# 生成含噪声的信号
fs = 1000  # 采样率
t = np.linspace(0, 1, fs, endpoint=False)
signal = np.sin(2 * np.pi * 5 * t) + (0.8 * np.sin(2 * np.pi * 20 * t))
noise = 0.5 * np.random.normal(size=len(t))
noisy_signal = signal + noise# 傅里叶变换
fft_result = np.fft.fft(noisy_signal)
freqs = np.fft.fftfreq(len(t), 1/fs)# 滤波:保留5-20Hz频率
fft_filtered = fft_result.copy()
fft_filtered[np.abs(freqs) < 3] = 0    # 去除低频噪声
fft_filtered[np.abs(freqs) > 25] = 0   # 去除高频噪声# 逆傅里叶变换
filtered_signal = np.real(np.fft.ifft(fft_filtered))# 可视化结果
plt.figure(figsize=(12, 8))plt.subplot(311)
plt.plot(t, noisy_signal)
plt.title('原始含噪声信号')
plt.ylim(-3, 3)plt.subplot(312)
plt.plot(freqs[:len(freqs)//2], np.abs(fft_result)[:len(freqs)//2])
plt.title('频域分析')
plt.xlim(0, 50)plt.subplot(313)
plt.plot(t, filtered_signal, 'r', linewidth=1.5)
plt.plot(t, signal, 'k--', alpha=0.5)
plt.title('滤波后信号 vs 原始信号')
plt.legend(['滤波后', '原始纯净信号'])
plt.ylim(-3, 3)plt.tight_layout()
plt.savefig('signal_denoising.png', dpi=120)
plt.show()

实验结果:信号噪声被明显的消减了
在这里插入图片描述

5.1 信号降噪处理

完整代码如下:

import numpy as np
import matplotlib.pyplot as plt
from skimage import data, color
from skimage.util import random_noise# 准备测试图像
image = color.rgb2gray(data.astronaut())
noisy_image = random_noise(image, mode='gaussian', var=0.01)  # 添加噪声# 二维傅里叶变换
fft_image = np.fft.fft2(noisy_image)
fft_shifted = np.fft.fftshift(fft_image)  # 低频移到中心# 创建高通滤波器
rows, cols = image.shape
crow, ccol = rows//2, cols//2
mask = np.ones((rows, cols), np.float32)
r = 30  # 滤波器半径
mask[crow-r:crow+r, ccol-r:ccol+r] = 0  # 中心区域置零# 应用滤波器
fft_filtered = fft_shifted * mask# 逆傅里叶变换
fft_ishift = np.fft.ifftshift(fft_filtered)
filtered_image = np.abs(np.fft.ifft2(fft_ishift))# 可视化结果
plt.figure(figsize=(15, 10))plt.subplot(231)
plt.imshow(image, cmap='gray')
plt.title('原始图像')plt.subplot(232)
plt.imshow(noisy_image, cmap='gray')
plt.title('带噪声图像')# 频谱可视化(对数缩放)
magnitude_spectrum = 20*np.log(np.abs(fft_shifted)+1)
plt.subplot(233)
plt.imshow(magnitude_spectrum, cmap='gray')
plt.title('频谱图')plt.subplot(234)
plt.imshow(mask, cmap='gray')
plt.title('高通滤波器')plt.subplot(235)
plt.imshow(filtered_image, cmap='gray')
plt.title('边缘增强结果')# 与原图比较
plt.subplot(236)
plt.imshow(np.clip(filtered_image*2, 0, 1), cmap='gray')  # 增强对比度
plt.title('增强效果')plt.tight_layout()
plt.savefig('image_edge_enhancement.png', dpi=120)
plt.show()

具体效果自己看吧 :)
在这里插入图片描述

两个Python示例完整展示了傅里叶变换在信号降噪和图像边缘增强中的应用,代码可直接复制运行(需安装numpy, matplotlib, scikit-image)


6. 总结

傅里叶变换是一座连接时域和频域的桥梁。它通过将复杂信号分解成最基本、最易于理解的正弦波(复指数)分量,为我们提供了分析和处理信号的强大工具。理解傅里叶变换不仅需要掌握其数学公式,更要理解其物理意义和核心思想:

任何信号都可以看作是不同频率振动的叠加。

从古老的傅里叶级数到现代无处不在的 FFT,傅里叶变换深刻地改变了我们处理信息的方式,是信号处理、通信、图像处理、物理等众多领域的基石。如果你想深入信号世界,透彻理解傅里叶变换是必不可少的第一步。


研究学习不易,点赞易。
工作生活不易,收藏易,点收藏不迷茫 :)


http://www.lryc.cn/news/594273.html

相关文章:

  • 【1】计算机视觉方法(更新)
  • 算法-递推
  • C++ 并发 future, promise和async
  • 设计模式笔记(1)简单工厂模式
  • 基于单片机的自动条幅悬挂机
  • Linux文件系统底层原理:从磁盘物理结构到LBA寻址
  • MySQL锁(一) 概述与分类
  • springboot03-一个简单的SSMP框架
  • MySQL详解三
  • 详解Mysql HashJoin加速原理
  • 乐观锁实现原理笔记
  • LINUX入门(二)QT的安装及运行环境搭建
  • 虚拟机动态IP配置
  • HTTP1-HTTP2-HTTP3简要概述
  • Qt的安装和环境配置
  • Slack介绍(一款专注于企业协作的沟通平台,旨在通过整合聊天、文件共享、任务管理及第三方工具集成,提升团队的工作效率)
  • 【智能协同云图库】第一期:用户管理接口设计与功能实现
  • 统计与大数据分析和数字经济:专业选择指南
  • 数位 dp
  • kafka生产端和消费端的僵尸实例以及解决办法
  • NumPy 库的基本运用
  • 服务器上的文件复制到本地 Windows 系统
  • 语音识别技术:从声音到文字的 AI 魔法
  • 【Linux】权限详解 权限本质、权限属性、su、sudo提权、chmod\chown\chgrp、文件类别
  • 【软件测试】使用ADB命令抓取安卓app日志信息(含指定应用)
  • imx6ull-系统移植篇11——U-Boot 移植(下)
  • 第三章-提示词-中级:进阶技巧与实践指南(12/36)
  • #SVA语法滴水穿石# (014)关于链式蕴含的陷阱
  • 【Linux】1. Linux操作系统介绍及环境搭建
  • golang踩坑之url不会decode问题