我在使用 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)
好像就对了。