流池滤波法

/*******************************************************************************************
Func:流池滤波法
Time:2014-9-18
Ver.:V2.0
Note:
*******************************************************************************************/
uint16_t FlowPoolFilter(uint32_t *Pool,uint16_t Data,uint8_t *PoolIndex,uint8_t PoolSize)
{
    uint16_t Old_Filter=0;
    if(*PoolIndex)Old_Filter=((*Pool)/(*PoolIndex));
    (*Pool)+=Data;
    if((*PoolIndex)<PoolSize)(*PoolIndex)++;
    else (*Pool)-=Old_Filter;
    return (*Pool)/(*PoolIndex);
}

用法

private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
        {
            fiter = new Fiter(hScrollBar1.Value);
            this.Text = hScrollBar1.Value.ToString();
            fiter.FlowPoolFilter(0);
            float[] fiter_data = new float[length];
            float[] src_data = new float[length];
            DateTime[] times = new DateTime[length];
            double[] data = GenerateSinusoidalData(length, 3,10);
            for (int i = 0; i < length; i++)
            {
                Random random = new Random();
                src_data[i] = (float)(data[i] * 30) + 100;
                fiter_data[i] = (float)fiter.FlowPoolFilter((float)src_data[i]);
                times[i] = DateTime.Now.AddSeconds(1);
            }
            hslCurveHistory1.SetLeftCurve("fiter_data", fiter_data, Color.Red);
            hslCurveHistory1.SetRightCurve("src_data", src_data, Color.White);
            hslCurveHistory1.ValueMaxLeft = 255;
            hslCurveHistory1.ValueMinLeft = 0;
            hslCurveHistory1.ValueMaxRight = 255;
            hslCurveHistory1.ValueMinRight = 0;
            hslCurveHistory1.SetDateTimes(times);
            hslCurveHistory1.RenderCurveUI();
        }

效果
微信截图_20231114145426.png

微信截图_20231114145741.png
微信截图_20231114145758.png

微信截图_20231114145819.png

标签: none

添加新评论