#include <stdio.h>
#define WINDOW_SIZE1 5 // 定义 motor1 的窗口大小
#define WINDOW_SIZE2 40 // 定义 motor2 的窗口大小
// 定义滑动窗口数据结构
typedef struct {
int arr[WINDOW_SIZE2]; // 使用最大窗口大小来定义静态数组
int window_size;
int index;
int current_size;
int sum; // 记录窗口内元素的总和
} SlidingWindow;
// 初始化滑动窗口
void init_window(SlidingWindow *window, int size) {
window->window_size = size;
window->index = 0;
window->current_size = 0;
window->sum = 0;
for (int i = 0; i < WINDOW_SIZE2; i++) {
window->arr[i] = 0;
}
}
// 更新滑动窗口并计算新平均值
int update_window(SlidingWindow *window, int new_value) {
// 更新窗口中的值
window->arr[window->index] = new_value;
window->index = (window->index + 1) % window->window_size;
// 更新当前窗口大小
if (window->current_size < window->window_size) {
window->current_size++;
}
for (int i = 0; i < window->current_size; i++) {
window->sum += window->arr[i];
}
return window->sum / window->current_size;
}
int main() {
SlidingWindow window1;
SlidingWindow window2;
init_window(&window1, WINDOW_SIZE1);
int data_arr1[10] = {1,2,3,4,5,6,7,8,9,10};
int force1 = 0,force2=0;
// 示例使用
int i = 0,j =0,k=0;
for(k = 0;k<10 ;k++)
{
force1 = update_window(&window1, data_arr1[i++]);
printf("Motor%d initial force: %d\n", i,force1);
}
/*
for(i = 0;i<10 ;i++)
{
force2 = update_window(&window2, data_arr2[j++]);
printf("Motor2 initial force: %d\n", force2);
}
*/
return 0;
}
07-04
693
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
07-06
1019
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
10-17
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交