移动平均数字滤波器实现
Moving average digital filter implementation
我需要为一些 post 处理实现移动平均数字滤波器
在 Scilab 中记录示波器波形。我已经准备了一个脚本
下面给定的代码(平均 window 包含 256 个样本的递归实现)
// number of samples
N = 350000;
// vector of voltage samples
voltage = M(1:N, 2)';
// filtered values
filt_voltage = zeros(1:N);
// window length
L = 256;
// sum of the samples in the averaging window
sum = 0
for i = 1:N_01
// averaging window full?
if i > L
// remove the oldest sample in the averaging window
sum = sum - voltage(i - L);
end
// add the newest sample into the averaging window
sum = sum + voltage(i);
// average of the samples in the averaging window
filt_voltage(i) = sum/L;
end
脚本输出如下(蓝色波形-记录的数据,红色波形-过滤后的数据)
问题是我不确定我是否执行移动平均线
是正确的(我发现很多实现主要基于卷积)。输出似乎以某种方式被过滤,但它会有所帮助
对我来说,如果有人可以向我确认它是正确的。提前致谢。
您的实施没有任何问题。事实上,它是 stats.stackexchange.com and on wikipedia:
上给出的递归公式的常见实现
我需要为一些 post 处理实现移动平均数字滤波器 在 Scilab 中记录示波器波形。我已经准备了一个脚本 下面给定的代码(平均 window 包含 256 个样本的递归实现)
// number of samples
N = 350000;
// vector of voltage samples
voltage = M(1:N, 2)';
// filtered values
filt_voltage = zeros(1:N);
// window length
L = 256;
// sum of the samples in the averaging window
sum = 0
for i = 1:N_01
// averaging window full?
if i > L
// remove the oldest sample in the averaging window
sum = sum - voltage(i - L);
end
// add the newest sample into the averaging window
sum = sum + voltage(i);
// average of the samples in the averaging window
filt_voltage(i) = sum/L;
end
脚本输出如下(蓝色波形-记录的数据,红色波形-过滤后的数据)
问题是我不确定我是否执行移动平均线 是正确的(我发现很多实现主要基于卷积)。输出似乎以某种方式被过滤,但它会有所帮助 对我来说,如果有人可以向我确认它是正确的。提前致谢。
您的实施没有任何问题。事实上,它是 stats.stackexchange.com and on wikipedia:
上给出的递归公式的常见实现