使用python提取噪声信号中的有效信息

2023-05-16

本文算法的原始论文出处:Algorithms | Free Full-Text | An Efficient Algorithm for Automatic Peak Detection in Noisy Periodic and Quasi-Periodic Signals | HTML (mdpi.com)

在数字信号处理中,经常涉及到波峰(或波谷)查找算法,比如心率测量、步数计数等。对于周期信号或者准周期信号,有一种称之为Automatic multiscale-based peak detection (AMPD),即自动多尺度峰值查找算法。其优势是:

(1)算法本身(几乎)没有超参数,无需调参,对信号具有良好的自适应性,唯一的假设是信号是周期的或者准周期的;

(2)抗噪能力强,后面可以看到,对周期性的要求也不是很高。就是用一个多尺度的滑动窗口去两侧进行比较,寻找局部最大值。

import numpy as np

def AMPD(data):
    """
    实现AMPD算法
    :param data: 1-D numpy.ndarray 
    :return: 波峰所在索引值的列表
    """
    p_data = np.zeros_like(data, dtype=np.int32)
    count = data.shape[0]
    arr_rowsum = []
    for k in range(1, count // 2 + 1):
        row_sum = 0
        for i in range(k, count - k):
            if data[i] > data[i - k] and data[i] > data[i + k]:
                row_sum -= 1
        arr_rowsum.append(row_sum)
    min_index = np.argmin(arr_rowsum)
    max_window_length = min_index
    for k in range(1, max_window_length + 1):
        for i in range(k, count - k):
            if data[i] > data[i - k] and data[i] > data[i + k]:
                p_data[i] += 1
    return np.where(p_data == max_window_length)[0]

我们先来合成一段数据看看效果:

import matplotlib.pyplot as plt

def sim_data():
    N = 1000
    x = np.linspace(0, 200, N)
    y = 2 * np.cos(2 * np.pi * 300 * x) \
        + 5 * np.sin(2 * np.pi * 100 * x) \
        + 4 * np.random.randn(N)
    return y

def vis():
    y = sim_data()
    plt.plot(range(len(y)), y)
    px = AMPD(y)
    plt.scatter(px, y[px], color="red")

    plt.show()

vis()

波谷的计算方式只需要把数据乘以-1反转一下就可以了。

数据的噪声还是比较大的,但是AMPD的效果很好。

原始文献中还给出了很多检测例子,比如:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用python提取噪声信号中的有效信息 的相关文章

  • 检测到通过 ChromeDriver 启动的 Chrome 浏览器

    我正在尝试在 python 中使用 selenium chromedriver 来访问 www mouser co uk 网站 然而 从第一次拍摄开始 它就被检测为机器人 有人对此有解释吗 此后我使用的代码 options Options
  • 将 transaction.commit_manually() 升级到 Django > 1.6

    我继承了为 Django 1 4 编写的应用程序的一些代码 我们需要更新代码库以使用 Django 1 7 并最终更新到 1 8 作为下一个长期支持版本 在一些地方它使用旧风格 transaction commit manually and
  • numpy python 中的“AttributeError:'matrix'对象没有属性'strftime'”错误

    我有一个维度为 72000 1 的矩阵 该矩阵涉及时间戳 我想使用 strftime 如下所示 strftime d m y 为了得到像这样的输出 11 03 02 我有这样一个矩阵 M np matrix timestamps 我使用了
  • 在 python 3 中使用子进程

    我使用 subprocess 模块在 python 3 中运行 shell 命令 这是我的代码 import subprocess filename somename py in practical i m using a real fil
  • 在Python中如何获取字典的部分视图?

    是否有可能获得部分视图dict在Python中类似于pandasdf tail df head 说你有很长一段时间dict 而您只想检查某些元素 开头 结尾等 dict 就像是 dict head 3 To see the first 3
  • Pyqt-如何因另一个组合框数据而更改组合框数据?

    我有一个表 有 4 列 这 4 列中的两列是关于功能的 一个是特征 另一个是子特征 在每一列中 所有单元格都有组合框 我可以在这些单元格中打开txt 我想 当我选择电影院作为功能时 我只想看到子功能组合框中的电影名称 而不是我的 数据 中的
  • 小部件之间的自定义信号

    尝试将信号从一个 gtk EventBox 子级发送到另一个 在 init HeadMode 第 75 行 上出现错误 类型错误 未知信号名称 消息发送 why usr bin env python coding utf8 import p
  • 根据 Pandas 中的列表对多列进行排序

    感谢有关如何根据 pandas 中的倍数列表对给定多列进行排序的任何提示 如下所示 import pandas as pd sort a a d e sort b s1 s3 s6 sort c t1 t2 t3 df pd DataFra
  • 更改 x 轴比例

    我使用 Matlab 创建了这个图 使用 matplotlib x 轴绘制大数字 例如 100000 200000 300000 我想要 1 2 3 和 10 5 之类的值来指示它实际上是 100000 200000 300000 有没有一
  • 如何使用 javascript/jquery/AJAX 调用 Django REST API?

    我想使用 Javascript jQuery AJAX 在前端调用 Django Rest API 请求方法是 POST 但当我看到 API 调用它的调用 OPTIONS 方法时 所以 我开始了解access control allow o
  • 对使用 importlib.util 导入的对象进行酸洗

    我在使用Python的pickle时遇到了一个问题 我需要通过将文件路径提供给 importlib util 来加载一些 Python 模块 如下所示 import importlib util spec importlib util sp
  • GradientTape 根据损失函数是否被 tf.function 修饰给出不同的梯度

    我发现计算的梯度取决于 tf function 装饰器的相互作用 如下所示 首先 我为二元分类创建一些合成数据 tf random set seed 42 np random seed 42 x tf random normal 2 1 y
  • Werkzeug 中的线程和本地代理。用法

    首先 我想确保我正确理解了功能的分配 分配本地代理功能以通过线程内的模块 包 共享变量 对象 我对吗 其次 用法对我来说仍然不清楚 也许是因为我误解了作业 我用烧瓶 如果我有两个 或更多 模块 A B 我想将对象C从模块A导入到模块B 但我
  • 从 python 检测 macOS 中的暗模式

    我正在编写一个 PyQt 应用程序 我必须添加一个补丁 以便在启用暗模式的 Macos 上可以读取字体 app QApplication Fix for the font colours on macos when running dark
  • falcon,AttributeError:“API”对象没有属性“create”

    我正在尝试测试我的猎鹰路线 但测试总是失败 而且看起来我把所有事情都做对了 my app py import falcon from resources static import StaticResource api falcon API
  • PIL - 需要抖动,但限制调色板会导致问题

    我是 Python 新手 正在尝试使用 PIL 来执行 Arduino 项目所需的解析任务 这个问题涉及到Image convert 方法以及调色板 抖动等选项 我有一些硬件能够一次仅显示 16 种颜色的图像 但它们可以指定为 RGB 三元
  • Python问题:打开和关闭文件返回语法错误

    大家好 我发现了这个有用的 python 脚本 它允许我从网站获取一些天气数据 我将创建一个文件和其中的数据集 有些东西不起作用 它返回此错误 File
  • bs4 `next_sibling` VS `find_next_sibling`

    我在使用时遇到困难next sibling 并且类似地与next element 如果用作属性 我不会得到任何返回 但如果用作find next sibling or find next 然后就可以了 来自doc https www cru
  • python 日志记录会刷新每个日志吗?

    当我使用标准模块将日志写入文件时logging 每个日志会分别刷新到磁盘吗 例如 下面的代码会将日志刷新 10 次吗 logging basicConfig level logging DEBUG filename debug log fo
  • python 中的 after() 与 update()

    我是 python 新手 开始使用 tkinter 作为画布 到目前为止 我使用 update 来更新我的画布 但还有一个 after 方法 谁能给我解释一下这个函数 请举个例子 两者之间有什么区别 root after integer c

随机推荐

  • curl发送POST方法类型带body参数请求以及发送上传文件请求

    curl在实际中会被postman等替代 xff0c 但是他仍然是一个快速的模拟http请求的工具 xff0c 而且也有他不可替代的理由 xff0c 使用简单 xff0c 在命令行下就可以完成 今天不是介绍如何使用curl模拟各种GET P
  • 第45章 DCMI—OV2640摄像头—零死角玩转STM32-F429系列

    第45章 DCMI OV2640摄像头 全套 200 集视频教程和 1000 页 PDF 教程请到秉火论坛下载 xff1a www firebbs cn 野火视频教程优酷观看网址 xff1a http i youku com firege
  • 技术分享|探究群体智能—基于UWB定位技术的无人机集群协同

    随着无人机性能水平提高 xff0c 无人机在民用类和军事类活动中的使用越来越广泛 由于无人机飞行环境和任务难度不同 xff0c 单架无人机因为自身动力和负荷能力很难独自完成任务 xff0c 无人机集群协同作业则是当前科技现代化的任务要求 集
  • 技术分享 | 基于室外RTK/GPS定位系统下的无人机集群协同

    在自然界中 xff0c 为弥补个体能力的不足 xff0c 诸多生物种群能通过个体相互之间的交流与合作呈现出某种群体行为 xff0c 比如鱼群结群游弋 鸟群聚集迁徙以及蚂蚁协同搬运等 受此激励 xff0c 人们希望开发像鸟群 鱼群一样自由集结
  • STL学习系列之一——标准模板库STL介绍

    说明 xff1a 此文为连载版 xff0c 今天学习STL的介绍 1 STL介绍 标准模板库STL是当今每个从事C 43 43 编程的人需要掌握的技术 xff0c 所有很有必要总结下 本文将介绍STL并探讨它的三个主要概念 xff1a 容器
  • 如何在cmakelist中,find_package取指定路径中查找

    在开发中 xff0c 最常遇到环境问题 xff0c 这个opencv版本不对 xff0c 那个pcl版本不对 xff0c 如果将原系统目录下的库卸载后重装新的版本 xff0c 往往会出现一些意想不到的事 xff0c 费时费力 我常常这样做
  • MFC模型树控件TreeCtrl实现按下Ctrl键多选,按下Shift键连选

    MFC模型树控件TreeCtrl实现按下Ctrl键多选 xff0c 按下Shift键连选 MFC的List Box只需要将控件属性中的Selection项设置为Extended xff0c 即可实现Ctrl键多选和Shift键连选 xff1
  • PCL点云库——欧式聚类分割

    欧式聚类分割 pcl EuclideanClusterExtraction是基于欧式距离提取集群的方法 xff0c 仅依据距离 xff0c 将小于距离阈值的点云作为一个集群 具体的实现方法大致是 xff1a 1 找到空间中某点p10 xff
  • PCL点云库——旋转平移矩阵

    旋转平移矩阵 点云摆正 点云配准等点云操作实质上是对点云进行旋转平移 xff0c 使点云变换至目标位姿 PCL中使用的是矩阵乘列向量的计算方法 下面分别给出了点A x y z 绕X轴 Y轴 Z轴逆时针旋转角度 的示意图与旋转矩阵 xff08
  • PCL点云库——点云法线估计

    点云法线估计 PCL中的所有点云的法线都是指向视点的 xff0c 视点坐标默认为 0 0 0 xff0c 对视点进行设置 xff0c 则可对法线进行定向 如图1与图2所示 xff0c 分别为斯坦福兔子在视点坐标为 10 10 10 与 10
  • PCL点云库——PCA粗配准

    PCA粗配准 主成分分析法 Principal Component Analysis xff0c 简称PCA 是使数据简化的算法 xff0c 通过揭露数据内部的主要分布方向 xff0c 减少了数据集的维数 xff0c 从而保留了点云集中贡献
  • MFC按钮(Button)上的文字与图标显示

    MFC按钮 xff08 Button xff09 上的文字与图标显示 一 新建对话框 MFC中使用以下两种方法可以得到对话框 xff1a 1 1 使用如图1所示的方法 xff0c 新建一个基于对话框的应用程序 xff1b 1 2 在已有的项
  • 第44章 MPU6050传感器—姿态检测—零死角玩转STM32-F429系列

    第44章 MPU6050传感器 姿态检测 全套 200 集视频教程和 1000 页 PDF 教程请到秉火论坛下载 xff1a www firebbs cn 野火视频教程优酷观看网址 xff1a http i youku com firege
  • 通过哪些性能参数选择手持式激光扫描仪?

    选择手持式激光扫描仪 激光主动成像系统有诸多优点 xff0c 譬如抗干扰性强 xff0c 能很好地适应不同的测量现场 xff0c 但是它的图像会受到散斑噪声和其他一些高斯噪声的影响 如图1所示 xff0c 分别用红 蓝激光扫描点距0 1mm
  • 函数使用笔记——ShellExecute

    函数使用笔记 ShellExecute API函数 ShellExecute的功能是运行一个外部程序 xff08 或者是打开一个已注册的文件 打开一个目录 打印一个文件等等 xff09 xff0c 并对外部程序有一定的控制 有几个API函数
  • 使用Selenium和Chrome浏览器获取诗词网站搜索结果

    在进行信息检索时 xff0c 我们通常会使用搜索引擎来查找相关的文章 图片 音乐等资源 而在特定的领域中 xff0c 也有一些针对特定内容的搜索引擎或网站 xff0c 比如古诗文网 诗词库等 在本篇博客中 xff0c 我们将介绍如何使用Py
  • 使用Selenium和Chrome浏览器获取图片网站搜索结果

    在进行信息检索时 xff0c 我们通常会使用搜索引擎来查找相关的文章 图片 音乐等资源 而在特定的领域中 xff0c 也有一些针对特定内容的搜索引擎或网站 xff0c 比如百度图片 Pixabay等 在本篇博客中 xff0c 我们将介绍如何
  • 使用python定时抓取个人邮箱数据(通过邮件数量判断)

    在进行信息收集时 xff0c 我们通常会使用电子邮件来接收最新的消息 文档 数据等资源 而在特定场景下 xff0c 也有一些需要自动化获取和处理邮件数据的需求 在本篇博客中 xff0c 我们将介绍如何使用Python的imaplib库连接到
  • 使用Python从邮件中下载附件和提取元数据

    在本篇博客中 xff0c 我们将解析一段Python代码 xff0c 该代码可以从电子邮件中下载附件并提取发送人 主题和日期等元数据 这段代码包含两个函数 xff1a download file 和 get email title 其中 x
  • 使用python提取噪声信号中的有效信息

    本文算法的原始论文出处 xff1a Algorithms Free Full Text An Efficient Algorithm for Automatic Peak Detection in Noisy Periodic and Qu