/******滑动滤波算法 20230504******/ unsigned long ltemp= + (digical_rx_cmd_buffer[6] << 8) + digical_rx_cmd_buffer[7]; //滤波开始 #ifdef DEBUG ULTRASONIC_WAVE_SERIAL.print("ltemp:"); ULTRASONIC_WAVE_SERIAL.println(ltemp); #endif unsigned long Ad_min; //最小重量 unsigned long Ad_max; //最大重量 unsigned long meng; unsigned int shu; FilterBufcnt++;//滑动次数+1 FilterBufcnt=FilterBufcnt%Filtercnt_1;//取当前的次数 FilterBuf[FilterBufcnt]=ltemp;//将重量放入滑动滤波缓冲区 meng=FilterBuf[0];//滑动滤波缓冲区相加 Ad_min=FilterBuf[0]; Ad_max=FilterBuf[0]; for(shu=1; shu <Filtercnt_1; shu++) { meng+=FilterBuf[shu]; if(FilterBuf[shu]>Ad_max) Ad_max=FilterBuf[shu]; if(FilterBuf[shu]<Ad_min) Ad_min=FilterBuf[shu]; } unsigned long Filter_weight = (meng - Ad_min - Ad_max)/(Filtercnt_1 - 2);//取平均值 #ifdef weight_DEBUG ULTRASONIC_WAVE_SERIAL.println("Filter_weight:"); ULTRASONIC_WAVE_SERIAL.println(Filter_weight); ULTRASONIC_WAVE_SERIAL.println("meng:"); ULTRASONIC_WAVE_SERIAL.println(meng); ULTRASONIC_WAVE_SERIAL.println("Ad_max:"); ULTRASONIC_WAVE_SERIAL.println(Ad_max); ULTRASONIC_WAVE_SERIAL.println("Ad_min:"); ULTRASONIC_WAVE_SERIAL.println(Ad_min); #endif weigh_dev_buf[0] = ((byte)upload_status); weigh_dev_buf[1] = ((byte)(Filter_weight/65535)&0xff); Filter_weight = Filter_weight % 65535; weigh_dev_buf[2] = ((byte)(Filter_weight/256)&0xff); Filter_weight = Filter_weight % 256; weigh_dev_buf[3] = ((byte)Filter_weight&0xff);
时间: 2024-04-04 14:32:15 浏览: 110
这段代码是一个基于滑动窗口滤波算法的重量滤波函数,用于对一段时间内获取到的重量数据进行平滑处理,以消除重量数据中的噪声和波动。该算法通过维护一个大小为Filtercnt_1的滑动窗口缓存,将新的重量数据加入缓存中,并计算窗口内所有数据的平均值作为滤波后的重量数据。在计算平均值的过程中,算法会排除掉窗口内最大值和最小值,以避免异常值对平均值的影响。最终,该函数将滤波后的重量数据存储在weigh_dev_buf数组中,以便后续使用。
阅读全文