DSP程序里IIR滤波结果跟MATLAB仿真结果相差很大是为什么?
各位老兄:我最近利用TI库函数里IIR滤波程序对一组数据进行滤波,IIR系数利用TI公司所提供的eziir.m(matlab程序)程序获得,在matlab里利用相同的系数对相同的数据进行滤波,结果相差很大,请问有没有做过类似工作的,能够指点一二,小弟在这不胜感激. 据个人了解TI DSP对FFT和IIR滤波函数都做了优化,不过具体就不是很了解了 优化后的程序跟MATLAB处理的结果相差很大,MTALAB处理的结果在1和2之间波动,而DSP处理的结果范围在1-20之间,不知道那位做过类似的工作,望指点迷津 原帖由 yst422 于 2008-4-8 16:58 发表 http://www.chinavib.com/forum/images/common/back.gif
优化后的程序跟MATLAB处理的结果相差很大,MTALAB处理的结果在1和2之间波动,而DSP处理的结果范围在1-20之间,不知道那位做过类似的工作,望指点迷津
这个就不清楚,除非能够知道优化方案 下面是我用的IIR的系数,是通过MATLAB得到的,是通过=butter(4,)得到,
B =
1.0e-004 *
Columns 1 through 8
0.0410 0 -0.1639 0 0.2458 0 -0.1639 0
Column 9
0.0410
A =
Columns 1 through 8
1.0000 -5.9315 16.9555-29.7829 34.9749-28.0324 15.0209 -4.9459
Column 9
0.7848
然后转化成TI提供优化程序里所用的系数如下:
#define IIR_BPF_COEFFbp1 {\
-3688,5066,30,60,30,\
-3703,5323,231,462,231,\
-3918,5024,551,-1101,551,\
-3933,5649,10393,-20786,10393}
#define IIR_BPF_ISFbp1 244
#define IIR_BPF_NBIQbp1 4
#define IIR_BPF_QFMATbp1 12
对同一组数据进行滤波发现滤波后的结果差异很大,不知是什么原因造成的,下面是DSP滤波程序
void iirbp(float b[],float a[], float aa[],float u[],int N,unsigned int kk)
{
unsigned int temp_iIIR=0;
unsigned int temp_valueIIR=0;
int temp_iirin=0;
int temp_iirout=0;
temp_valueIIR=8192/(1<<kk);
aa=aa;
for(temp_iIIR=0;temp_iIIR<temp_valueIIR;temp_iIIR++)
{
x.input=(aa);
x.calc(&x);
INPUTB_TEMP=(x.output<<1);
}
} 不好意思,有点错误,是=butter(4,)
页:
[1]