为了平滑我的数据,我使用高斯函数在MATLAB中与我的数据进行卷积。但是有一个不容忽视的细节。例如,我的原始数据是“DATA”,平滑的数据是“SM_DATA”,一个简单的matlab代码将是:
gauss=gausswin(100);
gauss_normalize=gauss/sum(gauss);
SM_DATA=conv(DATA,gauss,'same');
图像将是这样的:
但是,如果我删除第二行“gauss_normalize = gauss / sum(gauss);”图像将具有非常强的DC,请参阅
任何人都可以帮忙解释为什么我应该使用gauss_normalize使用简单但专业的语言进行卷积?而且,这不是典型的规范化,对吗?因为典型的归一化除以最大值而不是系列的总和,因此数据从0到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.如果不这样做,则不计算平均值,因此您不会保留直流分量(整个信号的平均值)。