冲击可以通过峭度指标来检测,是如何来检测的,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创建一个工程并且给出每一步的含 选择芯片创建工程 开启调试功能 配置时钟 配置时间树 工程管理 配置仿真器

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

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

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

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

APP inventor零基础移动应用开发

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

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共享内存适用于需要高效地进行大量数据交换的场景,比如多个进程需要…

upload-labs文件上传漏洞靶场

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

Peter算法小课堂—区间模型

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

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

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

轮播图 HarmonyOS 鸿蒙 ArkTS ArkUI

第一步&#xff1a;新建图片数组 State swiperimgs:Array<Object>[$r(app.media.a), //本地图片或者网络图片$r(app.media.b),$r(app.media.c),$r(app.media.d)] 第二步&#xff1a;写入轮播图代码 Column(){Swiper(){ForEach(this.swiperimgs, (item) > {Image(item…

【c语言】字符串常见函数 上

&#x1f388;个人主页&#xff1a;甜美的江 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;c语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&a…

【JVM篇】怎么解决内存泄漏问题

文章目录 &#x1f50e;什么是内存泄漏&#x1f6f8;解决内存泄漏⭐发现问题⭐诊断原因⭐修复问题 &#x1f50e;什么是内存泄漏 在Java中如果不再使用一个对象&#xff0c;但是这个对象仍然在GC Root的引用链上&#xff0c;这个对象就不会被垃圾回收器回收&#xff0c;这种情…

openGauss学习笔记-218 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-I/O

文章目录 openGauss学习笔记-218 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-I/O218.1 查看I/O状况218.2 性能参数分析 openGauss学习笔记-218 openGauss性能调优-确定性能调优范围-硬件瓶颈点分析-I/O 获取openGauss节点的CPU、内存、I/O和网络资源使用情况&#xf…

[C++]17:二叉树进阶

二叉树进阶 一.二叉搜索树&#xff1a;1.二叉搜索树的概念&#xff1a;2.二叉搜索树的实现---循环版本&#xff1a;1.二叉搜索树的基本结构&#xff1a;2.查找&#xff1a;3.插入&#xff1a;4.中序遍历&#xff1a;5.删除&#xff1a; 3.二叉搜索树的实现---递归版本&#xff…

随机过程及应用学习笔记(二)随机过程的基本概念

随机过程论就是研究随时间变化的动态系统中随机现象的统计规律的一门数学学科。 目录 前言 一、随机过程的定义及分类 1、定义 2、分类 二、随机过程的分布及其数字特征 1、分布函数 2、数字特征 均值函数和方差函数 协方差函数和相关函数 3、互协方差函数与互相关函…

Java String源码剖析+面试题整理

由于字符串操作是计算机程序中最常见的操作之一&#xff0c;在面试中也是经常出现。本文从基本用法出发逐步深入剖析String的结构和性质&#xff0c;并结合面试题来帮助理解。 String基本用法 在Java中String的创建可以直接像基本类型一样定义&#xff0c;也可以new一个 Str…

[ai笔记5] 个人AI资讯助手实战

欢迎来到文思源想的ai空间&#xff0c;这是技术老兵重学ai以及成长思考的第5篇分享&#xff0c;也是把ai场景化应用的第一篇实操内容&#xff01; 既然要充分学习和了解ai&#xff0c;自然少不了要时常看看ai相关资讯&#xff0c;所以今天特地用字节的“扣子”做了一个ai的资讯…

Java中抽象类和接口的区别

抽象类和接口都是 Java 中多态的常见使用方式. 都需要重点掌握. 同时又要认清两者的区别(重要!!! 常见面试题)。 核心区别: 抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写而重写抽象方法), 而接口中不能包含普通方法&#xff08;接口…