TI中文支持网
TI专业的中文技术问题搜集分享网站

C2000中Fir滤波算法的疑问

我在使用 TI  提供的 FPU.h 中提供的FIR滤波器,  使用中共用了3个滤波器, 一个带通的, 两个低通的, 测试中, 带通的没问题,  低通的,使用情况是,两个滤波器完全一样。 

LPB_I.order = LPB_ORDER;
LPB_I.dbuffer_ptr = FIR_LPB_I_Buf;
LPB_I.coeff_ptr=(float *)FIR_LP_COEFF_I;
LPB_I.init(&LPB_I);

LPB_Q.order = LPB_ORDER;
LPB_Q.dbuffer_ptr = FIR_LPB_Q_Buf;
LPB_Q.coeff_ptr=(float *)FIR_LP_COEFF_Q;
LPB_Q.init(&LPB_Q);

………

for 循环

LPB_I.input = FIR_IN_LPB_I[i];
LPB_I.calc(&LPB_I);
LPB_I_Val = LPB_I.output;

LPB_Q.input = FIR_IN_LPB_I[i];
LPB_Q.calc(&LPB_Q);
LPB_Q_Val = LPB_Q.output;

两个滤波器输入完全相同的情况下, 第一个 LPB_I, 有输出, 但LPB_Q 结果跟第一个却不一样, 要嘛就是 1.#INF, 为什么会出现这种情况?

Eric Ma:

J Y,

请查看一下下面这个帖子,看是否问题类似:

http://www.deyisupport.com/question_answer/microcontrollers/c2000/f/56/p/22466/75457.aspx#75457

Eric

我在使用 TI  提供的 FPU.h 中提供的FIR滤波器,  使用中共用了3个滤波器, 一个带通的, 两个低通的, 测试中, 带通的没问题,  低通的,使用情况是,两个滤波器完全一样。 

LPB_I.order = LPB_ORDER;
LPB_I.dbuffer_ptr = FIR_LPB_I_Buf;
LPB_I.coeff_ptr=(float *)FIR_LP_COEFF_I;
LPB_I.init(&LPB_I);

LPB_Q.order = LPB_ORDER;
LPB_Q.dbuffer_ptr = FIR_LPB_Q_Buf;
LPB_Q.coeff_ptr=(float *)FIR_LP_COEFF_Q;
LPB_Q.init(&LPB_Q);

………

for 循环

LPB_I.input = FIR_IN_LPB_I[i];
LPB_I.calc(&LPB_I);
LPB_I_Val = LPB_I.output;

LPB_Q.input = FIR_IN_LPB_I[i];
LPB_Q.calc(&LPB_Q);
LPB_Q_Val = LPB_Q.output;

两个滤波器输入完全相同的情况下, 第一个 LPB_I, 有输出, 但LPB_Q 结果跟第一个却不一样, 要嘛就是 1.#INF, 为什么会出现这种情况?

J Y:

回复 Eric Ma:

之前看过了,

我用的是15 阶滤波器,  按手册上说, 滤波器的Buf 要和2*(order+1)对齐,我是使用了, 对齐32

FIR_COSTAS_LPB_COEFF: > L47SARAM, PAGE = 1, ALIGN(32) FIR_COSTAS_LPB_I_BUF: > L47SARAM, PAGE = 1, ALIGN(32) FIR_COSTAS_LPB_Q_BUF: > L47SARAM, PAGE = 1, ALIGN(32)

还试过

FIR_COSTAS_LPB_COEFF: > L47SARAM, PAGE = 1, ALIGN(64)FIR_COSTAS_LPB_I_BUF: > L47SARAM, PAGE = 1, ALIGN(64)FIR_COSTAS_LPB_Q_BUF: > L47SARAM, PAGE = 1, ALIGN(64)

都不对。

结果

FIR_COSTAS_LPB_COEFF: > L47SARAM, PAGE = 1, ALIGN(0x100) FIR_COSTAS_LPB_I_BUF: > L47SARAM, PAGE = 1, ALIGN(0x100) FIR_COSTAS_LPB_Q_BUF: > L47SARAM, PAGE = 1, ALIGN(0x100)

好像就对了。  

赞(0)
未经允许不得转载:TI中文支持网 » C2000中Fir滤波算法的疑问
分享到: 更多 (0)