竹叶听筝 发表于 2020-8-26 12:29:30

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

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

chenchaoting 发表于 2020-8-26 13:45:40

1,看你设计是什么类型,定点浮点
2,平均值可以用累加呀,为啥非得缓存起来
3,采样率根据需要把

icexiong 发表于 2020-8-26 14:52:55

转换为电压值还是AD值,看需求吧,一般都是AD值吧

竹叶听筝 发表于 2020-8-26 15:24:00

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

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

竹叶听筝 发表于 2020-8-26 15:26:37

icexiong 发表于 2020-8-26 14:52
转换为电压值还是AD值,看需求吧,一般都是AD值吧

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

jjl3 发表于 2020-8-27 09:00:53

最好是转换后在滤波,因为当adc从正跳到负(补吗)时,波形有一个很大的跳变,滤波器会对这个有影响。如果adc码值在进滤波器之前处理掉这个跳变,则在前在后都可以

竹叶听筝 发表于 2020-8-27 14:29:06

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

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

jjl3 发表于 2020-8-27 14:57:52

竹叶听筝 发表于 2020-8-27 14:29
我在quartus 里生成的IP核,输入固定数据值,FIR滤波器输出的结果为啥不一致呀,小很多 ...

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

竹叶听筝 发表于 2020-8-27 15:39:42

jjl3 发表于 2020-8-27 14:57
输入常数?这样只会在滤波开始前几个值有变换,后面应该是常数了

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

jjl3 发表于 2020-8-27 18:46:28

竹叶听筝 发表于 2020-8-27 15:39
嗯。单独写了一个verlog程序测试FIR滤波器。每隔1ms产生一个信号,输入一个固定值到滤波器里面。滤波器的 ...

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

justdomyself 发表于 2020-8-27 20:01:24

jjl3 发表于 2020-8-27 18:46
阶数不高可以自己写一个FIR滤波器验证一下。1万多个数缓存会很浪费资源的,用个累加器和计数器就可以了 ...

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

jjl3 发表于 2020-8-27 20:10:02

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

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

竹叶听筝 发表于 2020-8-27 22:27:51

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

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

竹叶听筝 发表于 2020-8-27 22:30:49

jjl3 发表于 2020-8-27 18:46
阶数不高可以自己写一个FIR滤波器验证一下。1万多个数缓存会很浪费资源的,用个累加器和计数器就可以了 ...

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

jjl3 发表于 2020-8-28 10:28:24

竹叶听筝 发表于 2020-8-27 22:30
32阶是高还是不高?我下午下了个matlab,感觉随随便便都好几十阶了

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

竹叶听筝 发表于 2020-8-28 11:41:09

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

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

justdomyself 发表于 2020-8-29 07:25:57

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

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

justdomyself 发表于 2020-8-29 07:30:01

jjl3 发表于 2020-8-27 20:10
ADC前面用RC作为抗混叠滤波器,然后把采样率降下来

我是做的正交锁相放大器,adc出来的数据要和两路相位差90度的方波相乘,然后才是fir
页: [1]
查看完整版本: FIR低通滤波器的输入值是16位的ADC编码值,还是转换后的电压值?