版主: 51FPGA |
wwmumu
![]()
最后登陆时间:2012-12-12 18:59:26 |
这两天用FIR Compiler IP Core v5.0生成了一个系数可重置的单速率、单通道、MAC结构的
FIR滤波器,全精度出来的信号。为了验证滤波结果是否正确,用ADC采集信号发生器出来的 信号,结果将滤波器系数设置成全通(不滤波)时,出来的信号没问题,一旦设为低通时, 出来的信号就不是理论上应该的结果了。 现象描述:我用10k的采样率采频率1k的正弦信号,FIR滤波器截止频率设为2.5k时,理论上 滤波结果应该还是纯正的正弦信号,可无论从时域波形还是幅值谱上观察的结果,都不是这 回事。同样,采方波和三角波的结果也不对。(虽然从理论上就知道结果是怎样的,我还是 很蠢的花时间用同样的采集信号和滤波器系数在matlab上进行滤波计算过,同FPGA的滤波结 果做了比对)。 我现在几乎都有点怀疑Xilinx做的FIR滤波器跟我所学的数字信号处理上的滤波器不是一码 子事了,但想想人家好歹也是FPGA最有名的公司,不应该啊,况且滤波系数设为不滤波(1 ,0,0,0,0,0,...)时结果也是对的啊,希望有用过的这个FIR滤波器的朋友出来说明、提点 一下。 关键词:Compiler 问题 求助 |
dreamjsc
![]()
最后登陆时间:2012-06-04 16:42:28 |
如果你MATLAB的仿真结果与FPGA输出的结果相差太大的话,说明你IP的使用方式有问题!Xilinx的FIR这个IP Core肯定是没有问题的!我使用过多次这个IP! |
![]() 大山里的娃儿。 |
|
wwmumu
![]()
最后登陆时间:2012-12-12 18:59:26 |
我起初也怀疑滤波器系数没有配置进去,后面我直接将滤波器系数写到coe文件中试验,配置界面显示的幅频特性也是正常的,但出来的信号跟之前一样,仍然不对。读写时序都用chipsope观察过了,没什么问题,且系数配置为(1,0,0,0,...)时出来的信号正常,这也证明数据的进出这里没有出问题啊。现在思来想去真找不到原因了。
|
dreamjsc
![]()
最后登陆时间:2012-06-04 16:42:28 |
IP的使用如果没有问题,你先检查一下数的表示。送入FIR滤波器是有符号的还是无符号的,是多少位宽?从FIR输出的信号位宽是多少,你取的多少位?另外,你是怎么验证出来的数据有问题的。时域上验证有chipscope看的么?还是用MATLAB画图在频谱上看的!能否截些图来看看! |
![]() 大山里的娃儿。 |
|
wwmumu
![]()
最后登陆时间:2012-12-12 18:59:26 |
我把我的IP配置界面、采集到的滤波结果以及仿真结果贴上来吧。
1.首先是配置界面: 这是不滤波的配置,coe文件写的系数为1,0,0,0...,0 接下来是滤波的配置,除了coe文件的系数换成量化后的系数外,其余配置与上相同。 |
wwmumu
![]()
最后登陆时间:2012-12-12 18:59:26 |
2.采样结果
采样频率20k,信号发生器出来的正弦、方波、三角波频率均为1k,采样点数500,滤波器出来的48位都用全了,没有截位。将采样信号保存下来,用matlab画的时域和频域图。 a.正弦信号 不滤波结果为 ![]() 滤波结果为 ![]() |
wwmumu
![]()
最后登陆时间:2012-12-12 18:59:26 |
b.方波信号
不滤波结果为 ![]() 滤波结果为 ![]() |
wwmumu
![]()
最后登陆时间:2012-12-12 18:59:26 |
c.三角波信号
不滤波结果为 ![]() 滤波结果为 ![]() |
wwmumu
![]()
最后登陆时间:2012-12-12 18:59:26 |
3.matlab滤波结果
相同的滤波器系数,幅频特性如下,与IP配置界面显示相同。滤波器的截止频率为0.6*20k=12k,理论上是吧12k以上的谐波成分给滤掉了。我用的信号都是1k,所以正弦信号应该完全保留下来了,方波与三角波信号的主要原貌也应该保留下来,最多也就是吉布斯现象稍微加重。 ![]() 三种波形用matlab滤波后的时域波形结果如下: ![]() 可以看到滤波结果与理论推测完全相符,前面一小段是FIR滤波的边界效应。 |
dreamjsc
![]()
最后登陆时间:2012-06-04 16:42:28 |
你的问题就是IP设置没对,第一幅图中Input Sampling Frequency与Clock Frequency设置为相同即可。你input Sampling Frequency设置为0.125MHz,而你Clock Frequecncy设置为40MHz,其中相差了320位。也就是你告诉此IP你的过采样率为320倍,而你信号的实际的低能过采样率只有10倍,所以结果就不对。 |
![]() 大山里的娃儿。 |
|