综合门户网站什么意思,西安广告公司前十名,大型房产网站模板,wordpress主题升级失败一. 限幅滤波法
给定一个最大偏差X#xff0c;如果本次值与上次差值小于X#xff0c;则本次有效#xff0c;否则无效#xff0c;使用上次值代替。
#incldue stdio.h#define X 2
int lastvalue;
//限幅滤波法
int filter(void)
{int nowValue ;nowValue getValue…一. 限幅滤波法
给定一个最大偏差X如果本次值与上次差值小于X则本次有效否则无效使用上次值代替。
#incldue stdio.h#define X 2
int lastvalue;
//限幅滤波法
int filter(void)
{int nowValue ;nowValue getValue();if (abs(nowValue - lastvalue) X){return lastValue}else{return nowvalue;}lastValue nowValue;
}
二. 中位值滤波法
采样N次值对这N个值按大小排序取中间值为本次有效值.
//中值滤波
uint16_t GetADC1Average(int num)
{uint16_t AdcValueBuf[N] {0},AdcValuetemp0;unsigned int count0,i0,j0;uint32_t sum 0;for(count0;countN;count)AdcValueBuf[count]filter_yijie(num);//冒泡排序for(j0;jN-1;j){for(i0;iN-j;i){if(AdcValueBuf[i] AdcValueBuf[i1]){AdcValuetemp AdcValueBuf[i];AdcValueBuf[i] AdcValueBuf[i1];AdcValueBuf[i1] AdcValuetemp;}}}return AdcValueBuf[(N - 1) / 2];
}
三. 算术平均滤波法
连续采用N个值进行算数平均运算.
int Filter_Value;
// 算术平均滤波法
#define FILTER_N 12
int Filter() {int i;int filter_sum 0;for(i 0; i FILTER_N; i) {filter_sum Get_AD();delay(1);}return (int)(filter_sum / FILTER_N);
}四. 中位值平均滤波法
取样值去掉最大最小再取平均值
//中值滤波
//采样若干次舍弃较大数据和较小数据然后将中间值平均
#define N 300//采样次数
#define BAN 100 //舍弃数据
uint16_t GetADC1Average(int num)
{uint16_t AdcValueBuf[N] {0},AdcValuetemp0;unsigned int count0,i0,j0;uint32_t sum 0;for(count0;countN;count)AdcValueBuf[count]filter_yijie(num);//冒泡排序for(j0;jN-1;j){for(i0;iN-j;i){if(AdcValueBuf[i] AdcValueBuf[i1]){AdcValuetemp AdcValueBuf[i];AdcValueBuf[i] AdcValueBuf[i1];AdcValueBuf[i1] AdcValuetemp;}}}for(countBAN;countN-BAN;count)sumAdcValueBuf[count];return ((uint16_t)((float)sum/(N-BAN*2)));
}
五. 一阶滞后滤波
取α ( 0 , 1 ) α(0,1)α(0,1)f i l t e r d a t a ( 1 − α ) 本 次 采 样 值 α 上 次 滤 波 结 果 filter_{data} (1-\alpha)本次采样值\alpha 上次滤波结果filterdata(1−α)本次采样值α上次滤波结果
//一阶滞后滤波
#define a 0.05
uint16_t value;
float value_yijie;
uint16_t filter_yijie(int num){uint16_t new_value;new_value AD_Value[num];value_yijie ((1-a)*value a*new_value);value new_value;return (uint16_t)value_yijie;
}
六. 卡尔曼滤波
uint16_t KalmanFiter(uint16_t inData) {static float prevData 0;//上一个数据//q控制误差r控制响应速度static float kalman_adc;uint16_t kal0;static float p 1,q 0.01,r 10,kGain 0;p p q;kGain p / (pr);//计算卡尔曼增益kalman_adc prevData (kGain * (inData - prevData));//计算本次滤波估计值p (1-kGain)*p;//更新测量方差prevData kalman_adc;kal (uint16_t)(kalman_adc*10)%10;if(kal5)kalman_adc;return (uint16_t)kalman_adc;
}
七. 一阶滞后滤波卡尔曼滤波
在采样值与优化值相差大于某值时采用一阶滞后滤波算法小于该值时采用卡尔曼滤波算法