使用卷积滤波器平滑数据
卷积操作可以是有用的,以便创建从数据集消除高频分量的平滑滤波器。
为了演示卷积的工作,我们将显示一个等值线图,其数据将作为我们的参考信号。
In [ ]:
Pkg.add(["DSP"])
In [ ]:
include( "$(@__DIR__)/peaks.jl" );
gr()
x,y,z = peaks(;n=100)
levels = -7:1:10;
contour( z, lc=:viridis, cbar=false, levels=levels )
Out[0]:
将一些随机噪声添加到数据中并输出噪声信号的轮廓图。
In [ ]:
z_noise = z .+ rand(100,100) .- 0.5;
contour( z_noise, lc=:viridis, cbar=false, levels=levels )
Out[0]:
预安装的DSP库包括功能 conv,其允许n维数据与适当维度的核的卷积。 有时,即使是一个小的卷积核也足以平滑包含一小组谐波分量的信号。 并且使用更大的矩阵作为核心允许更好的信号平滑。
In [ ]:
using DSP
K = (1/9)*ones(3,3);
z_smooth1 = conv( z_noise, K );
contour( z_smooth1, levels=levels, lc=:viridis, cbar=false )
Out[0]:
最后,让我们检查卷积如何与5乘5元素核心一起工作。
In [ ]:
K = (1/25)*ones(5,5);
z_smooth2 = conv(z_noise, K);
contour( z_smooth2, levels=levels, lc=:viridis, cbar=false )
Out[0]:
结论
我们设法通过用二维核对信号进行卷积来消除添加到原始参考信号中的随机噪声的显着部分,从而实现了平滑滤波器。
.png)
.png)
.png)
.png)