简单信号处理

Posted by Psyduck on October 27, 2018

因为我家那个小笨蛋要出什么公开赛的题目。。。在官方题解里挂了我这个博客的友链,感觉博客一直破破烂烂的又没啥文章有点不太好意思XD,就把之前组会讲的东西拿出来写一写。

又及,本文所有图片全部来自于polikar_wavelets


Fourier Transform

傅立叶变换的基本形式形如下图

image-20181027154833109

如果我们给定一个信号

​ $x(t)=cos(2𝞹5t)+cos(2𝞹10t)+cos(2𝞹20t)+cos(2𝞹50t)$

再经过上述式子进行傅立叶变换之后就可以将时域上的信号转化为如下的频域信号

image-20181027160541690image-20181027160601876

可以看到,对于时域上的平稳信号,傅立叶变换可以非常好的把他们按照频率进行分解,但是如果我们对非平稳信号进行傅立叶变换就会得到下面这样尴尬的结果

image-20181027162240783

从傅立叶变换的本质出发解释这个现象会显得合理许多,如图一所示,在数学上傅立叶变换其实可以认为是将基函数(即三角函数)与待分解函数信号在时域上进行乘积,这样子的数乘我们其实可以理解为,计算基函数与待分解函数在时域上的相关性。由于是单纯的在整个频域上进行数乘然后直接积分,所以傅立叶变换实际上是丢失了时间信息的。换言之,傅立叶只能知道待分解信号中有哪些成分,并不能知道这些成分是在何时出现的。这也是为什么如上图所示,对于两个完全不同的非平稳信号傅立叶变换却会得到完全相同的结果。

非常不幸的是,平稳信号一般就只会出现在《信号分析与处理》的试卷上╭(╯3╰)╮一般应用在项目上傅立叶变换基本没啥用处,我们需要更加高级的方法,来得到信号关于时刻变换的频率与幅值,也就是所谓的时频分析。

Short-time Fourier Transform

我们先做出一个基本假设,就是对于一个连续信号来说,如果我们将其分为无数个连续等长的小块,那么我们可以认为在单个小块中我们的信号可以近似认为成平稳信号。学过一点微积分的同学应该都不能理解这个假设。

从这样一个基本假设中我们就可以得到时频分析最为naive的一个想法——对信号加窗,然后通过让窗函数扫过整个时域的先后来得到时间信息,如果有用python搭过人工智障的话可以简单类比为Object detection 中的 Slide windows

image-20181027164510902

写成数学表达式就如上图所示,很单纯的对信号加窗

image-20181027164251673

通过这样的改进我们再对上个section中的信号进行分解,就能非常清晰的看到什么样频率的信号出现在什么时间。

但是既然对函数加窗了,窗函数的大小就又是一个非常头疼的问题了。在解释这个问题的时候大家通常喜欢引入海森堡不确定性定理来解释(´Д` )是不是听起来就感觉很麻烦XD,其实用人话说就是我们不能同时获取一个粒子的动量和位置,在这个场景下我们可以理解为,我们不能同时获取信号的时刻和频率。体现在窗函数的参数选择上就是——太窄的框在时间维上有更精确的表达,但对于频率的分辨率就比较差了、而太宽的框在频率上能解析得很好,但是在时间维上分辨率就很差。

image-20181027165950588image-20181027165959565

image-20181027170007463

正因为以上性质,我们可以说,对于时变的非稳态信号,高频适合小窗口,低频适合大窗口,但STFT的窗函数大小是固定的。这时最为naive的想法自然就是使得窗函数宽度自适应,但实际上由于傅立叶变换的基底,即三角函数,自身并不是正交的,做可变窗的STFT会引入大量的冗余信号。

Wavelet transform

与傅立叶变换完全不同的是,小波变换为了解决时间维信息的问题,直接换掉了傅立叶变换中的基函数,将三角函数换为了小波函数。

image-20181027212753233

其中最为根本的变化就在于,三角函数是无限长的,铺满了整个时域,所以无法得到任何时间信息,而小波函数是一个衰减的有限长函数。我们称上式为一个母小波函数,不同于傅里叶变换,变量只有频率ω。小波变换有两个变量:尺度s(scale)和平移量 τ(translation)。尺度a控制小波函数的伸缩,平移量 τ控制小波函数的平移。尺度就对应于频率,平移量 τ就对应于时间。通过将一个有限长函数不断平移来获取时间信息,伸缩这个母小波函数并与原函数计算相关性就得到了频率。

image-20181027213316832 image-20181027213320915

当然真正使用小波变换还需要尺度函数和母小波函数一同构造小波函数,才能进行信号的多分辨率分析,不过在这篇博客中就不再深入讨论了XD

下一篇应该会在这些简单的信号处理基础上讲一下Compressed Sensing 主要是发现了 2017 ICML一篇使用生成模型做Compressed Sensing的还挺感兴趣的。

总算是久违的更了一下博客(´▽`)虽然也不知道下次会咕到什么时候XD