白话机器学习4:小波分解的原理与Python代码实现

2024-05-11 15:20

本文主要是介绍白话机器学习4:小波分解的原理与Python代码实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        小波去噪可以想象成使用一把“筛子”来过滤信号。这个“筛子”能够根据信号的不同频率成分,将其分解成多个层次。在这个过程中,信号的重要信息通常包含在低频部分,而噪声则多分布在高频部分。

        将信号通过这个“筛子”分解后,我们可以对那些包含噪声的高频部分进行“削弱”或“切除”,然后再将剩下的部分重新组合起来。这样,经过处理的信号就会保留下重要的信息,同时去除了很多噪声。

一、数学原理详解

小波变换通过一系列可缩放(尺度变化)和平移的基函数来表示信号。这些基函数称为小波函数。

小波函数 \psi(t)具有一定的时间长度并集中在频率上,可以通过缩放(dilation)和平移(translation)来拟合信号的不同部分:

\psi_{a,b}(t) = \frac{1}{\sqrt{a}} \psi\left(\frac{t-b}{a}\right)

其中 a 是尺度参数,b 是平移参数。

分解:

信号f(t)可以通过小波函数的线性组合来分解:

f(t) = \sum_{a,b} c_{a,b} \psi_{a,b}(t)

其中c_{a,b}是小波系数。

在实际操作中,通过离散小波变换DWT,我们可以得到信号在不同尺度和位置的小波系数。

去噪

小波去噪的步骤通常包括:

  1. 选择小波基:选择一个适当的小波函数,比如Daubechies小波。

  2. 多尺度分解:将信号进行多层分解,得到不同尺度上的小波系数。

  3. 阈值处理:对小波系数应用阈值规则。系数小于某个阈值的被视为噪声并设置为零或减小其值。阈值的选择是一个关键步骤,常用的方法有软阈值和硬阈值。软阈值方法会对系数进行收缩,而硬阈值方法会直接将小于阈值的系数置为零。

    硬阈值

    软阈值:  d'{ij} = \text{sign}(d{ij}) \cdot (\max(|d_{ij}| - \lambda, 0)) 

    其中d_{ij}是分解得到的小波系数,\lambda是阈值,d'_{ij}是处理后的小波系数。

  4. 重构信号:使用阈值处理后的小波系数重构信号,这样得到的信号中噪声就会被减少。

二、Python代码实现

import matplotlib.pyplot as plt
import pywt
import seaborn as snssns.set(context='notebook', style='darkgrid', palette='deep', font='sans-serif', font_scale=1, color_codes=False, rc=None)
plt.rcParams['axes.unicode_minus'] = False  # 防止坐标为负时出现乱码
ecg = [......]  # 改成自己的数据index = []
data = []
for i in range(len(ecg) - 1):X = float(i)Y = float(ecg[i])index.append(X)data.append(Y)# Create wavelet object and define parameters
w = pywt.Wavelet('db4')  # 选用Daubechies4小波maxlev = pywt.dwt_max_level(len(data), w.dec_len)
print("maximum level is " + str(maxlev))
# threshold = 0.04  # Threshold for filtering
threshold = 0.08
# Decompose into wavelet components, to the level selected:
coeffs = pywt.wavedec(data, 'db4', level=maxlev)  # 将信号进行小波分解plt.figure()
for i in range(1, len(coeffs)):coeffs[i] = pywt.threshold(coeffs[i], threshold * max(coeffs[i]))  # 将噪声滤波datarec = pywt.waverec(coeffs, 'db4')  # 将信号进行小波重构mintime = 0
maxtime = mintime + len(data) + 1# plt.xkcd()  # 胆小勿入
# plt.figure()
plt.subplot(2, 1, 1)
plt.plot(index[mintime:maxtime], data[mintime:maxtime], linewidth=1.1, color='r')
plt.xlabel('time (s)')
plt.ylabel('microvolts (uV)')
plt.title("Raw signal")
plt.subplot(2, 1, 2)
plt.plot(index[mintime:maxtime], datarec[mintime:maxtime - 1], linewidth=1.1, color='r')
plt.xlabel('time (s)')
plt.ylabel('microvolts (uV)')
plt.title("De-noised signal using wavelet techniques")plt.tight_layout()
plt.show()

三、结果展示

这篇关于白话机器学习4:小波分解的原理与Python代码实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/979911

相关文章

C#高效实现在Word文档中自动化创建图表的可视化方案

《C#高效实现在Word文档中自动化创建图表的可视化方案》本文将深入探讨如何利用C#,结合一款功能强大的第三方库,实现在Word文档中自动化创建图表,为你的数据呈现和报告生成提供一套实用且高效的解决方... 目录Word文档图表自动化:为什么选择C#?从零开始:C#实现Word文档图表的基本步骤深度优化:C

Nginx服务器部署详细代码实例

《Nginx服务器部署详细代码实例》Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,:本文主要介绍Nginx服务器部署的相关资料,文中通过代码... 目录Nginx 服务器SSL/TLS 配置动态脚本反向代理总结Nginx 服务器Nginx是一个‌高性

Python中Request的安装以及简单的使用方法图文教程

《Python中Request的安装以及简单的使用方法图文教程》python里的request库经常被用于进行网络爬虫,想要学习网络爬虫的同学必须得安装request这个第三方库,:本文主要介绍P... 目录1.Requests 安装cmd 窗口安装为pycharm安装在pycharm设置中为项目安装req

Python容器转换与共有函数举例详解

《Python容器转换与共有函数举例详解》Python容器是Python编程语言中非常基础且重要的概念,它们提供了数据的存储和组织方式,下面:本文主要介绍Python容器转换与共有函数的相关资料,... 目录python容器转换与共有函数详解一、容器类型概览二、容器类型转换1. 基本容器转换2. 高级转换示

nginx跨域访问配置的几种方法实现

《nginx跨域访问配置的几种方法实现》本文详细介绍了Nginx跨域配置方法,包括基本配置、只允许指定域名、携带Cookie的跨域、动态设置允许的Origin、支持不同路径的跨域控制、静态资源跨域以及... 目录一、基本跨域配置二、只允许指定域名跨域三、完整示例四、配置后重载 nginx五、注意事项六、支持

Qt实现对Word网页的读取功能

《Qt实现对Word网页的读取功能》文章介绍了几种在Qt中实现Word文档(.docx/.doc)读写功能的方法,包括基于QAxObject的COM接口调用、DOCX模板替换及跨平台解决方案,重点讨论... 目录1. 核心实现方式2. 基于QAxObject的COM接口调用(Windows专用)2.1 环境

MySQL查看表的历史SQL的几种实现方法

《MySQL查看表的历史SQL的几种实现方法》:本文主要介绍多种查看MySQL表历史SQL的方法,包括通用查询日志、慢查询日志、performance_schema、binlog、第三方工具等,并... 目录mysql 查看某张表的历史SQL1.查看MySQL通用查询日志(需提前开启)2.查看慢查询日志3.

Java实现字符串大小写转换的常用方法

《Java实现字符串大小写转换的常用方法》在Java中,字符串大小写转换是文本处理的核心操作之一,Java提供了多种灵活的方式来实现大小写转换,适用于不同场景和需求,本文将全面解析大小写转换的各种方法... 目录前言核心转换方法1.String类的基础方法2. 考虑区域设置的转换3. 字符级别的转换高级转换

使用Python将PDF表格自动提取并写入Word文档表格

《使用Python将PDF表格自动提取并写入Word文档表格》在实际办公与数据处理场景中,PDF文件里的表格往往无法直接复制到Word中,本文将介绍如何使用Python从PDF文件中提取表格数据,并将... 目录引言1. 加载 PDF 文件并准备 Word 文档2. 提取 PDF 表格并创建 Word 表格

使用Python实现局域网远程监控电脑屏幕的方法

《使用Python实现局域网远程监控电脑屏幕的方法》文章介绍了两种使用Python在局域网内实现远程监控电脑屏幕的方法,方法一使用mss和socket,方法二使用PyAutoGUI和Flask,每种方... 目录方法一:使用mss和socket实现屏幕共享服务端(被监控端)客户端(监控端)方法二:使用PyA