首页 > 解决方案 > 快速且无休止地平滑数据

问题描述

我必须读取测量值(浮点数)并将它们实时显示为轨迹。数据嘈杂,我需要平滑跟踪。我目前的解决方案是使用环形缓冲区。在无限循环中,我将新值写入缓冲区并显示缓冲区的平均值。我可以通过保持缓冲区总和来有效地做到这一点。

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;
};

我的问题是:

标签: c++smoothing

解决方案


推荐阅读