通俗易懂理解傅里叶变换(Fourier Transform)

2024-03-20 11:20

本文主要是介绍通俗易懂理解傅里叶变换(Fourier Transform),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

重要说明:本文从网上资料整理而来,仅记录博主学习相关知识点的过程,侵删。

一、参考资料

从傅里叶(Fourier)变换到伽柏(Gabor)变换再到小波(Wavelet)变换

《The Wavelet Tutorial》小波教程 中文翻译(上)

形象易懂讲解算法I——小波变换

二、相关介绍

1. 信号相关介绍

1.1 时域信号

实际上,大多数信号都是原始格式的时域信号(Time-Domain)。也就是说,不管信号测量的是什么,它都是时间的函数。换句话说,当我们绘制信号时,其中一个轴是时间(自变量),另一个轴(因变量)通常是振幅(amplitude)。当我们绘制时域信号时,我们得到信号的时间-振幅表示(time-amplitude representation)。

假设一个时域信号是原始(Raw)信号,而一个信号已经被任何可用的数学转换方法“转换(transformed)”为处理过的(processed)信号。

1.2 为什么需要信号变换?

对于大多数信号处理相关应用,这种时间幅度表示(time-amplitude representation)并不总是信号的最佳表示。在许多情况下,最显著的信息隐藏在信号的频率内容中。一个信号的频谱(frequency spectrum)基本上就是那个信号的频谱成分(spectral components)。信号的频谱显示了信号中存在的频率。因此,对信号进行数学变换,以从该信号中获得原始信号中不容易获得的进一步信息。

频谱成分:对于信号的频率-振幅表示,振幅为波峰对应的频率,即为一个频谱成分。

1.3 平稳性信号(不随时间变化)

平稳信号,是指频率内容不随时间变化的信号,不同的频谱成分有相同的时间间隔(周期)。换句话说,平稳信号的频率内容不随时间变化。在这种情况下,不需要知道频谱成分在什么时候存在,因为所有的频谱成分在任何时候都存在(all frequency components exist at all times)。简单理解,平稳信号中存在的所有频率成分,都存在于信号的整个过程中,一直有10Hz,一直有50Hz,一直有100Hz。

例如,下面的信号是一个平稳信号,因为它在任何给定时刻包含的频率为10、25、50和100 Hz。
x ( t ) = c o s ( 2 ∗ p i ∗ 10 ∗ t ) + c o s ( 2 ∗ p i ∗ 25 ∗ t ) + c o s ( 2 ∗ p i ∗ 50 ∗ t ) + c o s ( 2 ∗ p i ∗ 100 ∗ t ) x(t)=cos(2*pi*10*t)+cos(2*pi*25*t)+cos(2*pi*50*t)+cos(2*pi*100*t) x(t)=cos(2pi10t)+cos(2pi25t)+cos(2pi50t)+cos(2pi100t)
平稳信号如下图所示:

在这里插入图片描述

平稳信号的傅里叶变换如下图所示:

在这里插入图片描述

最上面的图形是平稳信号的(对称的一半)频谱。下面的图是上面图的放大版,只显示了我们感兴趣的频率范围。注意对应于频率10、25、50和100Hz的四个频谱成分。

对于平稳信号,10Hz、25Hz、50Hz、100Hz不同频率的频谱,除了波纹(ripples)和振幅差(总是可以归一化的)之外,这几种频谱几乎是相同的,尽管对应的时域信号彼此不太接近。回想一下,傅立叶变换给出了信号的频谱内容,但它没有给出这些频谱成分在何时出现的信息。因此,傅立叶变换适用于平稳信号

1.4 非平稳信号(随时间变化)

在实际应用中,由于存在大量实际的平稳信号和非平稳信号,因此很难进行分离。例如,几乎所有的生物信号都是非平稳的。其中最著名的有ECG(心脏的电活动,心电图),EEG(大脑的电活动,脑电图)和EMG(肌肉的电活动,肌电图)。

非平稳信号,是指频率内容随时间变化的信号,不同的频谱成分有不同的时间间隔(周期)。绘制了一个频率随时间不断变化的信号,如下图所示:

在这里插入图片描述

如下图绘制的信号具有四个不同的频率成分在四个不同的时间间隔,因此是一个非平稳信号。间隔0到300ms有一个100Hz的正弦信号,间隔300到600ms有一个50Hz的正弦信号,间隔600到800ms有一个25Hz的正弦信号,最后间隔800到1000ms有一个10Hz的正弦信号。

在这里插入图片描述

非平稳信号的傅里叶变换如下图所示:

在这里插入图片描述

此时不要关心小小的涟漪,它们是由于一个频率分量突然变化到另一个频率分量。高频分量的振幅要高于低频分量的振幅。这是因为较高的频率(每个300毫秒)比较低的频率(每个200毫秒)持续的时间更长。(振幅的精确值并不重要)。

2. 频率相关介绍

2.1 为什么需要频率信息?

通常情况下,在时域上不容易看到的信息可以在频域上看到

让我们举一个生物学信号的例子。假设我们正在观察一个心电图(ECG)信号。健康心电图信号的典型形态对心脏病学家来说是众所周知的。任何明显的形状偏离通常被认为是一种病理状态的症状。然而,这种病理状态在原始时域信号中并不总是很明显。心电医师通常使用记录在条带上的时域心电信号来分析心电信号。最近,新的计算机化心电图记录仪/分析仪也利用频率信息来确定病理状态是否存在。当对信号的频率内容进行分析时,病理状态有时可以更容易地诊断出来。

2.2 频率与速率的关系

我们都知道频率与速度的变化有关。如果某物(数学或物理变量)迅速变化,我们说它是高频的,而如果这个变量变化不那么迅速,它平稳地变化,我们说它是低频的。如果这个变量完全不变,那么我们说它的频率为零,或者没有频率。例如,一份日报的出版频率比一份月刊的出版频率要高。

频率以(周期/秒)为单位,或者有一个更常见的名字“赫兹(Hertz)”。例如,电流频率如下图所示,第一个是3Hz的正弦波,第二个是10Hz,第三个是50Hz:

在这里插入图片描述

研究表明:较高的频率可以更好地在时间上分辨,较低的频率可以更好地在频率上分辨。这意味着,某个高频分量可以比低频分量更好的定位在时域(相对误差更小)。相反,低频分量比高频分量能更好地定位在频率中。

2.3 如何测量频率

我们如何测量频率,或者说如何找到一个信号的频率内容呢?答案是傅里叶变换

如果取信号在时域的傅里叶变换,则得到该信号的频幅表示。换句话说,我们现在有一副图,其中一个轴是频率,另一个轴是振幅。这张图告诉我们信号中每个频率有多少。

频率轴从零开始,一直到无穷远。对于每个频率,我们有一个振幅值(amplitude value)。例如,如果我们取家庭中使用的电流做FT,我们会在50Hz处有一个尖峰,其他地方没有,因为那个信号只有50hz的频谱成分。然而,实际的信号并没有怎么简单,在大多数实际应用中,信号包含不止一个频谱成分。下面显示了50Hz信号的傅里叶变换。

在这里插入图片描述

3. 海森堡不确定性原理

不确定性原理,或者叫测不准原理,最早出自量子力学,意为在微观世界,粒子的位置与动量不可同时被确定。但是这个原理并不局限于量子力学,有很多物理量都有这样的特征,比如能量和时间、角动量和角度。体现在信号领域就是时域和频域。不过更准确一点的表述应该是:一个信号不能在时空域和频域上同时过于集中;一个函数时域越“窄”,它经傅里叶变换的频域后就越“宽”。

三、傅里叶变换(FT)

//TODO

3.1 FT简介

几乎从1822年Fourier发表他的“热传导理论”以来,傅氏分析便成为最完美的数学分析工具与最广泛、最有效地应用着的信号分析方法之一。

傅里叶变换(Fourier Transform,简称“FT“)是将信号从时域空间变换到频域空间,并用频率-振幅表示。FT(以及WT)是一种可逆变换,也就是说,它允许在原始信号处理(转换)信号之间来回切换。但是,在任何给定的时间,只有其中一个可用。即时域信号中没有频率信息,傅里叶变换信号中也没有时间信息。

傅里叶变换的本质,是把一个时间(时域)信号拆解成不同频率的正弦波的叠加,通过观察拆解后的正弦波,能够知道该信号的频率分量是什么。傅里叶变换丢失了时间(时域)特性。

傅里叶变换告诉我们某个频率成分是否存在。这个信息与这个分量出现的时间无关。因此,在用傅立叶变换对信号进行处理之前,知道它是否是平稳的是非常重要的。简单来说,傅里叶变换适合平稳信号

3.2 FT的基本类型

针对不同种类的信号共有四种基本傅里叶变换,分别是:针对连续周期信号的连续傅里叶级数(Continuous Fourier Series, CFS,一般直接简称为FS)、针对连续非周期信号的连续时间傅里叶变换(Continuous Time Fourier Transform, CTFT,一般直接简称为FT)、针对离散周期信号的离散傅里叶级数(Discrete Fourier Series, DFS)、针对离散非周期信号的离散时间傅里叶变换(Discrete Time Fourier Transform, DTFT),这四种基本傅里叶变换都不适合计算机处理(要求时域和变换域均为离散的、有限长的),因此把DFS进行变形,取其时域和频域的主值区间定义出了离散傅里叶变换(Discrete Fourier Transform, DFT),直接按照DFT公式计算的话计算量太大,于是就又有了各种快速计算方法,统称为快速傅里叶变换(Fast Fourier Transform, FFT)。

3.3 FT的基函数

傅里叶变换把无限长的三角函数作为基函数:

在这里插入图片描述

傅里叶变换的基函数会伸缩、会平移(其实本质并非平移,而是两个正交基的分解)。缩得窄,对应高频;伸得宽,对应低频。然后这个基函数不断和信号做相乘。某一个尺度(宽窄)下乘出来的结果,就可以理解成信号所包含的当前尺度对应频率成分有多少。于是,基函数会在某些尺度下,与信号相乘得到一个很大的值,因为此时二者有一种重合关系。那么我们就知道信号包含该频率的成分的多少。

仔细体会可以发现,这一步其实是在计算信号和三角函数的相关性。

在这里插入图片描述

在这里插入图片描述

上图中,这两种尺度能乘出一个大的值(相关度高),所以信号包含较多的这两个频率成分,在频谱上这两个频率会出现两个峰。

3.4 FT的全域性

从傅里叶变换公式中我们知道,要从一个信号来得到其傅里叶变换(频谱),必须取无限长的时间量 ( − ∞ , + ∞ ) \left.\left(\begin{array}{cc}{-\infty},&{+\infty}\\\end{array}\right.\right) (,+),即必须要获得时域中的全部信息,反之要利用频谱来描述信号时,无论这个信号的时间多么短,都需要用整个频域来描述。在某一时间段[t1,t2]对应的频谱信息傅里叶变换无法给出,而这种局部信息又常常是我们十分感兴趣的。如对音乐信号,我们常常关心的是什么时候发出什么频率的音符,对地震信号我们关心的是什么空间位置出现什么频率的波等等,这些信号都是非平稳信号,它们的频域特性随时间变化,所以信号在任一时刻的频域特征都很重要,不能将时频两域完全分离。

即Fourier变换不具有局部性。它只适用于确定性信号平稳信号,由于缺乏时间的局部信息,对时变信号、非平稳信号,Fourier频率分析存在严重不足,它无法告知某些频率成分发生在哪些时间内,无法表示某个时刻信号频谱的分布情况。信号在某时刻的一个小的邻域内发生变化,那么信号的整个频谱都要受到影响,而频谱的变化从根本上来说无法标定发生变化的时间位置和发生变化的剧烈程度。傅里叶变换的时域和频域是完全分割的

其实根本原因是傅里叶变换的三角基是全域性的,其局部化性质不好,因而只能得到信号的整个频谱,难以在任何有限频段上确定任意小范围内信号的局部特征。

3.5 FT的吉布斯效应(突变信号)

傅里叶变换处理突变信号存在吉布斯效应,用无限长的三角函数很难拟合突变信号。

在这里插入图片描述

3.6 FT的局限性

对于非平稳信号,傅里叶变换有局限性。看如下一个简单的信号:

在这里插入图片描述

对平稳信号做快速傅里叶变换,可以在频谱上看到清晰的四条线,信号包含四个频谱成分。

在这里插入图片描述

如上图,最上边的是频率始终不变的平稳信号。而下边两个则是频率随着时间改变的非平稳信号,它们同样包含和最上边信号相同频率的四个成分。

做快速傅里叶变换后,可以发现这三个时域上有巨大差异的信号,频谱(幅值谱)却非常一致。尤其是下边两个非平稳信号,我们从频谱上无法区分它们,因为它们包含的四个频率的信号的成分确实是一样的,只是出现的先后顺序不同。

可见,傅里叶变换处理非平稳信号有天生缺陷。它只能获取一段信号总体上包含哪些频率的成分,但是对各成分出现的时刻并无所知。因此时域相差很大的两个信号,可能频谱图一样

然而平稳信号大多是人为制造出来的,自然界的大量信号几乎都是非平稳的,所以在比如生物医学信号分析等领域的论文中,基本看不到单纯傅里叶变换这样naive的方法。

在这里插入图片描述

上图所示的是一个正常人的事件相关电位。对于这样的非平稳信号,只知道包含哪些频率成分是不够的,我们还想知道各个成分出现的时间。知道信号频率随时间变化的情况,各个时刻的瞬时频率及其幅值——这也就是时频分析

四、短时傅立叶变换(STFT)

1. 引言

傅立叶变换可以对信号的频谱加以剖析,它对平稳的信号能够操控得当,但对于非平稳信号来说,则具有局限性。自然界中大多数都是非平稳信号, 只知道信号包含哪些频谱成分是无法解决实际问题的,还需要知道这些成分对应的时间点或者时间段,因此用傅里叶变换处理起来比较棘手。

针对非平稳信号问题,一个有用的方法就是对信号添加时间窗口(时间窗)。由于整个时域很长,所以我们将其划分为多个长度相等的小过程,每个小过程几乎都是平稳信号,然后利用傅里叶变换,便可知道每个时间点对应的频率。此外,为了获得平稳性信号,我们必须有一个足够短的窗口。因为使用无限长的窗口得到傅立叶变换,它提供完美的频率分辨率,但没有时间信息。因此,时间窗口越窄,时间分辨率越好,平稳性假设越好,频率分辨率越差。

窗口窄 ===> 时间分辨率好,频率分辨率差;

窗口宽 ===> 时间分辨率差,频率分辨率好;

为了解决这种局部性的问题,1946年,DennisGabor提出了“窗口Fourier变换”的Gabor变换,即短时傅里叶变换。

Gabor,一般音译为伽(gā)柏(bó)。

在这里插入图片描述

2. STFT的概念

把整个时域过程分解成无数个等长的小过程,每个小过程近似平稳,再傅里叶变换,就知道在哪个时间点上出现了什么频率了,这就是短时傅里叶变换(Short Time FourierTransform, STFT),又称为窗口傅里叶变换。在STFT中,信号被分割成足够小的片段,这些片段(部分)的信号可以假定是静止的。

STFT可以达到时频局部化的目的:它能够在整体上提供信号的全部信息,而又能提供在任一局部时间内信号变化剧烈程度的信息。简言之,可以同时提供时域和频域局部化的信息。能够完成局部分析的关键是“窗口”,窗口的尺度是局部性程度的表征。当窗函数取为高斯窗时一般称为STFT。选择高斯窗的原因在于:

  1. 高斯函数的Fourier变换仍是高斯函数,这使得Fourier逆变换也用窗函数局部化了,同时体现了频率域的局部化;
  2. 根据Heisenberg测不准原理,高斯函数窗口面积已达到测不准原理下界,是时域窗口面积达到最小的函数,即Gabor变换是最优的STFT。

注意STFT的公式输出有两个自变量,时间t和频率ω,即它是一种时频分析。但由于一旦窗口函数选定后,时频窗口的形状便保持不变,割断了频率与窗口宽度的内在联系,STFT实质是具有单一分辨率的分析。STFT的窗函数就要求是一个紧支集函数。

如下图,在时域上分成一段一段做FFT,这样就可以知道频谱成分随时间的变化情况。

在这里插入图片描述

用这样的方法,可以得到一个信号的时频图:

在这里插入图片描述

图上既能看到10Hz, 25 Hz, 50 Hz, 100 Hz四个频域成分,还能看到出现的时间。两排峰是对称的,只看一排即可。

STFT可以用海森堡不确定性原理来解释。类似于我们不能同时获取一个粒子的动量和位置,我们也不能同时获取信号绝对精准的时刻和频率。这也是一对不可兼得的矛盾体。我们不知道在某个瞬间哪个频率分量存在,我们知道的只能是在一个时间段内某个频带的分量存在。 所以绝对意义的瞬时频率是不存在的。

3. STFT的缺陷

使用STFT存在一个问题,我们应该用多宽的窗函数?

窗太宽太窄都有问题:

在这里插入图片描述

在这里插入图片描述

窗太窄,窗内的信号太短,会导致频率分析不够精准,频率分辨率差。窗太宽,时域上又不够精细,时间分辨率低。

实例效果,如下图所示:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

上图对同一个信号(4个频率成分)采用不同宽度的时间窗做STFT,结果如右图。用窄窗,时频图在时间轴上分辨率很高,几个峰基本成矩形,而用宽窗则变成了绵延的矮山。但是频率轴上,窄窗明显不如下边两个宽窗精确。

所以,窄窗口时间分辨率高、频率分辨率低宽窗口时间分辨率低、频率分辨率高。对于随时间变化的非稳态信号,高频适合小窗口,低频适合大窗口。然而STFT的窗口是固定的,在一次STFT中宽度不会变化,所以STFT还是无法满足非平稳信号变化的频率的需求。

这篇关于通俗易懂理解傅里叶变换(Fourier Transform)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/829292

相关文章

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是

分布式系统的个人理解小结

分布式系统:分的微小服务,以小而独立的业务为单位,形成子系统。 然后分布式系统中需要有统一的调用,形成大的聚合服务。 同时,微服务群,需要有交流(通讯,注册中心,同步,异步),有管理(监控,调度)。 对外服务,需要有控制的对外开发,安全网关。

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

理解java虚拟机内存收集

学习《深入理解Java虚拟机》时个人的理解笔记 1、为什么要去了解垃圾收集和内存回收技术? 当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就必须对这些“自动化”的技术实施必要的监控和调节。 2、“哲学三问”内存收集 what?when?how? 那些内存需要回收?什么时候回收?如何回收? 这是一个整体的问题,确定了什么状态的内存可以

理解分类器(linear)为什么可以做语义方向的指导?(解纠缠)

Attribute Manipulation(属性编辑)、disentanglement(解纠缠)常用的两种做法:线性探针和PCA_disentanglement和alignment-CSDN博客 在解纠缠的过程中,有一种非常简单的方法来引导G向某个方向进行生成,然后我们通过向不同的方向进行行走,那么就会得到这个属性上的图像。那么你利用多个方向进行生成,便得到了各种方向的图像,每个方向对应了很多