打印
[其他ST产品]

STM32F4 Timer+ADC+DMA+FFT的理解与应用

[复制链接]
楼主: 我爱台妹mmd
手机看帖
扫描二维码
随时随地手机跟帖
21
我爱台妹mmd|  楼主 | 2023-8-27 18:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
将信号接入信号采集的引脚,这里是PF3脚 ADC3_IN9。运行程序观察串口打印的数据。这里我将AD值和幅值都打印了出来。我们先来看看AD值下的图形:

使用特权

评论回复
22
我爱台妹mmd|  楼主 | 2023-8-27 18:04 | 只看该作者
很明显,通过数Excel画出来的这个正弦波周期个数可知正好是8个,满足公式:

采到的被采信号周期数:NT = t/T = 0.008s/0.001s = 8

使用特权

评论回复
23
我爱台妹mmd|  楼主 | 2023-8-27 18:04 | 只看该作者
打印的AD值:

使用特权

评论回复
24
我爱台妹mmd|  楼主 | 2023-8-27 18:04 | 只看该作者
一个周期采到32个点,满足公式:

一个被采信号周期的被采到的点数:fs/f = 32 000Hz/1000Hz = 32

使用特权

评论回复
25
我爱台妹mmd|  楼主 | 2023-8-27 18:04 | 只看该作者
顺便再看一下峰值大概在3750左右,根据公式:

Voltage = AD_Value*3.3V/4096

使用特权

评论回复
26
我爱台妹mmd|  楼主 | 2023-8-27 18:04 | 只看该作者

使用特权

评论回复
27
我爱台妹mmd|  楼主 | 2023-8-27 18:04 | 只看该作者
和我们输入的峰值3V的信号差不太多。

使用特权

评论回复
28
我爱台妹mmd|  楼主 | 2023-8-27 18:05 | 只看该作者
接下来看一下幅度谱的情况:

使用特权

评论回复
29
我爱台妹mmd|  楼主 | 2023-8-27 18:05 | 只看该作者
前文已经提及过,幅度谱的负半轴是没有什么作用的,所以这里只有原点(直流分量)和正半轴的数据。现在我们来分析一下红框框住的数据:
0:处就是所说的直流分量。因为这里我们是拿AD值计算的FFT,所以输出的值也是类似于AD值,所以我们又可以用:Voltage = AD_Value*3.3V/4096 计算可得1.504,满足我们所设置的偏移量也就是直流分量。
8:处就是我们的1KHz的幅度信息了。为什么会是8呢?我们又根据前文的分析:

频谱图频率分辨率:f0 = fs/NPT = 32 000Hz/256 = 125Hz

使用特权

评论回复
30
我爱台妹mmd|  楼主 | 2023-8-27 18:05 | 只看该作者
在这里的意思就是横坐标一格代表125Hz,而我们是1000Hz的信号,自然在第8个点的位置了(1000Hz/125Hz=8)。

再来看幅值信息,通过公式Voltage = AD_Value*3.3V/4096发现差不多也是1.5V左右。但这只是一半,所以在1KHz处的幅度是1.5*2=3V。

使用特权

评论回复
31
我爱台妹mmd|  楼主 | 2023-8-27 18:05 | 只看该作者
它的幅度谱长这样:

使用特权

评论回复
32
我爱台妹mmd|  楼主 | 2023-8-27 18:05 | 只看该作者
输入2KHz 0V到3V(即幅度:3V,偏移:1.5V)
这一次我们换成2KHz的试试看。

使用特权

评论回复
33
我爱台妹mmd|  楼主 | 2023-8-27 18:06 | 只看该作者
对于2KHz的信号,采到信号的16个周期,也是满足此公式的:

采到的被采信号周期数:NT = t/T


使用特权

评论回复
34
我爱台妹mmd|  楼主 | 2023-8-27 18:06 | 只看该作者
对于2KHz的信号,一个周期采到16个点,也是满足此公式的:

一个被采信号周期的被采到的点数:fs/f = 32 000Hz/2000Hz = 16

使用特权

评论回复
35
我爱台妹mmd|  楼主 | 2023-8-27 18:06 | 只看该作者

使用特权

评论回复
36
我爱台妹mmd|  楼主 | 2023-8-27 18:06 | 只看该作者

使用特权

评论回复
37
我爱台妹mmd|  楼主 | 2023-8-27 18:06 | 只看该作者
这里为什么会在第16个点,想必大家也能够理解了。(2000Hz/125Hz=16)
这里提一嘴:对于1KHz的信号,基波频率是1KHz,二次谐波是2KHz,三次谐波是3KHz。也就是第8,第16,第24个点。

使用特权

评论回复
38
我爱台妹mmd|  楼主 | 2023-8-27 18:06 | 只看该作者
输入125Hz 0V到3V(即幅度:3V,偏移:1.5V)
这里我们尝试直接输入f0=125Hz。

使用特权

评论回复
39
我爱台妹mmd|  楼主 | 2023-8-27 18:07 | 只看该作者

使用特权

评论回复
40
我爱台妹mmd|  楼主 | 2023-8-27 18:07 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则