时频分析常用工具:STFT短时傅里叶变换 & 小波变化

参考:
时频分析之STFT:短时傅里叶变换的原理与实现
形象易懂讲解算法I——小波变换
https://www.zhihu.com/question/58814934

1 傅里叶变换的局限性

在这里插入图片描述
在这里插入图片描述
4个不同频率的正弦信号按不同顺序组成时域信号,但是不同的时域组合信号的傅里叶变换都是一样的,FFT无法捕捉到信号在时域分布上的不同
再看一组例子
在这里插入图片描述
在这里插入图片描述
时域上出现了一个很明显的突变扰动,然而在频域图中,这样的变化并没有很好的被捕捉到。注意到红框中部分,显然傅里叶变换把突变解释为了一系列低成分的高频信号的叠加,并没有很好的反应突变扰动给信号带来的变化

通过以上的两个例子,我们不难发现傅立叶变换的缺陷。

(1)第一个例子告诉我们,傅里叶变换只能获取一段信号总体上包含哪些频率的成分,但是对各成分出现的时刻并无所知。因此时域相差很大的两个信号,可能频谱图一样。

(2)第二个例子告诉我们,对于信号中的突变,傅里叶变换很难及时捕捉。而在有些场合,这样的突变往往是十分重要的。

傅里叶变换非常擅长分析那些频率特征均一稳定的平稳信号。但是对于非平稳信号,傅立叶变换只能告诉我们信号当中有哪些频率成分——而这对我们来讲显然是不够的。我们还想知道各个成分出现的时间先后顺序


平稳信号与非平稳信号的区别我搜了下发现难以具体说明,通信中常用的chirp信号是典型的非平稳信号


平稳信号与非平稳信号FFT后的差异还可见下图
在这里插入图片描述
最上边的是频率始终不变的平稳信号。而下边两个则是频率随着时间改变的非平稳信号,它们同样包含和最上信号相同频率的四个成分

知道信号频率随时间变化的情况,即各个时刻的瞬时频率及其幅值——这也就是时频分析

常用的有两种方法:短时傅里叶变换 STFT, 小波变换

2 STFT

把整个时域过程分解成无数个等长的小过程,每个小过程近似平稳,再傅里叶变换,就知道在哪个时间点上出现了什么频率了。”这就是短时傅里叶变换

在这里插入图片描述
用这样的方法,可以得到一个信号的时频图了:
在这里插入图片描述
使用STFT存在一个问题,我们应该用多宽的窗函数?

窗太窄,窗内的信号太短,会导致频率分析不够精准,频率分辨率差;窗太宽,时域上又不够精细,时间分辨率低。
这个其实可以用海森堡的测不准原理来解释,我们无法同时精确测量时域和频域信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由上面三个图可以看出,窄窗口时间分辨率高、频率分辨率低,宽窗口时间分辨率低、频率分辨率高。对于时变的非稳态信号,高频适合小窗口,低频适合大窗口。然而STFT的窗口是固定的,在一次STFT中宽度不会变化,所以STFT还是无法满足非稳态信号变化的频率的需求。

3 小波变换

STFT是给信号加窗,分段做FFT;而小波直接把傅里叶变换的基给换了——将无限长的三角函数基换成了有限长的会衰减的小波基。这样不仅能够获取频率,还可以定位到时间了

直接看参考第二篇知乎文章,讲的很好


最后,引用知乎看的一段话:


让我几句话讲明白小波这个事:我们无法同时测准一个信号的频率和时域,要么频域不准,要么时域不准,这两者存在一个理论极限,是可以由数学证明的客观存在,即测不准原理.(公式详见小波十讲).

连续无限长度的傅里叶分析以完全抛弃了所有的时域信息为代价,获得了完全精确的频域信息,怎么讲? 你算个频谱,看每个频点有几个振幅值? 一个吧? 你能告诉我1000Hz在第一秒多大,第二秒多大吗? 不行吧? 因为它只有一个值.

为了解决这个问题,我们引入了滑动窗口傅里叶,滑动窗口加窗傅里叶使得每个频段既能带有时域信息又能带有频域信息,这样同一个频点在不同的时间段可以获得多个振幅值,我们就拥有了这个频点的一些时域信息,但加窗傅里叶依然受测不准原理影响,窗口尺寸越大频率测得越准时域测得越不准,反之亦然.

那小波呢? 小波变换说白了还是滑动窗口傅里叶,只不过窗口尺寸在高频取短点儿,低频窗口取长点, 使得高频在时域更准,低频在频域更准.就是这么简单!

同理的我们完全可以设计一个变换使得高频频率更准,低频时域更准,或者高频频域更准中频时域更准低频频域更准… 但这些都是受测不准原理影响的,只可能更差,并不会比傅里叶更好.

所以你要知道,小波变换从某种意义上来说只是时频变换的一个trick,同样受到测不准原理的影响,它并没有真正获得比傅里叶更精确的信息.

  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
短时傅里叶变换(Short-time Fourier Transform,STFT)是将信号分解成不同频率成分的一种常用方法,可以对信号进行时频分析。它通过将信号分成若干短时窗口,然后对每个窗口进行傅里叶变换来得到该窗口频谱,从而得到信号在不同时间段的频率分布情况。STFT的基本思想是将信号局部化处理,以适应信号在不同时间段的频率变化使用MATLAB进行STFT的实现通常有两种方法:基于FFT的方法和基于矩阵运算的方法。以下是一种基于FFT的STFT的MATLAB程序示例: ```matlab % 读取音频文件 filename = 'audio.wav'; [y, fs] = audioread(filename); % 设置参数 windowSize = 1024; % 窗口大小 overlap = 512; % 重叠长度 % 计算STFT spectrogram(y, windowSize, overlap, [], fs, 'yaxis'); xlabel('时间'); ylabel('频率'); title('短时傅里叶变换'); ``` 上述程序首先通过`audioread`函数读取音频文件,并获取采样率。然后,通过`spectrogram`函数计算STFT,并绘制时频图谱。其中,`windowSize`表示窗口的大小,`overlap`表示窗口的重叠长度。最后,通过设置`xlabel`、`ylabel`和`title`函数来给图像添加标签和标题。 以上是一种简单的基于FFT的STFT的MATLAB程序示例,实际应用中可以根据具体需求进行参数的调整和结果的处理。小波变换的MATLAB实现与之类似,只是在计算频谱时采用不同的变换方法,可以使用MATLAB中的小波变换函数进行实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值