搜索
bottom↓
回复: 17

FIR低通滤波器的输入值是16位的ADC编码值,还是转换后的电压值?

[复制链接]

出0入10汤圆

发表于 2020-8-26 12:29:30 | 显示全部楼层 |阅读模式
我要对一个直流信号进行采样,选了个16位的ADC输入范围(+-10V)。采样频率10khz,信号截止频率20hz(因为是直流信号)
我要在FPGA里面做个低通滤波器,用ip核已经生成好了。
1、请问FIR滤波器的输出是ADC的16位编码值,还是ADC转换后的电压值?
2、假设滤波完成后,我还得求个平均值吧,比如求1秒的平均电压值,大概有10000个采集值,我是不是还得搞个FIFO进行缓存呀?
3、是不是我的ADC采样频率高了,换成1Khz更好?

出20入25汤圆

发表于 2020-8-26 13:45:40 来自手机 | 显示全部楼层
1,看你设计是什么类型,定点浮点
2,平均值可以用累加呀,为啥非得缓存起来
3,采样率根据需要把

出0入0汤圆

发表于 2020-8-26 14:52:55 | 显示全部楼层
转换为电压值还是AD值,看需求吧,一般都是AD值吧

出0入10汤圆

 楼主| 发表于 2020-8-26 15:24:00 | 显示全部楼层
chenchaoting 发表于 2020-8-26 13:45
1,看你设计是什么类型,定点浮点
2,平均值可以用累加呀,为啥非得缓存起来
3,采样率根据需要把 ...

最后肯定要弄成整数,比如1.234V转为1234mV。
也对,把平均值累加吧

出0入10汤圆

 楼主| 发表于 2020-8-26 15:26:37 | 显示全部楼层
icexiong 发表于 2020-8-26 14:52
转换为电压值还是AD值,看需求吧,一般都是AD值吧

嗯嗯,ADC是双极型的,负电压的ADC的码值是补码。不知道有影响不?
刚刚把代码写好了,滤波器输出0!!!

出0入4汤圆

发表于 2020-8-27 09:00:53 来自手机 | 显示全部楼层
最好是转换后在滤波,因为当adc从正跳到负(补吗)时,波形有一个很大的跳变,滤波器会对这个有影响。如果adc码值在进滤波器之前处理掉这个跳变,则在前在后都可以

出0入10汤圆

 楼主| 发表于 2020-8-27 14:29:06 | 显示全部楼层
jjl3 发表于 2020-8-27 09:00
最好是转换后在滤波,因为当adc从正跳到负(补吗)时,波形有一个很大的跳变,滤波器会对这个有影响。如果a ...

我在quartus 里生成的IP核,输入固定数据值,FIR滤波器输出的结果为啥不一致呀,小很多

出0入4汤圆

发表于 2020-8-27 14:57:52 来自手机 | 显示全部楼层
竹叶听筝 发表于 2020-8-27 14:29
我在quartus 里生成的IP核,输入固定数据值,FIR滤波器输出的结果为啥不一致呀,小很多 ...

输入常数?这样只会在滤波开始前几个值有变换,后面应该是常数了

出0入10汤圆

 楼主| 发表于 2020-8-27 15:39:42 | 显示全部楼层
jjl3 发表于 2020-8-27 14:57
输入常数?这样只会在滤波开始前几个值有变换,后面应该是常数了

嗯。单独写了一个verlog程序测试FIR滤波器。每隔1ms产生一个信号,输入一个固定值到滤波器里面。滤波器的输出结果跟输入不一样。
另外,我还发现不同的采样率,输出结果都差别很大。这个FIR核,我感觉我用不好呀。。。

出0入4汤圆

发表于 2020-8-27 18:46:28 来自手机 | 显示全部楼层
竹叶听筝 发表于 2020-8-27 15:39
嗯。单独写了一个verlog程序测试FIR滤波器。每隔1ms产生一个信号,输入一个固定值到滤波器里面。滤波器的 ...

阶数不高可以自己写一个FIR滤波器验证一下。1万多个数缓存会很浪费资源的,用个累加器和计数器就可以了

出0入8汤圆

发表于 2020-8-27 20:01:24 来自手机 | 显示全部楼层
jjl3 发表于 2020-8-27 18:46
阶数不高可以自己写一个FIR滤波器验证一下。1万多个数缓存会很浪费资源的,用个累加器和计数器就可以了 ...

采样频率100khz,截止频率200hz,设计出的fir滤波器阶数很高,有没有优化办法

出0入4汤圆

发表于 2020-8-27 20:10:02 | 显示全部楼层
justdomyself 发表于 2020-8-27 20:01
采样频率100khz,截止频率200hz,设计出的fir滤波器阶数很高,有没有优化办法 ...

ADC前面用RC作为抗混叠滤波器,然后把采样率降下来

出0入10汤圆

 楼主| 发表于 2020-8-27 22:27:51 来自手机 | 显示全部楼层
justdomyself 发表于 2020-8-27 20:01
采样频率100khz,截止频率200hz,设计出的fir滤波器阶数很高,有没有优化办法 ...

我下午用matlab计算了一下,10k,20hz最小都要100阶。只能降低采样率才能降低阶数,不要用等纹波,要用窗函数。等纹波阶数更多

出0入10汤圆

 楼主| 发表于 2020-8-27 22:30:49 来自手机 | 显示全部楼层
jjl3 发表于 2020-8-27 18:46
阶数不高可以自己写一个FIR滤波器验证一下。1万多个数缓存会很浪费资源的,用个累加器和计数器就可以了 ...

32阶是高还是不高?我下午下了个matlab,感觉随随便便都好几十阶了

出0入4汤圆

发表于 2020-8-28 10:28:24 来自手机 | 显示全部楼层
竹叶听筝 发表于 2020-8-27 22:30
32阶是高还是不高?我下午下了个matlab,感觉随随便便都好几十阶了

直流干嘛用那么高采样率?阶数高不高,看fpga里乘法器够不够,做验证不考虑资源的话,自己实现个低通fir很容易

出0入10汤圆

 楼主| 发表于 2020-8-28 11:41:09 | 显示全部楼层
jjl3 发表于 2020-8-28 10:28
直流干嘛用那么高采样率?阶数高不高,看fpga里乘法器够不够,做验证不考虑资源的话,自己实现个低通fir ...

我改成500HZ的采样率了,50hz的截止频率了,8阶。
输出值跟输出值还是对不上,是不是直流信号(固定值),不能通过FIR低通滤波器呀?

出0入8汤圆

发表于 2020-8-29 07:25:57 | 显示全部楼层
竹叶听筝 发表于 2020-8-27 22:27
我下午用matlab计算了一下,10k,20hz最小都要100阶。只能降低采样率才能降低阶数,不要用等纹波,要用窗 ...

是的,我实际用了2000多阶的fir,运算量很大,只能计算机上算。单片机根本带不动。DSP估计也够呛。

出0入8汤圆

发表于 2020-8-29 07:30:01 | 显示全部楼层
jjl3 发表于 2020-8-27 20:10
ADC前面用RC作为抗混叠滤波器,然后把采样率降下来

我是做的正交锁相放大器,adc出来的数据要和两路相位差90度的方波相乘,然后才是fir
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 01:58

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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