前面我们讲解了自编码网络优秀的去噪性能。很多同学有个疑问,去噪问题是数据处理领域公认的难题,各国大神们一定早就在研究吧,那其它的降噪算法效果如何呢?
这节课,我们就给大家讲解一下传统的一些去噪算法,并且用实战案例来对比各自的去噪性能。
一、去噪算法发展概述
1.基于沿炮检距方向的地震数据叠加
这类方法比较简单粗暴,就是通过不同的放炮记录的同一个工区的地震剖面进行叠加。叠加的目的是压制干扰,提高地震数据的信噪比。
水平叠加是最基本的处理方法,利用动校正后的剩余时差压制多次波和其它规则的干扰波,还可以利用多道叠加统计效应压制随机干扰。
但是水平叠加处理只有在地层倾角较小时才能有良好效果。因为当反射界面倾斜时,道集中各道同层反射信号并不是来自同一个反射点,而是反射点沿着反射界面上倾角方向上的离散,当然结果就有问题了。所以对于叠前数据降噪效果较差。
2.基于预测滤波
由于信号表现为连续的反射事件,这些事件的可预测性可以用来构造滤波器来实现信号和噪声的分离。主要方法包括:FXDECON、维纳滤波、 t-x,f-x,f-k滤波等等。
频率滤波可以很好的压制面波等规则的干扰波,f-k滤波可以去掉折射波、直达波等干扰。但是对于情况复杂的随机噪声,就无能为力了。
3.基于变换域滤波或信号重建
这些方法根据有效信号与干扰噪声在变换域中的特征差异,设计合适的阈值从而抑制噪声成分。经典的算法包括:傅里叶变换、频率波数域滤波、小波变换、曲波变换、dreamlet变换、seislet变换、Random变换和奇异值分解等。
不过,当数据特征变得复杂以及面对海量数据处理问题时, 这种人工控制阈值参数的方法会存在去噪性能和效率方面的不足。
4 基于矩阵降秩的稀疏表示
假设理想的无噪声地震资料可以构造成低秩矩阵,附加随机噪声会提高矩阵的秩。比如将原始地震数据转换为稀疏域,以便更好地分离信号和噪声。因此,随机噪声的去除可以看作是一个低秩矩阵逼近问题。其中一个重要的算法就是字典学习,它通过构造一个具有自适应学习能力的过完备字典,对含噪数据稀疏分解,求解最优稀疏表达式,实现信号与噪声的分离。
这类算法的典型代表就是MSSA和KSVD。这类算法在某些特定的工区效果非常好,处理大规模数据的能力也比较强,但是泛化性比较差,需要人工干预比较多。
5 现在最新的方法是深度学习
一般来说,深度学习可以通过结合低层特征来构造抽象的高层表示,从而发现复杂数据的隐藏特征。这类算法中的代表就是神经网络。现在神经网络模型很多,这方面话题我们以后考虑再开一些课程给大家扩展讲解。
二、去噪算法实战串讲
本次课程我们选择了各个时期经典的算法给大家进行实战案例的讲解,给大家看看他们的处理效果如何。我们主要选择的算法包括FXDECON,MSSA,小波变换、和KSVD。当然限于课程原理讲解,并未将各自算法调优到最好的性能,应该说仅发挥了他们的“常规”水平,去噪的结果仅供大家参考。
1.PSNR去噪度量
为了横向对比去噪性能,我们除了定性对比——看去噪结果,另外一个方法就是定量对比。这里我们选择PSNR来进行定量的对比。
PSNR是最普遍,最广泛使用的评鉴画质的客观量测法。PSNR是“Peak Signal to Noise Ratio”的缩写,即峰值信噪比,是一种评价图像的客观标准,一般是用于最大值信号和背景噪音之间的一个工程项目。
其中,MSE是原图像(语音)与处理图像(语音)之间均方误差。Peak就是指整个目标数据的最大值。MSE指均方误差。PSNR的单位为dB。所以PSNR值越大,就代表失真越少。
2.测试数据准备
今天的测试数据使用64*64的一个仿真地震数据,如图所示。
加上了15%的随机噪声,就变成了图中这模样。可以看出,噪声对有效信号影响比较大的,特别在信号边缘,出现了很大的干扰。接下来,我们就来看看各大先进去噪算法各显神通了。
3. FXDECON去噪
地震同相轴在空间方向具有可预测性, 这种预测特征能够用于分离强随机噪声中的目标同相轴, 该类方法可以在频率-空间域(f-x域)或时间-空间域(t-x域)内实现。f-x域预测滤波技术由Canales(1984)提出并且由Gulunay(1986)进一步发展, 已经成为一种工业界标准的方法——FXDECON。
FXDECON主要原理是这样的:f−x反褶积基本假设是具有线性同向轴的地震数据在f−x 域中的每个频率切片都可以进行自回归表示。f − x反卷积方法是很多算法的基础。之所以称为反卷积,可以理解为求卷积系数,也可以理解为求降噪数据。(一般反卷积是指求数据,而不是系数)。
具体的公式推导就不细说了,大家自行到百度脑补。下面直接对关键代码讲解。
这里我们使用了torch程序库将数据转换为张量,并调用fxdecon函数进行处理。处理的结果再转换为二维的数组。fxdecon函数太复杂了,大神们写了近300行代码。
那么处理效果如何呢?
从处理结果来看,算法去除了一定的随机噪声,不过残留的随机噪声还是比较多。
4. MSSA去噪
多分量奇异谱分析(MSSA)去噪方法可以有效压制随机噪声。MSSA是在频率-空间域实施去噪,其理论基础为对于无噪声数据将频率切片转换为 Toeplitz 矩阵,矩阵的秩等于线性同相轴不同斜率的个数,噪声会增加矩阵的秩,去噪可近似看作矩阵的降秩问题。
整个算法具体步骤如下:
(1)通过离散傅里叶变换将地震数据由时间-空间(t-x)域变换到频率-空间(f-x)域;
(2)取出每一个频率切片构建 Toeplitz 矩阵,对其实施截断 SVD 降秩,然后沿对角线求平均;
(3)将降秩后的频率切片数据和原始频率切片数据做多次加权迭代,直到误差小于一定限定值或达到最大迭代次数;
(4)对降秩后的频率切片数据做傅立叶反变换到时间域,得到去噪之后的地震数据。
具体的公式也不赘述了。下面看程序是如何来写的:
程序的主要步骤包括:一是建立MSSA模型,二是使用噪声数据来训练模型,三是对每个道的数据进行去噪处理。
MSSA的函数也比较复杂,大神写了500多行代码,咱们只管调用就可以了。
下面我们来看看效果:
从这个结果来看,MSSA的处理效果比较强劲,除去了大部分的随机噪声。不足的是还有一些随机信号残留,有效信号的边缘也比较模糊。
5. 小波去噪
小波分析这种方法源于傅立叶分析,小波(wavelet),即小区域的波,仅仅在非常有限的一段区间有非零值,而不是像正弦波和余弦波那样无始无终。小波可以沿时间轴前后平移,也可按比例伸展和压缩以获取低频和高频小波,构造好的小波函数可以用于滤波或压缩信号,从而可以提取出已含噪声信号中的有用信号。
Donoho提出的小波阀值去噪的基本思想是将信号通过小波变换(采用Mallat算法)后,信号产生的小波系数含有信号的重要信息,将信号经小波分解后小波系数较大,噪声的小波系数较小,并且噪声的小波系数要小于信号的小波系数,通过选取一个合适的阀值,大于阀值的小波系数被认为是有信号产生的,应予以保留,小于阀值的则认为是噪声产生的,置为零,从而达到去噪的目的。
假设,e(k)为高斯白噪声,通常情况下有用信号表现为低频部分或是一些比较平稳的信号,而噪声信号则表现为高频的信号,我们对 s(k)信号进行小波分解的时候,则噪声部分通常包含在HL、LH、HH中,如下图所示,只要对HL、LH、HH作相应的小波系数处理,然后对信号进行重构即可以达到消噪的目的。
下面讲讲程序的编写。
我们调用DWT的函数来进行小波变换和逆变换,选择了haar小波基。效果是这样的:
从处理结果来看,虽然去除了一部分随机噪声,但是对有效信号的恢复不太理想。
6. KSVD去噪
K-SVD算法由Aharon、Elad等根据误差最小原则提出利用基向量的线性组合表示输入信号的数据特征,通过数据训练不断更新字典基向量及其表示系数,将逼近误差调整到最小,完成对数据的充分表示。K-SVD算法包括稀疏编码和字典更新两个基本步骤。
最主要就是要解决下列矩阵等式的解:其中D是要训练的字典,X对应字典D的稀疏系数矩阵、Y是要训练的样本。当矩阵的维数很高时,即使使用计算机软件也很难求解矩阵方程,而K-SVD算法正是解决了高维矩阵求解的问题。
具体程序是这样写的:
首先KSVD函数有四个参数需要定义:字典所含原子个数,最大迭代次数,稀疏表示结果的容差和稀疏度。
降噪处理主要是以下几句:主要包括KSVD的字典数量,使用KSVD模型处理噪声和恢复数据。
具体效果是这样的,看来去噪效果不怎么样,留下的随机噪声较多,不过对原信号的损伤不大。
7.我们的自编码去噪效果
最后利用前一节课的自编码网络去噪,参数稍作调整:一是训练集改为干净的信号。二是训练50个周期。处理的效果是这样的:
自编码去噪的效果,从图片来看去掉的噪声更多,恢复的信号更好,但有效信号边缘还是有些模糊。从PSNR来看,仅比MSSA数值低。通过这次简单的对比,可见通过深度学习方法的效果时比较好的。这也是未来研究的热门方向。
以上就是今天的全部内容,如果你想获取代码,或有问题讨论,都欢迎联系我交流。下节课再见。