硬汉嵌入式论坛

 找回密码
 立即注册
查看: 959|回复: 9
收起左侧

[技术讨论] 求助NRF52832的ADC采集信号进行FFT之后抖动较大的问题

[复制链接]

3

主题

10

回帖

19

积分

新手上路

积分
19
发表于 2024-12-3 16:33:43 | 显示全部楼层 |阅读模式
使用NRF52832采集一个40/50/60HZ三种固定频率信号(目前为单音信号,使用函数发生器提供)

输入信号峰峰值为1VP-P,52832的ADC满额量程设置为2.4V(0.6REF*4)
FFT为M4库函数,1024个点。经过多次试验发现以下问题:
实验多种采样频率,只有1600HZ采样频率采集的信号,FFT解调出来的幅值最稳定,抖动(结果在一段时间内的随机跳动)小于0.2%。(1600HZ对应1024点,对被采样信号没有频谱泄露,以下采样均没有发生频谱泄露问题,周期对准)
使用256HZ,512HZ,1280HZ,3200HZ等采样率,FFT解调幅度均有较大抖动,整体抖动大于1%,且和采样频率高低没直接关联。
改变采样率后,FFT采样频率均同步变化。
不知这是什么问题,有没有高手可以解答一下。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115679
QQ
发表于 2024-12-4 09:42:15 | 显示全部楼层
考虑把你的测试信号绘制波形出来看下,试试也有抖动问题,我感觉是采集的问题。

另外就是1个周期采集100个以上的点,像256这种采集40Hz,一个周期才几个点,效果不好。

最后就是设置个采集的触发位置。都从这个位置采集来比较。
回复

使用道具 举报

3

主题

10

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 2024-12-4 10:21:00 | 显示全部楼层
eric2013 发表于 2024-12-4 09:42
考虑把你的测试信号绘制波形出来看下,试试也有抖动问题,我感觉是采集的问题。

另外就是1个周期采集100 ...

是的,经过实验(自己产生一个固定序列,通过滤波器之后给FFT采样)固定序列采样值非常稳定,看来就是ADC采样环节的问题。

如果用提升采样率来提升每个信号周期采样点数的方法,出来的数据不好做滤波器(比如升高10.24K,20.48K这种),对于FFT也非常不友好,这种要怎么处理最合适呢?
而且我们发现ADC采样出来的数据如果直接送FFT采样,抖动会小一点,经过滤波器(目前是一些特定频率的带阻滤波器)之后再FFT,抖动会变大。不知是什么原因。
回复

使用道具 举报

3

主题

10

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 2024-12-4 17:37:15 | 显示全部楼层
自己更新:
今天查出一个问题,MCU内部提供给ADC的时钟有点问题,似乎存在抖动。切换时钟源之后ADC采样稳了很多,目前用1280采样率,1024点FFT采样40 50 60HZ信号的随机抖动幅度均在0.3%左右。
然后还有一个需求:进FFT之前要加50HZ的NOTCH带阻滤波器。原来用1280采样率做的50HZ带阻,效果不好,采样结果通过滤波器之后抖动加大了。我在mathlab的FDA工具生成的滤波器极点图里看
滤波器极点几乎都位于圆边上。是不是由于这个原因使得滤波器不太稳定?然后发现降低采样率,滤波器极点逐渐往圆内靠拢。是不是说明降低滤波器采样率可以提升滤波器稳定性?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115679
QQ
发表于 2024-12-5 09:44:11 | 显示全部楼层
mrf245 发表于 2024-12-4 17:37
自己更新:
今天查出一个问题,MCU内部提供给ADC的时钟有点问题,似乎存在抖动。切换时钟源之后ADC采样稳 ...

这个要用一个采样率,你的滤波器降低,你的FFT计算时,也要按照这个采样率计算,如果满足需求的话,可以。
回复

使用道具 举报

3

主题

10

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 2024-12-5 10:09:21 | 显示全部楼层
本帖最后由 mrf245 于 2024-12-5 13:58 编辑
eric2013 发表于 2024-12-5 09:44
这个要用一个采样率,你的滤波器降低,你的FFT计算时,也要按照这个采样率计算,如果满足需求的话,可以 ...

可以,我试一下用抽取来降采样。

但有一个问题想不明白,我用1280sps采样率让ADC采样,然后用抽取降采样到160sps,再经过滤波和FFT,这和 ADC直接用160sps采样,然后过滤波器到FFT 的方案相比,理论的结果应该完全一样,在实际使用效果上会有多大区别?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115679
QQ
发表于 2024-12-6 08:45:05 | 显示全部楼层
mrf245 发表于 2024-12-5 10:09
可以,我试一下用抽取来降采样。

但有一个问题想不明白,我用1280sps采样率让ADC采样,然后用抽取降采 ...

每个周期采集的点数太少了,比如采集40Hz波形,1280采集是每个周期32个点,而160采集,每个周期才仅4个点。
回复

使用道具 举报

3

主题

10

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 2024-12-11 09:16:34 | 显示全部楼层
这两天进行了测试,将ADC采样速率提升到1280sps,然后CIC降采样到160sps,进行FFT,和ADC用160sps直接采样然后FFT相比,稳定性不如160sps直接采样效果,不知道什么原因。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115679
QQ
发表于 2024-12-12 09:52:15 | 显示全部楼层
mrf245 发表于 2024-12-11 09:16
这两天进行了测试,将ADC采样速率提升到1280sps,然后CIC降采样到160sps,进行FFT,和ADC用160sps直接采样 ...

你说的这个CIC是指的什么
回复

使用道具 举报

3

主题

10

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 2025-4-27 17:31:14 | 显示全部楼层
eric2013 发表于 2024-12-12 09:52
你说的这个CIC是指的什么

哈,好久没来了,这段时间还在调试这玩意。
现在是ADC用1280sps采样率采样一个40HZ单频点信号,采样256点。然后在这个序列中每隔8点取一个数据,共抽取32个数据,然后将这32个数据作为1组,复制7次,总共8份,重新头尾相接(即数组第0-31位为原始抽取数据,32-63为复制0-31位数据,之后以此类推),重新组成一个256点数据。该256点数据等效于160sps采样率。为什么要这样拼凑?因为我们有低功耗采样需求,原来用160sps采样256点需要1.6秒,同时要打开别的设备,功耗比较大,如果提高到1280sps采样,采样时间可缩短至原来1/8,降低功耗。
上面采样到的数据,如果直接送入160sps,256点FFT,采样值比较稳定,抖动约0.3-0.5%。
如果送入一个IIR带阻滤波器(参数如下图,用STM32M4库函数实现)结果在送入同一个FFT,则FFT计算结果抖动非常大,经过测试输出幅度和时间关系为振荡输出,为正弦波形态,上下摆幅接近±2%。
现在没搞明白为什么重组后的数据经过滤波器之后就出现规律振荡了,但不过滤波器,用FFT直接采样结果却比较稳定。
filter.png
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-11 19:30 , Processed in 0.377533 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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