硬汉嵌入式论坛

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

[DSP] 请教M4内核MCU运行IIR滤波器之后数据波动变大的问题

[复制链接]

3

主题

10

回帖

19

积分

新手上路

积分
19
发表于 2024-9-5 15:24:48 | 显示全部楼层 |阅读模式
本帖最后由 mrf245 于 2024-9-5 15:26 编辑

最近在一个NRF52832 M4内核上调试一套ADC采样,FFT计算的代码,FFT使用库函数,1024点,采样率1600HZ,被测信号是一个50HZ+75HZ成分信号,需通过FFT将这两个信号幅值解算出来。

仅使用ADC采样+FFT解调,单独给ADC提供50HZ或75Hz其中一个频率分量时,FFT解调值稳定度还可以,抖动不大于0.3%。但同时提供50HZ和75HZ频率分量,两个解调值抖动比较大,随机瞬间抖动达到2%以上
打算在进FFT之前加IIR滤波器(FIR以前调试过,效果很不理想)以减小两个采样值之间相互影响
在MATLAB中生成如下滤波器:(50HZ为中心频率的BPF)

滤波器参数.jpg
按照本站提供的教程,生成的系数导入程序,运行,ADC采样序列先经过IIR滤波器,之后再进入FFT。
结果发现只在提供50HZ信号时,信号抖动比原来大很多,已经达到3%了,还没有测试50+75的效果,请问可能是什么原因导致计算结果抖动增加?

另外经过IIR滤波器之后,FFT解调的幅值比没进过滤波器的要大5倍(原来是761,现在是3500左右)这个是什么原因?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117571
QQ
发表于 2024-9-6 09:29:32 | 显示全部楼层
可以试试FIR,滤波阶数设置到100阶,然后你用低通,截至频率设置到60-65试试
回复

使用道具 举报

3

主题

10

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 2024-9-6 10:44:13 | 显示全部楼层
eric2013 发表于 2024-9-6 09:29
可以试试FIR,滤波阶数设置到100阶,然后你用低通,截至频率设置到60-65试试

一开始就用FIR,100阶的陡降速度不够,用了200阶的,但出来数据抖动也是很大。
昨天重新设计了一个IIR的低通,因为看了一下上面带通的稳定圆图里面,有一些点在圆的边缘,看介绍是极点不稳定,如果设计成低通就全部点都在圆内了,试了一下用低通出来的数据就稳定很多,有可能是滤波器设计稳定性的问题(增加滤波器设计带宽看起来也能提高稳定性)。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117571
QQ
发表于 2024-9-6 10:45:58 | 显示全部楼层
mrf245 发表于 2024-9-6 10:44
一开始就用FIR,100阶的陡降速度不够,用了200阶的,但出来数据抖动也是很大。
昨天重新设计了一个IIR的 ...


试试9162点FFT,分辨率更高。效果兴许好点。
回复

使用道具 举报

3

主题

10

回帖

19

积分

新手上路

积分
19
 楼主| 发表于 2024-9-6 11:03:24 | 显示全部楼层
eric2013 发表于 2024-9-6 10:45
mrf245 发表于 2024-9-6 10:44
一开始就用FIR,100阶的陡降速度不够,用了200阶的,但出来数据抖动也是很 ...

我们也想提高点数,但52832资源有限,而且测试过仅提高一倍点数(从1024提高到2048),ADC采样频率不变情况下,FFT结果抖动会加大,必须同步提高采样频率才能保证计算结果稳定性不变,但这样又失去提高点数的意义了。这和我对FFT的理解不太一样,但搞不清哪里出了问题。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-15 20:48 , Processed in 0.042418 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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