流池滤波法
/*******************************************************************************************
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();
}
效果