主题: controlSUITE中讨论的其他部件
浮点FIR滤波器出现问题
器件:TMS320F2.8377万D
使用的库:C28x_FPU_Lib (访问位置:C:\ti\controlSUITE\libs\DSP\FPU\v131\lib)
使用lib的目的:通过400次点击实现FIR滤波器(coefficents)
人:Denis Sušin斯洛文尼亚电气工程学院
您好,
我的任务是制作联机DCT (离散余弦变换)或DFT (离散傅里叶变换)过滤器。 此类滤波器用于传递输入信号的选择性谐波,是FIR类型的滤波器。 我需要精确的DCT过滤器,不允许使用替代物(此过滤器在称为DCT控制器的控制器内使用)。 系数的计算方式如下:
如果仅通过滤波器传递信号的第一个谐波,则系数如下图所示:
我需要400次水龙头(Coeficients)。 采样频率为20 kHz,栅格的基本频率为50 Hz。 这会在一个信号周期内提供400个样本,因此我需要在50 us时间窗口内实施400次分路的在线FIR滤波器(实际上甚至更快–最多10 us)。
我试图先用C中的for语句来完成任务,但这当然花费了太多时间。
然后,我从controlSUITE获取FPU库,并研究了FIR过滤器主题的文档。 我做了个例子并尝试了一下。 我发现了两个问题:
- 在FPU库的文档(第46页)中,FIR过滤器的顺序是系数数减去一(下图)。

问题是顺序必须与系数数完全相同。 只有在这种情况下,延迟缓冲区和输出才能正常工作。
- 如果使用的水龙头少于128个,其他一切似乎都正常工作。 超过128次点击后,事情就不再起作用了。 我认为这个图书馆最多可以抽128次,但在文档中没有提到这一限制。 相反,FIR滤波器的规格是达到512个及以上的丝锥。
问题可能出在循环间接寻址上。 在FIR过滤器实现的源代码中,xar 6寄存器用于延迟缓冲区。 在TMS320C28x CPU和指令集参考指南第144页上,可以找到以下图片:
可以看出,XAR6的前8位仅用于延迟缓冲区。 这意味着只能对256个内存字进行寻址,这仅足以容纳128个变量(32位浮点变量)。
上述两个问题已在Code Composer Studio中进行了测试。 系数缓冲器为Dirac脉冲,FIR滤波器中的输入是每个周期递增的信号。 我正在观察(调试) struct firfp和两个缓冲区:dbuffer和coeffer。
如果有人可以帮助我处理为大于128 (至少400)的TAP工作的源代码,我将非常感谢。
此致,
Denis Sušin
电气工程学院
卢布尔雅那大学
斯洛文尼亚



