实时递归N点移动平均器
时间: 2023-08-16 18:04:40 浏览: 39
实时递归N点移动平均器可以使用以下的方法实现:
1. 定义一个长度为N的数组,用来存储最近N次输入的数据;
2. 定义一个变量sum,用来存储数组中的数据之和;
3. 每次输入一个新数据时,将其加入数组,并将sum加上新数据;
4. 如果数组长度超过N,则将最旧的数据从数组中删除,并将sum减去该数据;
5. 计算移动平均值,即sum除以数组长度。
以下是一个C++实现的示例:
```c++
class MovingAverage {
public:
MovingAverage(int size) {
data.resize(size);
sum = 0;
pos = 0;
count = 0;
}
double next(double val) {
if (count < data.size()) {
count++;
} else {
sum -= data[pos];
}
sum += val;
data[pos++] = val;
pos %= data.size();
return sum / count;
}
private:
vector<double> data;
double sum;
int pos;
int count;
};
```
使用方式如下:
```c++
MovingAverage ma(5);
cout << ma.next(1) << endl; // 输出 1
cout << ma.next(2) << endl; // 输出 1.5
cout << ma.next(3) << endl; // 输出 2
cout << ma.next(4) << endl; // 输出 2.5
cout << ma.next(5) << endl; // 输出 3
cout << ma.next(6) << endl; // 输出 4
cout << ma.next(7) << endl; // 输出 5
cout << ma.next(8) << endl; // 输出 6
cout << ma.next(9) << endl; // 输出 7
cout << ma.next(10) << endl; // 输出 8
```
在上面的示例中,MovingAverage的构造函数参数为5,表示使用5个数据点进行移动平均。调用next函数依次输入1到10的数据,每次输出移动平均值。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)