使用基于 MATLAB 的小波分析进行信号去噪效果如何?(Wavelet Analysis应用)

1,406 阅读4分钟

我们检查了使用小波分析来过滤时间序列数据中的噪音的可行性。

照片:Stephen KraakmoonUnsplash

小波分析可以被认为是傅里叶分析的一种普遍形式。傅里叶变换经常被用于信号的去噪。不过,这种方法最大的缺点是,信号需要是静止的。我们现实世界中的大多数测量都不是静止的。另外,在基于傅里叶的去噪中,我们应用低通滤波器来去除噪声。然而,当数据具有高频特征时,如信号中的尖峰或图像中的边缘,低通滤波器会将这些特征平滑掉。

在这里,基于小波的方法可能有一些优势。小波看的是多分辨率窗口中的信号。它将信号中的特征定位到不同的尺度。我们可以利用这一点,保留重要的信号,并去除非均匀的噪声。我在上一篇文章中已经介绍了使用小波进行多分辨率分析的基础知识。

使用小波进行去噪

当我们对一个时间序列进行小波变换时,它将信号特征集中在几个大幅度的小波系数中。一般来说,那些数值较小的系数被认为是噪声。从理论上讲,我们可以缩小这些系数或简单地将其删除。

获得真实世界的信号

在这种情况下,我将下载记录一次大地震的地震时间序列。我将使用Obspy模块从IRIS下载数据。关于如何使用Obspy下载波形的细节,见我之前的文章。我将下载任意选择的位于(38.1689°N,117.8497°W)的 "2020-05-15 Mww 6.5 Nevada "事件的波形。

这就把mseed数据以及 "流 "的绘图保存到了脚本目录中。我还对信号进行了高通滤波,以获得时间序列的高频部分。

2020-05-15 Mww 6.5 Nevada在II-PFO的垂直分量波形 (图片由作者提供)

将mseed转换为mat格式

现在,我们要使数据在MATLAB中可读。我已经写了一个工具,可以将任何mseed格式的数据转换为mat格式。在这个案例中,我将使用它。

使用MATLAB对2020-05-15 Mww 6.5 Nevada的II-PFO的垂直分量波形(图片由作者提供

使用未截断的小波变换对信号进行去噪处理

我将使用Matlab函数wdenoise将信号去噪到9级,使用sym4和db1小波。wdenoise使用具有Cauchy先验的经验贝叶斯方法对信号去噪。

使用sym4去噪的地震时间序列(图片由作者提供

在上面的代码中,我通过设置 "去噪方法"、"BlockJS "这对名-值,使用第9级块阈值对地震时间序列进行去噪。我使用了小波的sym4。

结果与原始时间序列相比,信号强度的差异是82.5786。

此外,我尝试使用不同的小波--db1进行同样的操作。

使用db1去噪的地震时间序列(图片由作者提供

这样一来,与原始时间序列相比,信号强度的结果差异为34.5294。因此,我们发现小波sym4的差异是很大的。我们还可以玩其他几个参数,包括电平。

我试着把电平改为2、5、10,结果 "sym4 "小波的信噪比分别为82.7493、82.5789、82.5786。不同级别的信噪比之间的差异不大,这可能表明在这种情况下,高频噪声的数量并不过分。让我们尝试用有噪声的合成数据来验证这一假设(在这种情况下,我们将有完全的控制权)。

基于4级近似的小波重建(图片由作者提供

完整的MATLAB代码

clear; close; clc;

小波对噪声合成数据进行去噪处理

这个例子是由MATLAB的例子衍生出来的。在上述案例中,对于相同的数据,我得到的sym4和db1小波的信噪比是9.6994和9.4954。这也表明,sym4有明显的差异。请注意,"sym4 "在大多数情况下运行良好,这可能是它被采用为默认值的原因。

由MATLAB生成的合成数据的小波去噪(图片由作者提供

结论

我们已经看到了如何下载地震波形,将其从mseed转换成mat格式,然后用小波分析进行去噪。我们首先对高频地震时间序列进行了小波去噪,但重建后,视觉上的差异并不明显。但从信噪比来看,我们可以看到差异。我们还绘制了不同尺度下的小波系数。此外,我还在一个合成时间序列上展示了小波去噪的效果。