打印
[其他ST产品]

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

[复制链接]
楼主: 我爱台妹mmd
手机看帖
扫描二维码
随时随地手机跟帖
41
我爱台妹mmd|  楼主 | 2023-8-27 18:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
和我们输入的峰值3V的信号差不太多。

使用特权

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

使用特权

评论回复
43
我爱台妹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

使用特权

评论回复
44
我爱台妹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。

使用特权

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

使用特权

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

使用特权

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

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


使用特权

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

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

使用特权

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

使用特权

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

使用特权

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

使用特权

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

使用特权

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

使用特权

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

使用特权

评论回复
55
我爱台妹mmd|  楼主 | 2023-8-27 18:07 | 只看该作者
如愿以偿的出现在了第一个点的位置。

使用特权

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

输入200Hz 0V到3V(即幅度:3V,偏移:1.5V)
这里或许就有人好奇了,输入的信号如果不是125Hz的整数倍会怎样,我们来试试。输入一个200Hz看看。

使用特权

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

使用特权

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

使用特权

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

使用特权

评论回复
60
我爱台妹mmd|  楼主 | 2023-8-27 18:07 | 只看该作者
可以看到,幅值散在了理论上200Hz附近的各个位置,但实际上这个横坐标上是没有200Hz这个点的,所以造成了这样的结果。这样的幅值信息也是相当不准确的,所以我们在应用的的过程中要尽量避免这种情况。所以控制好采样率fs是关键! 毕竟用dsp库的话采样点数NPT是没法控制的嘛。根据公式:

频谱图频率分辨率:f0 = fs/NPT

使用特权

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

本版积分规则