OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3133|回复: 14

请问一下,ADC采样进行FFT变换后求出的幅值以N/4对称是什么原因?

[复制链接]

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2021-11-28
在线时间
26 小时
发表于 2023-7-25 15:51:50 | 显示全部楼层 |阅读模式
3金钱
通过定时器触发ADC进行采样,将得到的AD值进行FFT求频谱,串口打印输出,但是频谱出现对称,按道理幅值只计算频谱的一半,不应该出现对称的,求指点,附件是工程文件。

3_ADC.zip

9.71 MB, 下载次数: 27

工程文件

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-7-25 16:14:37 | 显示全部楼层
将ADC数据绘制成波形,FFT数据绘制成柱状图看看.
专治疑难杂症
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2021-11-28
在线时间
26 小时
 楼主| 发表于 2023-7-25 17:01:25 | 显示全部楼层
LcwSwust 发表于 2023-7-25 16:14
将ADC数据绘制成波形,FFT数据绘制成柱状图看看.

我这里用的是VOFA+查看,好像没看到将不同通道的数据用不同图形查看,红色部分是AD采样的值,那个尖峰的显示是65535,绿色部分是FFT之后的幅值
7e1de9c38b1de234607f5776870f1e3.png
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2021-11-28
在线时间
26 小时
 楼主| 发表于 2023-7-25 17:02:11 | 显示全部楼层
qweewqqwe 发表于 2023-7-25 17:01
我这里用的是VOFA+查看,好像没看到将不同通道的数据用不同图形查看,红色部分是AD采样的值,那个尖峰的 ...

使用的是32内部的ADC,按道理最大的AD值是4095,但是不知道为什么会出现65535
回复

使用道具 举报

10

主题

3281

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8206
金钱
8206
注册时间
2020-5-11
在线时间
3700 小时
发表于 2023-7-25 17:21:34 | 显示全部楼层
qweewqqwe 发表于 2023-7-25 17:01
我这里用的是VOFA+查看,好像没看到将不同通道的数据用不同图形查看,红色部分是AD采样的值,那个尖峰的 ...

65535,这数据怕是有问题哦,最好是弄小一点.
建议利用程序产生一个正弦波或方波进行测试.看是否像下图这样:
https://www.sohu.com/a/388548601_100291228
fba269688c92417f9fb7186fae012076.jpg


专治疑难杂症
回复

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4418
金钱
4418
注册时间
2018-5-11
在线时间
923 小时
发表于 2023-7-25 17:26:13 | 显示全部楼层
首先要保证ADC转换的基本准确性,
出现65535的问题必须要解决,
否则FFT没有任何意义。
另外,采样率和DFT周期也很重要,
如果事先知道模拟源的信号特性最好
总采样周期长度最好是模拟信号周期的整数倍,
这里计算振幅只须计算一个点就可以,
速度很快,无须FFT,
用傅立叶级数就可以。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2021-11-28
在线时间
26 小时
 楼主| 发表于 2023-7-25 21:33:48 | 显示全部楼层
warship 发表于 2023-7-25 17:26
首先要保证ADC转换的基本准确性,
出现65535的问题必须要解决,
否则FFT没有任何意义。

找到问题了,是那个AD_Value[]数组类型设置的问题,设置成uint32_t就正常了,大佬能解释下为什么传递给FFT的输入数组为什么要左移16位吗?
b1a6bdcf7e53552914323f4dfd78d13.png
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2021-11-28
在线时间
26 小时
 楼主| 发表于 2023-7-25 21:39:34 | 显示全部楼层
warship 发表于 2023-7-25 17:26
首先要保证ADC转换的基本准确性,
出现65535的问题必须要解决,
否则FFT没有任何意义。

找到问题了,是那个AD_Value[]数组类型设置的问题,设置成uint32_t就正常了,大佬能解释下为什么传递给FFT的输入数组为什么要左移16位
b1a6bdcf7e53552914323f4dfd78d13.png
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2021-11-28
在线时间
26 小时
 楼主| 发表于 2023-7-25 21:56:52 | 显示全部楼层
warship 发表于 2023-7-25 17:26
首先要保证ADC转换的基本准确性,
出现65535的问题必须要解决,
否则FFT没有任何意义。

找到问题了,把AD_Value[]的数组类型改成uint32_t,我的之前是uint16_t,之前的程序环境是rtos的,定义uint32_t会无法完成编译,我重新弄了个裸机的环境,才找到原因
b1a6bdcf7e53552914323f4dfd78d13.png
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2021-11-28
在线时间
26 小时
 楼主| 发表于 2023-7-25 21:57:35 | 显示全部楼层
warship 发表于 2023-7-25 17:26
首先要保证ADC转换的基本准确性,
出现65535的问题必须要解决,
否则FFT没有任何意义。

找到问题了,把AD_Value[]的数组类型改成uint32_t,我的之前是uint16_t,之前的程序环境是rtos的,定义uint32_t会无法完成编译,我重新弄了个裸机的环境,才找到原因
b1a6bdcf7e53552914323f4dfd78d13.png
回复

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4418
金钱
4418
注册时间
2018-5-11
在线时间
923 小时
发表于 2023-7-26 09:49:18 | 显示全部楼层
qweewqqwe 发表于 2023-7-25 21:57
找到问题了,把AD_Value[]的数组类型改成uint32_t,我的之前是uint16_t,之前的程序环境是rtos的,定义uin ...

没有必要用FFT,
你的模拟源大概是什么样的?
频率是多少?
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2021-11-28
在线时间
26 小时
 楼主| 发表于 2023-7-26 10:03:50 | 显示全部楼层
warship 发表于 2023-7-26 09:49
没有必要用FFT,
你的模拟源大概是什么样的?
频率是多少?

使用的信号发生器输出1khz经过直流偏置的正弦波,主要是希望能得到基频幅值,大佬,我还有个问题是我使用定时器触发ADC采样,当我的定时器采样频率设置到100k时,采集的幅值是0是什么原因,ADC转换未完成吗?我刚刚找了一下关于采样周期和采样率的问题,stm32的最大采样率=12M/(12.5+1.5)=857Khz,是这样换算吗?请大佬指点
回复

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4418
金钱
4418
注册时间
2018-5-11
在线时间
923 小时
发表于 2023-7-26 10:17:08 | 显示全部楼层
幅值为0是你用FFT算出来的,
还是原始采样值都是0
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

5

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2021-11-28
在线时间
26 小时
 楼主| 发表于 2023-7-26 10:33:27 | 显示全部楼层
warship 发表于 2023-7-26 10:17
幅值为0是你用FFT算出来的,
还是原始采样值都是0

采用的AD值是0,我刚刚试过了定时器50k可以,但是100k不行
回复

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4418
金钱
4418
注册时间
2018-5-11
在线时间
923 小时
发表于 2023-7-26 10:40:46 | 显示全部楼层
qweewqqwe 发表于 2023-7-26 10:33
采用的AD值是0,我刚刚试过了定时器50k可以,但是100k不行

100k的采样率并不高,
肯定是时序还是有问题
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 04:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表