导读:
在数字信号处理中,我们把信号分为时域信号与频域信号。傅里叶发现:任何周期信号(时域)都能够由不同频率谐波的正弦波(频域)叠加而成。沟通起时域频域最为关键的一点就是我们要学习的傅里叶变换(Fourier Transform)。
在CSDN上有诸多大佬,对傅里叶变换的来龙去脉做了较为清晰的阐释。此处就不过多赘述其原理,感兴趣的自行阅读:傅里叶变换的理解-从正弦信号到傅里叶_正弦信号的傅里叶变换-CSDN博客;
数字信号处理期末总复习_级联型结构怎么因式分解-CSDN博客。
本人更加喜欢的是《数字信号处理期末总复习》,总有种让我还在期末备考的感觉。并且让大家不仅仅对傅里叶变换,还对数字信号有了一个基础的了解。
连续与离散傅里叶变换
傅里叶变换的常见公式如图1所示。
图1. 常见傅里叶变换公式
首先,对于傅里叶变换先给一个总结性的结果,
1、如果时域信号是周期的,那么它的频谱就是离散的。
2、如果时域信号是非周期的,那么它的频谱就是连续的。
3、如果时域信号是离散的,那么它的频谱就是周期的。
4、如果时域信号是连续的,那么它的频谱就是非周期的。
如果将时域信号周期非周期,离散非离散进行组合,就会得到四种组合,1、周期连续;2、非周期连续;3、非周期离散;4、周期离散。
实际上,我们常用的傅里叶变换公式为连续时间傅里叶变化,即CTFT(Continuous-Time Fourier Transform),用来分析和处理连续时间的模拟信号。在实际应用中,由于连续时间信号的频谱可能是无限宽的,因此很难直接计算CTFT。通常,我们会对信号进行窗函数处理,将其截断为有限时长的信号,然后使用离散时间傅里叶变换(DTFT)或离散傅里叶变换(DFT)来近似计算。
离散时间傅里叶变换(Discrete-Time Fourier Transform,DTFT)是连续时间信号的傅里叶变换在离散时间信号上的推广。DTFT为无限长序列提供了频域分析的方法。对于一个离散时间信号 x[n],其DTFT定义为:
DTFT将离散时间信号从时域转换到频域,得到的是信号的频率响应,需要注意的DTFT的使用场景是时域信号截断得到的有限长序列,但得到的频谱是连续的。
如果我们将DTFT得到连续频谱进一步离散化,那我们得到的就是离散傅里叶变换的结果。离散傅里叶变换(Discrete Fourier Transform,DFT)是一种将信号从时域转换到频域的数学方法。DFT是连续傅里叶变换在离散时间信号上的等价形式。对于一个长度为N的离散序列 x[n],其DFT定义为:
对比DFT与DTFT的表达式,我们可以得到这样一个结论:
DFT得到的结果X(k)是对DTFT得到的结果X(e^jw)在区间[0,2pi)的N点等间隔采样。
什么是快速傅里叶变换
在实际应用中,通常会使用快速傅里叶变换(Fast Fourier Transform,FFT)算法来高效地计算DFT,DFT的直接计算涉及到对每个频域样本 X[k]的计算,每个样本都需要对时域信号 x[n]的所有N个样本进行乘法和累加操作。因此,对于N个样本的信号,DFT需要进行 N×N次乘法操作,即乘法复杂度是 O(N*N)。而FFT可以将复杂度降低到 O(NlogN),FFT算法的核心思想是将一个DFT分解为多个小规模的DFT,然后利用这些小规模DFT的结果来构建原始DFT的结果。这种方法可以显著减少所需的乘法操作次数。在实际应用中,FFT算法被广泛应用于信号处理、图像处理、音频分析、雷达系统、无线通信等领域。实际上,FFT算法有多种不同的变体,如Cooley-Tukey算法、Rader算法、Bluestein算法等,它们在不同的应用场景下各有优势。
FFT算法的实现通常需要考虑数据的存储和访问模式,以及硬件的并行处理能力。在编程实现中,许多编程语言和数学库都提供了FFT的实现,例如:
- NumPy:Python的一个科学计算库,提供了
numpy.fft
模块。 - MATLAB:提供了
fft
函数。 - FFTW:是一个高效的C库,用于计算一维或多维的DFT。
- KissFFT:是一个小型、易于使用的FFT库,适用于嵌入式系统。
大家根据实际编程需要去使用相应的FFT函数库即可。具体的推导可以参考经典的Cooley-Tukey算法,该算法使用分治思想,递归计算DFT,最小计算单元为蝶形运算单元。
如何理解和掌握快速傅里叶变换的计算和概念? - 知乎 (zhihu.com)高赞回答,详细的推导了分治下的FFT算法。
傅里叶变换与信号能量、功率计算(帕斯瓦尔定理,维纳-辛钦定理)
以下内容是信号处理中的基本概念,用于区分能量信号和功率信号,并提供了计算它们能量和功率的方法。能量信号是在整个时间轴上能量有限的信号,而功率信号则是能量无限但功率有限的信号。周期信号的傅里叶变换提供了一种将信号分解为其组成频率成分的方法。
帕斯瓦尔定理(Parseval's Theorem)是信号处理和傅里叶分析中的一个重要定理,它建立了信号在时域和频域的能量之间的关系。帕斯瓦尔定理表明,一个信号的总能量(在时域中计算)等于其频谱的总能量(在频域中计算)。以连续时间的傅里叶变换为例,下面推导下该定理的数学原理。
对于宽平稳随机过程,这类随机过程的统计特性不随时间变化,且其均值、自相关函数和功率谱密度等特性是稳定的。维纳辛钦定理(Wiener-Khinchin Theorem)是信号处理和傅里叶分析中的一个重要结果,该定理描述了信号的自相关函数和它的功率谱密度(Power Spectral Density, PSD)之间的关系。定理表明,一个宽平稳随机过程的自相关函数的傅里叶变换等于其功率谱密度。维纳辛钦定理提供了一种从功率谱密度计算自相关函数的方法,反之亦然。同时说明了随机过程的频域特性(功率谱)和时域特性(自相关)之间的密切关系。
傅里叶变换与经典功率谱估计
功率谱估计(Power Spectral Density Estimation, PSDE)是信号处理中的一个重要问题,它用于估计信号的功率谱密度,即信号功率在频域上的分布。对于信号的处理,总的来说有两类方法:一类是时域处理,比如维纳-卡尔曼滤波、自适应滤波这些;另一类是频域处理,如果针对确定性信号,当这些信号满足绝对可积或者可和时,直接转换到频域处理。针对随机信号(大自然中这些信号居多),采用随机信号的处理方法(比如协方差、自相关矩阵等)对信号进行功率谱估计。
功率谱的估计主要包括经典谱估计和现代谱估计两种方法。经典谱估计由于分析的输入信号为有限长,不能解决时间分辨率和频率分辨率的矛盾(测不准原理)、方差性能差,于是引入了现代谱估计:参数模型法具体表现为AR、MA、ARMA等方法估计出随机信号的功率谱。非参数模型法主要包括Pisarenko谱波分解等方法。以下是一些常见的功率谱估计方法:
-
周期图法: 周期图法是通过计算信号的离散傅里叶变换(DFT)的平方幅度来估计功率谱。它是最简单的功率谱估计方法,适用于平稳信号。
-
Bartlett's Method: 巴特利特法是一种将信号分割成重叠的段,然后对每段信号计算DFT,最后对所有DFT结果取平均的方法。这种方法可以减少估计的方差。
-
Welch's Method: 威尔奇法是巴特利特法的改进,它在平均之前对每个段的DFT结果进行了加窗处理,并且使用了修正的周期图来减少估计的偏差和方差。
-
多窗口法: 多窗口法使用不同的窗口函数对信号进行分段,然后对每个段进行功率谱估计,最后将结果结合起来。这种方法可以提供更平滑的功率谱估计。
-
最大熵法: 最大熵法基于最大熵原理,通过最大化信号的熵来估计功率谱。这种方法可以提供更平滑的估计,并且对噪声具有较好的抑制作用。
-
Yule-Walker法: Yule-Walker法基于自相关函数和功率谱之间的关系,通过求解Yule-Walker方程来估计功率谱。这种方法适用于自相关函数已知的情况。
-
协方差法: 协方差法类似于Yule-Walker方法,但是它使用信号的协方差而不是自相关函数。
-
非参数方法: 非参数方法不依赖于信号的参数模型,而是直接从数据中估计功率谱。这些方法包括基于数据重采样的技术。
-
参数方法: 参数方法基于信号的参数模型,如自回归(AR)、移动平均(MA)或自回归移动平均(ARMA)模型,通过估计模型参数来估计功率谱。
-
短时傅里叶变换(STFT): STFT是将信号分割成短时间帧,然后对每个帧进行傅里叶变换,从而得到信号的时频表示。这种方法可以提供信号的时变功率谱信息。
-
小波变换: 小波变换是一种时频分析工具,它通过在不同频率上使用不同尺寸的窗口来分析信号。小波变换可以提供信号的时频分布,并且对非平稳信号特别有效。
选择哪种功率谱估计方法取决于信号的特性、所需的估计精度以及计算资源等因素。在实际应用中,可能需要尝试多种方法来确定最适合特定信号和应用需求的功率谱估计方法。
经典功率谱估计
经典功率谱估计采用的是传统傅里叶变换分析方法(又称线性谱估计),主要分为自相关法(间接法)和周期图法(直接法)两种。自相关法在1985年提出,先估计自相关函数,再计算功率谱。周期图法直接对观测数据进行快速傅里叶变换,得到功率谱。优点是可以直接FFT快速计算,所以应用比较广泛。
经典谱估计优点是计算效率高,缺点是频率分辨率低,常用于频率分辨率要求不高的场合。
BT法(间接法)
BT法是一种通过估计自相关函数,然后对其进行傅里叶变换以获得功率谱的方法。在这种方法中,使用有偏自相关函数估计,其误差相对较小,并且是一种渐近一致估计。
周期图法(直接法)
利用有偏自相关函数的BT法和周期图法是等价的,均属于有偏估计,N趋近无穷,周期图的统计平均值趋于真值,周期图属于渐近无偏估计。
经典谱估计方法改进
存在问题:BT法和周期图法估计功率谱都不是一致估计,频率分辨率低。
解决方法:对周期图进行修正,使其满足一致估计条件。可以采用平滑处理的方法,使其方差减小。存在如下三种方法:Bartlett平均周期图法;窗口处理法平均周期图;Welch法(修正的周期图求平均法)。
传统的功率谱估计方法无论采取哪一种改进方法,总是以减少分辨率为代价,换取估计方差
的减少,提高分辨率的问题无法根本解决。
现代功率谱估计
自回归(AR)模型是一种统计模型,用于描述时间序列数据的动态特性。在信号处理和时间序列分析中,AR模型被广泛用于信号的谱估计,即估计信号的功率谱密度(PSD)。AR模型假设当前值可以由其过去的值和白噪声线性预测得到,方式求解AR模型系数或线性预测器系数。
现代功率谱估计还有最大熵谱估计等,太难了,没学会,大家自行寻找资料学习哈。书籍推荐《现代信号谱分析》,翻译自信号处理大佬、IEEE信号处理协会技术成就奖获得者Petre Stoica教授2005年编写的教材《Spectral Analysis of Signals》。该书介绍了经典谱分析和现代谱分析的基本理论和方法,主要内容包括谱估计的基本概念(自相关,能量谱和功率谱),非参数化谱分析(周期图和相关图,加窗技术),有理谱分析(自回归,滑动平均以及自回归滑动平均方法),线谱分析(最小二乘估计,Yule-Walker和子空间方法),滤波器组方法(改进的滤波器组方法,Capon方法,APES方法),阵列信号处理(波束形成,Capon方法,参数化波达方向估计),有关矩阵分析、Cramer-Rao理论和模型阶数选取的主要结论。
本文阐述的傅里叶变换, 信号功率能量计算,谱估计等方法,均在Matlab上有函数可以直接调用,信号处理学习的过程中Matlab技能必须掌握!