您好!
我正在使用 FPU DSP 库在 LAUNCHXL-F28377S 上实现希尔伯特变压器作为 FIR 函数。 从 FIR 示例开始、我使用了一个希尔伯特变换。 但是、我需要4个 Hilbert 变压器(4个缓冲器、4个处理程序)、为了使代码更简单、我尝试创建一个函数来初始化滤波器、然后创建另一个函数来应用它、在接收到一个输入和一个指向处理程序的指针后返回一个浮点值。 基本上、只需对已经在两个不同函数中工作的代码进行分组即可。 初始化工作正常、但我在应用滤波器时发现了一个奇怪的问题。 当我尝试应用滤波器阶值变为零、指向缓冲区的指针和指向系数数组的指针时、包含有关滤波器数据的结构(阶数、指向系数数组的指针、输入、输出等)会发生变化。 到 calc 函数的指针不变。
在调试过程中、我发现 fitler 的结构在 FIR 函数期间发生了变化、更确切地说是在
按 XAR1 按 XAR2 按 XAR3
它似乎是将缺失的值从寄存器推送到堆栈。 但是、通过观察寄存器、我可以看到它们的值始终为0x0000FFFF 或0x00000000、这些值会替换缺失的值。 由于我真的不知道很多汇编语言、我不确定我是否正确解释了这一点。
由于这个问题只在使用另一个函数内部的 FPU 函数时出现、而不是 main()、我可以想象它与作用域有什么关系、但我没有弄清楚确切的是什么、因为我在函数内部使用观察表达式正常查看滤波器结构。 另一个可能的原因是缓冲区对齐、如文档所要求。 我使用了#data_section 并对齐了链接器脚本中的系数变量、如示例所示。
这里是我对 FPU 库中的其他 FIR 函数进行分组的函数
float Hilbert_tiler (float input_data、FIR_FP_handle hilb_handle){ hilb_handle->input = input_data; hilb_handle->calc (hilb_handle); 返回 hilb_handle->输出; }
这似乎是一个简单的示波器问题、但在使用调试器并查看值的确切变化位置后、我再也不确定了。 感谢您的任何帮助