高斯平滑,规范化或非规范化

时间:2018-03-14 15:20:29

标签: matlab filtering signal-processing gaussian

为了平滑我的数据,我使用高斯函数在MATLAB中与我的数据进行卷积。但是有一个不容忽视的细节。例如,我的原始数据是“DATA”,平滑的数据是“SM_DATA”,一个简单的matlab代码将是:

gauss=gausswin(100);
gauss_normalize=gauss/sum(gauss);
SM_DATA=conv(DATA,gauss,'same');

图像将是这样的:

 blue curve:original data; red curve: smoothed data

但是,如果我删除第二行“gauss_normalize = gauss / sum(gauss);”图像将具有非常强的DC,请参阅

blue curve:original data; red curve: smoothed data

任何人都可以帮忙解释为什么我应该使用gauss_normalize使用简单但专业的语言进行卷积?而且,这不是典型的规范化,对吗?因为典型的归一化除以最大值而不是系列的总和,因此数据从0到1。

1 个答案:

答案 0 :(得分:0)

让我们看一个带有更简单过滤器的卷积:[1,1,1]

对于每个输出点,卷积将滤波器值乘以此点附近的函数值,并对结果求和:

out(i) = in(i-1) * 1 + in(i) * 1 + in(i+1) * 1;

显然,out(i)的值大约是in(i)的三倍,因为我们只是添加了三个输入值。

三个输入值的平均值为:

out(i) = ( in(i-1) + in(i) + in(i+1) ) / 3;

相同
out(i) = in(i-1) * 1/3 + in(i) * 1/3 + in(i+1) * 1/3;

也就是说,平均文件管理器应为[1,1,1]/3,而不是[1,1,1]。我们已经对滤波器内核进行了标准化,总计为1来计算平均值。当我们没有正常化时,信号的平均值就会上升。

现在让我们将这一课程加权平均值。权重 w 的值 v 的加权平均值计算为

sum i (v(i)w(i))/ sum i (w(i))

或用MATLAB编写:

out(i) = ( in(i-1) * w(1) + in(i) * w(2) + in(i+1) * w(3) ) / sum(w);

正如您所看到的,这看起来与上面的卷积相同,但具有不同的内核权重。我们再次规范了内核权重。

因此,考虑到您想要使用高斯权重计算加权平均值,您需要将这些权重标准化为最多1.如果不这样做,则不计算平均值,因此您不会保留直流分量(整个信号的平均值)。