先生们:
我们的应用程序读取速率约为2000Hz 的加速计。 涉及到很多机械噪声、我们需要应用数字滤波器。 滤波后的值是必需的"实时"值、如从连续采样值流中获得的值所示。
首先、我想了解有关在 TM4C 器件中实现滤波器的建议、并更好地了解性能限制、方便的滤波器类型、可用库等。
此致
布鲁诺
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
先生们:
我们的应用程序读取速率约为2000Hz 的加速计。 涉及到很多机械噪声、我们需要应用数字滤波器。 滤波后的值是必需的"实时"值、如从连续采样值流中获得的值所示。
首先、我想了解有关在 TM4C 器件中实现滤波器的建议、并更好地了解性能限制、方便的滤波器类型、可用库等。
此致
布鲁诺
正如承诺的那样、我用于单极低通 IIR 的方法
给定新值 val、中间存储的滤波器值 valf 和移位值 t、然后我使用以下伪代码
模拟滤波器(模拟 val、filter_inter valf、filter_TM t) { valf -= valf >> t; valf += val <<(过量位- t); 返回 valf >> eUS_bits; }
定义过量位是为了使大小为模拟值的整数在由过量位向左移位时适合大小为 filter_inter 的整数范围内
即、如果 ANALOG 为12位且 FILTER_INTERMED 为31位、则多余位为多余位为19。
必须将 T 限制为<=过量位
这实现了单极 IIR 滤波器
filtered_val = previous_filtered_val * a + new_val * b;
其中 a+b =1.0;a =1/(2^t)
它确实起作用、它只是进行一些思考以了解它是如何工作的。 在电子表格中轻松进行仿真。 乘法器对2次幂的限制比首次出现的限制要小。 我发现2次幂之间的阶跃并不重要。 更重要的是、t 被限制为最多为过量位、 在 ARM 这样的32位架构上、问题要小得多、其中标准 int 大小为32、即使将16位用于模拟值、滤波器仍然有15位、这是相当重要的。
单极 IIR 滤波器的行为与简单的 RC 滤波器类似(请 参阅#Bookshelf 参考指南至 DSP... 如何计算时间常量*),使其行为直观明显。 这种实现只需要移位、加法和减法、因此非常高效。
整数滤波器(也在基准中表示)的常见抱怨是、在无噪声环境中、它们可以在不达到实际稳定状态的情况下进行自降。 通过将最佳除法放置在截止频率以下(始终向右移)、此实现避免了这种情况。 与噪声之间的关系、我没有看到这方面的实际问题。
当然、这缺少您在实际实施中可能提供的保护和/或抽象。
Robert
一个侧注通过。 如果您的输入小于模拟大小、则在移位后、标准化为模拟并通过 IIR 滤波器、实际上可以获得分辨率。 通常情况下、噪声太高、无法实现这一点、但这是可能的。
*作为一个指示、我有一个采样频率为10kHz、t 为12的实现、我得到一个~400ms 的时间常数
@Bruno
我的帖子中的任何内容都不是以任何方式/方式"贬低"朋友 Robert 提供的宝贵贡献(经常)。
相反,它的目的是"更广泛地确定关键/关键问题","严格限制(任何)特定装置"不可能完全涵盖这些问题。 (特别是一个"向下油门"至120MHz -和(位)"齿长"。)
Robert 的"单极、低通、IIR 滤波器"可能会(很好)"填满您的账单"-但可能会延迟和/或延迟您的调查-这可能会识别(其他)滤波方面-而不是"发挥作用"-就在这里-现在! (这可能证明是很有用的-尤其是当您的使用/应用"偏离"罗伯特的用途时...)