实时递归N点移动平均器的matlab代码
时间: 2023-08-16 10:05:26 浏览: 40
以下是Matlab实现实时递归N点移动平均器的代码示例:
```matlab
classdef MovingAverage
properties
data % 存储最近N次输入的数据的数组
sum % 数组中的数据之和
pos % 当前输入的数据在数组中的位置
count % 已经输入的数据个数
end
methods
function obj = MovingAverage(size)
obj.data = zeros(1, size);
obj.sum = 0;
obj.pos = 1;
obj.count = 0;
end
function avg = next(obj, val)
if obj.count < numel(obj.data)
obj.count = obj.count + 1;
else
obj.sum = obj.sum - obj.data(obj.pos);
end
obj.sum = obj.sum + val;
obj.data(obj.pos) = val;
obj.pos = obj.pos + 1;
obj.pos = mod(obj.pos - 1, numel(obj.data)) + 1;
avg = obj.sum / obj.count;
end
end
end
```
使用方式如下:
```matlab
ma = MovingAverage(5);
disp(ma.next(1)); % 输出 1
disp(ma.next(2)); % 输出 1.5
disp(ma.next(3)); % 输出 2
disp(ma.next(4)); % 输出 2.5
disp(ma.next(5)); % 输出 3
disp(ma.next(6)); % 输出 4
disp(ma.next(7)); % 输出 5
disp(ma.next(8)); % 输出 6
disp(ma.next(9)); % 输出 7
disp(ma.next(10)); % 输出 8
```
在上面的示例中,MovingAverage的构造函数参数为5,表示使用5个数据点进行移动平均。调用next函数依次输入1到10的数据,每次输出移动平均值。