移动平均数字滤波器实现

时间:2017-11-06 07:05:01

标签: filter signal-processing scilab oscilloscope

我需要实现移动平均数字滤波器以进行后处理 在Scilab中记录示波器波形。我准备了一个脚本 下面给出的代码(使用包含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

脚本输出如下(蓝色波形 - 记录数据,红色波形 - 过滤数据) enter image description here

问题在于我不确定我是否采用移动平均线 是正确的(我发现很多实现主要基于卷积)。输出似乎以某种方式过滤,但它会有所帮助 对我来说,如果任何人可以向我确认它是正确的。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您的实施没有任何问题。实际上,它是stats.stackexchange.comwikipedia上给出的递归公式的常见实现:

enter image description here