float Medium_Filter(float input)
{
/* n为窗口大小 */
const uint8_t n = 10;
/* 输入的缓冲区 */
static float x[n] = {0};
/* 输入的缓冲区更新 */
for (uint8_t i = n - 1; i > 0; i--)
{
x[i] = x[i - 1];
}
x[0] = input;
/* 输入缓冲区拷贝,排序会被打乱顺序 */
float x_copy[n] = {0};
memcpy(x_copy, x, sizeof(float) * n);
/* 升序冒泡排序 */
for (uint8_t j = 0; j < n - 1; j++)
{
for (uint8_t i = 0; i < n - j - 1; i++)
{
/* ÉýÐòÅÅÐò */
if (x_copy[i] > x_copy[i + 1])
{
float temp = x_copy[i];
x_copy[i] = x_copy[i + 1];
x_copy[i + 1] = temp;
}
}
}
/* 窗口大小为偶数个 */
if (n % 2 == 0)
{
return (x_copy[n / 2] + x_copy[n / 2 - 1]) / 2.0f;
}
/* 窗口大小为奇数个 */
else
{
return x_copy[(n - 1) / 2];
}
}