哪里有做网站公司的,广西高端网站建设,定制高端网站建设报价,wordpress怎么建设网站一、功能概述
本示例实现两个滤波器#xff1a;
中值滤波器#xff08;Median Filter#xff09;#xff1a;对短期异常值#xff08;如尖峰噪声#xff09;有良好的抑制能力#xff1b;低通滤波器#xff08;Low-Pass Filter#xff09;#xff1a;对数据进行平滑…一、功能概述
本示例实现两个滤波器
中值滤波器Median Filter对短期异常值如尖峰噪声有良好的抑制能力低通滤波器Low-Pass Filter对数据进行平滑处理适合去除高频抖动。
适用于如 ADC传感器数据处理、电子秤、电流电压读取等场景。 二、代码结构说明
✅ 头文件 filter.h
#ifndef FILTER_H
#define FILTER_H#define WINDOW_SIZE 50typedef struct {int buffer[WINDOW_SIZE]; // 数据缓冲区int index; // 当前写入索引环形int count; // 当前已存数据个数
} MedianFilter;extern MedianFilter myMedianFilter;void medianInit(MedianFilter* filter);
int medianFilter(MedianFilter* filter, int new_value);
int lowPassFilter(int input);#endif✅ 源文件 filter.c 中值滤波器实现
#include filter.h
#include stdlib.h// 冒泡排序用于求中值可替换为更高效算法
static void sort_array(int* src, int* dst, int size) {for (int i 0; i size; i) dst[i] src[i];for (int i 0; i size - 1; i) {for (int j i 1; j size; j) {if (dst[i] dst[j]) {int temp dst[i];dst[i] dst[j];dst[j] temp;}}}
}// 初始化滤波器状态
void medianInit(MedianFilter* filter) {for (int i 0; i WINDOW_SIZE; i)filter-buffer[i] 0;filter-index 0;filter-count 0;
}// 中值滤波主函数
int medianFilter(MedianFilter* filter, int new_value) {filter-buffer[filter-index] new_value;filter-index (filter-index 1) % WINDOW_SIZE;if (filter-count WINDOW_SIZE)filter-count;int sorted[WINDOW_SIZE];sort_array(filter-buffer, sorted, filter-count);if (filter-count % 2 1)return sorted[filter-count / 2];elsereturn (sorted[filter-count / 2 - 1] sorted[filter-count / 2]) / 2;
}低通滤波器实现
int lowPassFilter(int input) {static int prev_output 0;uint8_t alpha_shift 3; // α 1/8越大越平滑prev_output prev_output ((input - prev_output) alpha_shift);return prev_output;
}✅ 主函数测试示例
#include stdio.h
#include filter.hMedianFilter myMedianFilter;int mainTest() {medianInit(myMedianFilter);int data[] {100, 102, 98, 500, 101, 99, 97, 103};int len sizeof(data) / sizeof(data[0]);for (int i 0; i len; i) {int medFiltered medianFilter(myMedianFilter, data[i]);int lpFiltered lowPassFilter(data[i]);printf(Raw: %d\tMedian: %d\tLowPass: %d\n, data[i], medFiltered, lpFiltered);}return 0;
}三、使用说明
可移植至 STM32 项目适合 ADC 滤波等场景中值滤波适合抗冲击干扰低通滤波适合抑制小幅高频抖动WINDOW_SIZE 可根据实际采样频率和响应速度调整建议中值窗口不宜过大推荐 5~51 范围内奇数实际效果图