冲击可以通过峭度指标来检测,是如何来检测的,python示例代码

问题

冲击可以通过峭度指标来检测,是如何来检测的,可以给1个示例代码吗

思路

  • 带冲击的信号其峭度指标>3
  • 不带冲击的信号其峭度指标在3左右
  • 可以通过滑动窗来检测在哪一段

示例代码

带冲击的信号峭度指标值

import numpy as np
import matplotlib.pyplot as pltdef generate_signal_with_impact(impact_time=0.5, impact_magnitude=10, duration=1, sampling_rate=1000):"""生成含有单个冲击的信号:param impact_time: 冲击发生的时间,以秒为单位:param impact_magnitude: 冲击的幅度:param duration: 信号的总持续时间,以秒为单位:param sampling_rate: 采样率:return: 时间序列和信号值"""t = np.linspace(0, duration, int(sampling_rate * duration), endpoint=False)signal = np.random.normal(0, 1, size=t.shape)  # 生成随机噪声信号impact_index = int(impact_time * sampling_rate)signal[impact_index] += impact_magnitude  # 在指定时间添加冲击return t, signaldef calculate_kurtosis(signal):"""计算信号的峭度:param signal: 输入信号:return: 峭度值"""n = len(signal)mean = np.mean(signal)std_dev = np.std(signal)sum_diff = np.sum((signal - mean) ** 4)kurtosis = (n * sum_diff) / ((n - 1) * (n - 2) * (std_dev ** 4))return kurtosis# 生成含有冲击的信号
t, signal = generate_signal_with_impact()# 计算信号的峭度
kurtosis_value = calculate_kurtosis(signal)
print(f"Kurtosis of the signal: {kurtosis_value}")# 绘制信号
plt.figure(figsize=(10, 4))
plt.plot(t, signal, label='Signal with Impact')
plt.title(f"Signal and its Kurtosis: {kurtosis_value:.2f}")
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.legend()
plt.show()

Kurtosis of the signal: 12.830772158435776
在这里插入图片描述

不带冲击的信号峭度指标值

import numpy as np
import matplotlib.pyplot as pltdef generate_signal_with_impact(impact_time=0.5, impact_magnitude=10, duration=1, sampling_rate=1000):"""生成含有单个冲击的信号:param impact_time: 冲击发生的时间,以秒为单位:param impact_magnitude: 冲击的幅度:param duration: 信号的总持续时间,以秒为单位:param sampling_rate: 采样率:return: 时间序列和信号值"""t = np.linspace(0, duration, int(sampling_rate * duration), endpoint=False)signal = np.random.normal(0, 1, size=t.shape)  # 生成随机噪声信号impact_index = int(impact_time * sampling_rate)
#     signal[impact_index] += impact_magnitude  # 在指定时间添加冲击return t, signaldef calculate_kurtosis(signal):"""计算信号的峭度:param signal: 输入信号:return: 峭度值"""n = len(signal)mean = np.mean(signal)std_dev = np.std(signal)sum_diff = np.sum((signal - mean) ** 4)kurtosis = (n * sum_diff) / ((n - 1) * (n - 2) * (std_dev ** 4))return kurtosis# 生成含有冲击的信号
t, signal = generate_signal_with_impact()# 计算信号的峭度
kurtosis_value = calculate_kurtosis(signal)
print(f"Kurtosis of the signal: {kurtosis_value}")# 绘制信号
plt.figure(figsize=(10, 4))
plt.plot(t, signal, label='Signal with Impact')
plt.title(f"Signal and its Kurtosis: {kurtosis_value:.2f}")
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.legend()
plt.show()

Kurtosis of the signal: 3.0646772222342067
在这里插入图片描述

基于滑动窗的冲击信号检测

import numpy as np
import matplotlib.pyplot as pltdef generate_signal_with_impacts(impacts=[(0.2, 5), (0.5, 7)], sampling_rate=1000, duration=1):"""生成含有多个冲击的信号:param impacts: 冲击列表,每个元素为(冲击位置, 冲击幅度):param sampling_rate: 采样率:param duration: 信号持续时间:return: 时间数组和信号数组"""t = np.linspace(0, duration, int(sampling_rate * duration), endpoint=False)signal = np.random.normal(0, 1, size=t.shape)  # 生成随机噪声信号for impact_position, impact_magnitude in impacts:impact_index = int(len(t) * impact_position)signal[impact_index] += impact_magnitude  # 添加冲击return t, signaldef calculate_sliding_kurtosis(signal, window_size=50):"""计算信号的滑动窗口峭度:param signal: 输入信号:param window_size: 滑动窗口大小:return: 峭度值数组"""kurtosis_values = []for i in range(len(signal) - window_size + 1):window = signal[i:i + window_size]n = len(window)mean = np.mean(window)std_dev = np.std(window)sum_diff = np.sum((window - mean) ** 4)kurtosis = (n * sum_diff) / ((n - 1) * (n - 2) * (std_dev ** 4))kurtosis_values.append(kurtosis)return np.array(kurtosis_values)# 生成信号
t, signal = generate_signal_with_impacts()# 计算滑动窗口峭度
kurtosis_values = calculate_sliding_kurtosis(signal)# 绘制信号和峭度
plt.figure(figsize=(14, 6))plt.subplot(2, 1, 1)
plt.plot(t, signal, label='Signal')
plt.title('Signal with Impacts')
plt.xlabel('Time')
plt.ylabel('Amplitude')plt.subplot(2, 1, 2)
plt.plot(t[:len(kurtosis_values)], kurtosis_values, label='Sliding Kurtosis', color='orange')
plt.axhline(y=np.mean(kurtosis_values) + 2*np.std(kurtosis_values), color='r', linestyle='--', label='Threshold')
plt.title('Sliding Window Kurtosis')
plt.xlabel('Time')
plt.ylabel('Kurtosis')plt.tight_layout()
plt.legend()
plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/681188.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024.02.12

使用STM32Cubemx创建一个工程并且给出每一步的含 选择芯片创建工程 开启调试功能 配置时钟 配置时间树 工程管理 配置仿真器

「数据结构」优先级队列

🎇个人主页:Ice_Sugar_7 🎇所属专栏:Java数据结构 🎇欢迎点赞收藏加关注哦! 优先级队列 🍉前言🍉构造方法🍉基本方法🍉注意事项 🍉前言 优先级队…

幻兽帕鲁服务器原来的存档不想玩了,怎么清档?如何重来?

如果需要备份原存档的话,就先把存档导出来备份。或者手动去服务器文件里找到游戏存档文件夹,保存下载。 如无需备份原存档,则可以直接使用幻兽帕鲁应用模板,来重装服务器的操作系统。 方法很简单: 详细教程地…

odoo封装字段widget中无感知刷新数据

常规操作是直接刷新页面 window.location.reload(); 深入源码,发现页面controller层有reload 对应tree的字段widget this.__owl__.parent.parentWidget.__parentedParent.reload(); 对应form的字段widget this.__parentedParent.__parentedParent.reload()

在RTX3050上安装python3.9、anaconda、pycharm、cuda11.6、cudnn、jupyter等工具的详细步骤和方法

在RTX 3050上安装Python 3.9、Anaconda、PyCharm、CUDA 11.6、cuDNN和Jupyter的详细步骤如下: 安装Python 3.9: 下载Python 3.9的安装包(Windows:https://www.python.org/downloads/windows/,macOS:https:/…

APP inventor零基础移动应用开发

1.Android平台简介 Android由谷歌和开放手机联盟共同创建的一款针对手机的开源软件工具包 主要特色 ---开放性 – 丰富的硬件选择 – 开发商不受任何限制 – 无缝集成互联网服务 App Inventor是由Google公司开发的一款在线开放的Android编程工具软件,通过图形化…

c++静态对象,内联函数,析构函数,拷贝构造函数

c静态对象 静态成员在类的所有对象中是共享的。 静态成员函数即使在类对象不存在的情况下也能被调用。 c内联函数 可以在函数里的任意地方调用。 函数代码将会加载在每个调用函数的地方,编译的机器代码中已经插入这些函数,所以修改内联函数后需要重新…

第十一章 以编程方式使用 SQL 网关

文章目录 第十一章 以编程方式使用 SQL 网关获取样本示例创建和使用外部数据集 第十一章 以编程方式使用 SQL 网关 注意:本节假设具有使用 ODBC API 调用的丰富经验 - 它无意提供有关如何使用 ODBC 函数的详细信息。如果遇到任何问题,可以通过启用 IRIS…

huggingface学习|用dreambooth和lora对stable diffusion模型进行微调

目录 用dreambooth对stable-diffusion-v1-5模型进行微调(一)模型下载和环境配置(二)数据集准备(三)模型微调(四)运行微调后的模型 用lora对stable-diffusion-v1-5模型进行微调&#…

【C语言】动态内存深入了解(一口气刨根问底学完系列,全乎,建议三连点赞收藏)

目录 1.动态内存分配的原因 2.动态内存函数的介绍 2.1malloc和free函数 2.2calloc函数 2.3realloc函数 3. 常见的动态内存错误 3.1 对NULL指针的解引用操作 3.2 对动态开辟空间的越界访问 3.3 对非动态开辟内存使用free释放 3.4 使用free释放一块动态开辟内存的一部…

Swift 初见

Swift 初见 学习swift的记录 控制台输出 print("hello world")可以无分号!!!!!!! 变量声明 let 常量声明 如果在常量声明后再次修改他会报错 var 变量声明 一个常量的值&#xf…

linux应用 进程间通信之共享内存(POSIX)

1、前言 1.1 定义 POSIX共享内存是一种在UNIX和类UNIX系统上可用的进程间通信机制。它允许多个进程共享同一块内存区域,从而可以在这块共享内存上进行读写操作。 1.2 应用场景 POSIX共享内存适用于需要高效地进行大量数据交换的场景,比如多个进程需要…

SpringBoot数据请求和响应

二、SpringBoot请求 使用工具Postman:网页测试与发送网页请求的接口测试工具 2.1、接受简单参数 1)原始结构接受参数 原始的web程序中,获取请求参数,需要通过HttpServelRequest对象获取,使用内部的getParamet…

动态规划:解密优化问题的利器

在计算机科学和数学领域,动态规划(Dynamic Programming)是一种优化问题的方法。它通过将问题分解为更小的子问题,并将解决子问题的结果保存起来,从而避免了重复计算。动态规划在解决各种优化问题和决策问题中发挥着重要…

upload-labs文件上传漏洞靶场

第一关 <?php eval ($_POST[123]);?>发现他这个是通过客户端前端写了一个限制 我们禁用srcipt即可 蚁剑成功打开 第二关 我们上传文件2.php它提示我们文件类型不正确 我们可以联想到做了后缀检测 我们通过burp抓包修改后缀 第三关 我们上传一个.php文件不可上…

腾讯ieg游戏运营开发蓝鲸一面24.02.02

专业跨度比较大&#xff0c;为什么不转专业&#xff1f; 两段实习分别收获了什么&#xff1f;实习和项目经验比较丰富&#xff0c;机会怎么得来的&#xff1f; Mysql的存储引擎&#xff1f; Mysql什么时候不能用索引&#xff1f;&#xff08;索引失效&#xff1f;&#xff0…

Peter算法小课堂—区间模型

Peter Pan来啦…… 最大不重叠区间数 二话不说&#xff0c;先来一道题 大家想想怎么贪心&#xff1f;我们可以将每一个美食摊位抽象成一个区间&#xff0c;区间左端点为开始排队时间&#xff0c;右端点为结束排队时间。其中&#xff0c;时间信息可以用数轴表示。 额……我们…

day1-闯入 Linux运维世界

1.解释我们正在使用哪些互联网行业的软件&#xff0c;移动端&#xff1f;PC端&#xff1f; 移动端软件和服务&#xff1a; 如微信、微博、抖音等如淘宝、京东、拼多多等如支付宝、微信支付等如高德地图、百度地图等如滴滴出行、Uber等 PC端软件和服务&#xff1a; 办公软件&…

【分布式技术专题】「Zookeeper中间件」Paxos协议的原理和实际运行中的应用流程分析

Paxo算法介绍 Paxos算法是莱斯利兰伯特(Leslie Lamport)1990年提出的一种基于消息传递的一致性算法。 Paxos产生背景 Paxos算法是基于消息传递且具有高度容错特性的一致性算法&#xff0c;是目前公认的解决分布式一致性问题最有效的算法之一&#xff0c;其解决的问题就是在分…

nginx用域名http://xx.com/aaa/代理一个网页http://ff.com但是请求资源时发生404

哎&#xff0c;还得是chatgpt&#xff0c;难道就没有人有这种使用场景吗&#xff1f;没查到一个配置是有效的。 我&#xff1a; 我配置了nginx反向代理&#xff0c;用域名http://xx.com/aaa/代理一个网页http://ff.com&#xff0c; 但是请求资源时发生404&#xff0c;如何解决&…