![2102954ff9e7ec5eeb1192a013969128.png](https://i-blog.csdnimg.cn/blog_migrate/53cffa79f9833aecd18201e9df440c84.jpeg)
序言
这是一篇最简单不过的matlab数字信号处理的介绍,里面涉及数字滤波,简单的图像处理和信号检测
1. 时间序列分析入门
模拟与数字信号
我们本身生活在一个模拟量的世界里,所谓模拟量,即连续变化量,屋里的温度是连续变化的,时间是连续变化的,诸如此类。而计算机是数字系统,他不能处理模拟量,而只能处理离散量,这意味着我们要把连续的模拟量进行采样,得到一系列离散的数字量。
![5e2673df88d01fa74bdca71694d61c0f.png](https://i-blog.csdnimg.cn/blog_migrate/666d53dafc4446ef187820e0d95c7f6a.jpeg)
![38a1baba27357f3b725e10ad8f0febcc.png](https://i-blog.csdnimg.cn/blog_migrate/8fcb9a78551d55262e12cdb987e40f65.jpeg)
Aliasing
所有自然界的信号都不是很干净的,都会有噪声。下面是一个更接近真实的潮汐水位高度随时间变化的数据集:
![16b412a6941eec3ca1b3b95a412a29b5.png](https://i-blog.csdnimg.cn/blog_migrate/fa524719ef23c78f03feb300fbaeaf0f.jpeg)
如果我们对它采样,大概会得到。。。这样:
![db9a7f3d64363aa41a743bb0a9835ccb.png](https://i-blog.csdnimg.cn/blog_migrate/8c94a932d93b535b1d535d3233c44f56.jpeg)
用一条线把采样点连接起来,采集的到的数字波形可以看出明显的上下振动。由于高频噪声和原来的低频真实信号相叠加,最后采集出来的数据和原来的数据相比很难看。这是因为采样的频率远低于噪声信号的频率,Aliasing发生了。
![1fb1b7b55cc1d54f501a2fd70330e515.png](https://i-blog.csdnimg.cn/blog_migrate/785d7c7c2900ec1b0f09ca197f053376.jpeg)
避免Aliasing
Aliasing 通常是有害但又不可能100%避免的:
Nyquist Theorem
这个定理告诉我们,如果想要完整采集某个频率的信号,那么你至少要用2倍于该信号的最高频率的采样率来采集,否则 Aliasing就会发生。举个例子:如果你知道潮汐变化最短以一天为周期,那么你至少半天就需要采集一个潮汐水位变化。实际应用中,通常用更高(>2倍)的采样率去采集信号
Anti-Aliasing Filters
除了提高采样率,另外一种避免Aliasing的方法是使用 Anti-Aliasing Filter. 通常在数字化之前使用一个low-pass filter把噪声滤掉即可。举例:采样之前安装一个低通滤波器,截止频率为10Hz. 那么你只需要一个20Hz的采样率就可以把你感兴趣的信号采集进来。高频噪声在采样之前就被模拟低通滤波器干掉了。
但是:一定要在数字化(采样)之前进行低通滤波(模拟低通滤波)。否则如果采样率不够,则必然发生Aliasing, 噪声会混进你感兴趣的低频信号中,这时候再采用数字低通滤波就没啥效果了。当然,如果你采样频率够高,那么采样进来后才进行数字低通滤波也是OK的。而且绝大多数应用就是这么干的。
RMS
RMS=root,mean,square. 用来描述信号质量。 计算方法: 一组数据,先平方,再求均值,最后开根。
让我们手工用matlab撸一个rms函数:建一个rms.m 写入以下内容:
function
使用也很简单,产生一些随机数,然后计算他们的RMS:
rms(rand(1,1000))
输出结果: