c++ - 快速且无休止地平滑数据
问题描述
我必须读取测量值(浮点数)并将它们实时显示为轨迹。数据嘈杂,我需要平滑跟踪。我目前的解决方案是使用环形缓冲区。在无限循环中,我将新值写入缓冲区并显示缓冲区的平均值。我可以通过保持缓冲区总和来有效地做到这一点。
class cRingAveragerF {
public:
cRingAveragerF(uint size, float initval) {
m_Sum = 0;
m_Pointer = 0;
m_Size = size;
m_pBuffer = new float[size];
for (uint i = 0; i < m_Size; i++) m_pBuffer[i] = initval;
m_Sum = m_Size*initval;
}
~cRingAveragerF() { delete[]m_pBuffer;}
float getAv() { return m_Sum / (float)m_Size; }
void push(float val) {
m_Sum -= m_pBuffer[m_Pointer];
m_Sum += val;
m_pBuffer[m_Pointer] = val;
m_Pointer++;
if (m_Size == m_Pointer)m_Pointer = 0;
}
private:
uint m_Size;
float* m_pBuffer;
uint m_Pointer;
float m_Sum;
};
我的问题是:
我可以通过使用任何内置函数(我使用 Windows VS2015 和 OpenCV)来提高效率吗?
是否有比平均效率更好的平滑解决方案?
解决方案
推荐阅读
- java - 找不到类型或命名空间名称“Places”(您是否缺少 using 指令或程序集引用?)
- python - 在python中的tkinter.ttk中制作图像精确中心
- python - 如何在不使用 `self.parent.parent. ...`?
- asp.net-core - 如何在 Asp.net 核心的 appsettings.json 中定义角色身份资源
- c# - 线程是否与 await 语句一起使用?
- java - 单元测试中的模拟不起作用。选择进入数据库现在正在工作
- vue.js - 为新表单提交添加错误检查:Vue+Vuetify
- javascript - 打字稿参数不能在提取中使用任何?
- reactjs - 来自 Stack.Screen 的 React Native Navigation Access Navigation
- javascript - 使用 UseEffect 代替 componentDidMount 和 componentDidUpdate 时遇到问题