【数据结构和算法】-傅里叶变换

傅里叶变换(Fourier Transform)是一种强大的数学工具,用于将一个信号(如声音、图像、时间序列数据等)从时域(或空间域)转换到频域进行分析。

那我们先了解,什么是时间域、空间域和频域

时间域:

时间域是描述信号随时间变化的领域。在时间域中,信号被表示为时间的函数,即信号强度或值随时间的变化。例如,音频信号就是一个典型的时间域信号,其强度随时间连续变化。在音频处理中,我们经常需要分析信号在时间域上的特性,如信号的波形、振幅、频率等。

自变量是时间,即横轴是时间,纵轴是信号的变化。其动态信号x(t)是描述信号在不同时刻取值的函数。

频域:

自变量是频率,即横轴是频率,纵轴是该频率信号的幅度,也就是通常说的频谱图。我们将上图进行转化:
从频域图可以看出,正弦波的频率为6Hz,这个6Hz的正弦波的峰值振幅为5V 。

频域图的优点是,从频域图中,可以一眼看出正弦波的频率和峰值振幅。整个正弦波在频域图上只是一个立柱立柱的位置显示了正弦波的频率,立柱的高度显示了正弦波的峰值振幅。

空间域:

空间域是描述信号或图像随空间位置变化的领域。在空间域中,图像被表示为像素或点的集合,每个像素或点都有一个对应的值(如亮度、颜色等),这些值随空间位置的变化而变化。例如,一张灰度图像就是一个二维的空间域信号,其亮度值随图像中每个像素的位置而变化。在图像处理中,我们经常需要分析图像在空间域上的特性,如边缘、纹理、形状等。

傅里叶变换

定义

傅里叶变换表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。这意味着,任何复杂的波形都可以被分解为一系列正弦波和余弦波的组合。

性质

  1. 线性性质:傅里叶变换满足线性叠加原理,即两个函数之和(或差)的傅里叶变换等于它们各自傅里叶变换之和(或差)。
  2. 对偶性:函数与其傅里叶变换之间存在一定的对称性。
  3. 平移性质:函数在时域(或空间域)的平移会导致其傅里叶变换在频域的相位变化。
  4. 尺度变换性质:函数在时域(或空间域)的压缩或拉伸会导致其傅里叶变换在频域的拉伸或压缩。
  5. 微分性质:函数的微分(或积分)的傅里叶变换与函数本身的傅里叶变换有关。
  6. 卷积定理:两个函数在时域(或空间域)的卷积等于它们各自傅里叶变换在频域的乘积。

应用

傅里叶变换在多个领域都有广泛的应用,包括但不限于:

  1. 信号处理:用于分析信号的频谱特征,如音频信号的频谱分析、滤波、降噪等。
  2. 图像处理:将图像从空间域转换到频域,进行滤波、降噪、增强等操作。例如,在图像压缩中,通过去除高频成分来减少数据量。
  3. 通信系统:在调制解调、频谱分析、信道均衡等方面发挥重要作用。
  4. 物理学:在光学、量子力学、热力学等领域中,傅里叶变换被用于分析和理解波动现象。
  5. 其他领域:在密码学、海洋学、结构动力学等领域也有应用。

傅里叶变换的类型

  1. 连续傅里叶变换:适用于连续时间或空间信号。
  2. 离散傅里叶变换(DFT):适用于离散时间或空间信号。在实际应用中,由于DFT的计算复杂度较高,通常采用快速傅里叶变换(FFT)算法来提高计算效率。

傅里叶变换的局限性

尽管傅里叶变换具有强大的分析能力,但它也存在一些局限性。例如,它无法同时提供信号在时域和频域上的高分辨率信息。为了克服这一局限性,人们提出了短时傅里叶变换(STFT)、小波变换等改进方法。

傅里叶变换的公式

F ( ω ) = ∫ − ∞ ∞ f ( t ) e − j ω t d t F(\omega) = \int_{-\infty}^{\infty}f(t)e^{-j\omega t}dt F(ω)=∫−∞∞f(t)e−jωtdt

这是啥意思呢,来我们把还给老师的高等数学拾起来:

1.f(t)

f(t) 是我们原始的时域信号,它描述了信号随时间 t 的变化

2. e − j ω t e^{-j\omega t} e−jωt

在傅里叶变换的公式中, e − j ω t e^{-j\omega t} e−jωt 是一个复数指数函数,其中 e 是自然对数的底数(约等于2.71828),j 是虚数单位(满足 j^2 = -1), ω \omega ω 是角频率(以弧度/秒为单位),t 是时间。

e − j ω t e^{-j\omega t} e−jωt 可以看作是一个旋转的向量在复平面上的表示。具体来说,这个复数可以分解为实部和虚部:

e − j ω t = c o s ( ω t ) − j s i n ( ω t ) e^{-j\omega t} = cos(\omega t) - j sin(\omega t) e−jωt=cos(ωt)−jsin(ωt)

这里, c o s ( ω t ) cos(\omega t) cos(ωt) 是这个复数的实部,而 − j s i n ( ω t ) -j sin(\omega t) −jsin(ωt) 是虚部。这个复数随时间 t 旋转,旋转的速度由 ω \omega ω 控制。在物理意义上,这种旋转表示了信号的周期性变化,而角频率 ω \omega ω 就是这种变化的快慢程度。

在傅里叶变换中, e − j ω t e^{-j\omega t} e−jωt 作为一个"基函数"被用来与原始信号 f(t) 进行比较。通过计算 f(t) 与 e − j ω t e^{-j\omega t} e−jωt 的内积(即积分),我们可以得到原始信号在频率 ω \omega ω 上的"分量"大小,这就是傅里叶变换的物理意义之一。

这个公式其实是在说:"对于每一个频率 ω \omega ω,我们看看 f ( t ) f(t) f(t) 在整个时间轴上与该频率下的正弦波 e − j ω t e^{-j\omega t} e−jωt 的匹配程度,并将这些匹配程度累加起来,得到 F ( ω ) F(\omega) F(ω)"。

为了更通俗地理解这个公式,我们可以想象一个例子:假设你有一个包含多种乐器的音乐信号 f ( t ) f(t) f(t)。傅里叶变换就是把这个音乐信号分解成不同频率(即不同音调)的正弦波。每个频率上的正弦波对应一个乐器或一个音符,而 F ( ω ) F(\omega) F(ω) 就告诉我们这个频率上的正弦波有多大(即这个乐器或音符在音乐中的音量有多大)。

相关推荐
Ljubim.te18 分钟前
软件设计师——数据结构
数据结构·笔记
Eric.Lee202125 分钟前
数据集-目标检测系列- 螃蟹 检测数据集 crab >> DataBall
python·深度学习·算法·目标检测·计算机视觉·数据集·螃蟹检测
林辞忧34 分钟前
算法修炼之路之滑动窗口
算法
￴ㅤ￴￴ㅤ9527超级帅1 小时前
LeetCode hot100---二叉树专题(C++语言)
c++·算法·leetcode
liuyang-neu1 小时前
力扣 简单 110.平衡二叉树
java·算法·leetcode·深度优先
penguin_bark1 小时前
LCR 068. 搜索插入位置
算法·leetcode·职场和发展
_GR1 小时前
每日OJ题_牛客_牛牛冲钻五_模拟_C++_Java
java·数据结构·c++·算法·动态规划
ROBIN__dyc1 小时前
表达式
算法
无限大.1 小时前
c语言实例
c语言·数据结构·算法
六点半8882 小时前
【C++】速通涉及 “vector” 的经典OJ编程题
开发语言·c++·算法·青少年编程·推荐算法