一、前言
昨天搭建的这款基于 STM32H7B0的信号采集和频谱分析模块,实现的 FFT 计算输入信号的频谱,将结果显示在 OLED上面 。大家注意到,输入信号为 信号源产生的正弦波。但是在计算的频谱结果中,还存在这一些小的杂散频谱。也就是在主峰的两边,分布着一些小的频谱分量。它们并不是主要新频率的谐波分量。这些频谱分量哪儿来的?如何来消除它们呢?
二、问题分析
在单片机采集计算信号频谱时,采集频率为 10kHz,数据个数为 2048个。采集数据时间长度,只有 204.8ms。 这相当于对原有信号乘以一个矩形窗口信号进行截取而得。 因此,截取信号的频谱实际上是由信号频谱与截取窗口信号频谱卷积而得。正弦信号的确只有一个频谱峰值。但是窗口信号对应的频谱这是一个采样函数, 将它们进行卷积,便会得到200ms信号的频谱。可以看到,它的频谱在基频两边,还分布有一些小的频谱。
通过上面分析,这就清楚了对于一段 正弦信号,他的频谱就不会是单个峰值,而是这种峰值两边带有少量频谱分量的形式。
那么如何来解决呢? 一种方法,就是将原来的矩形数据窗口变成三角数据窗口,这样,窗口的频谱,就会衰减的很快。 主要表现形式,就是两边的波动比矩形窗口要小得多。只是主要频谱变宽了。这是将采集到的正弦波信号施加了三角窗口。可以看到它的起始和结束都等于0,没有了突变。计算出的频谱果然在主峰两边的分量就变得非常小了。此外,也能够看出,频谱主峰似乎也变宽了。
▲ 图1.2.1 三角加窗方法对应的信号频谱
为了进一步降低窗口影响,还可以采用升余弦数据窗口。它对应的高频分量更低,带来对应的主峰宽度更大一些。这是采用的升余弦窗口,整体上看起来与三角窗口类似。只是它更加平滑。计算出的信号频谱,可以感觉到高频分量更少。这是将输入信号变成方波,可以清楚看到信号的基波分量以及它的奇数谐波分量。
▲ 图1.2.1 升余弦窗口
※ 总 结 ※
本文对单片机信号频谱分析中,对于信号进行加窗进行的实验。通过数据增加三角窗等方式,可以有效降低频谱中杂散的高频分量。
参考资料[1]
模拟信号的采集并显示频谱:STM32H7B0: https://zhuoqing.blog.csdn.net/article/details/136419754