当前位置: 首页 > news >正文

python 绘制离散曲线计算包络谱

要绘制离散曲线的包络谱,可以使用Python中的numpy和matplotlib库。
在Python中,绘制离散曲线的包络谱通常涉及到信号处理领域,特别是当处理振动信号或类似的时间序列数据时。包络谱是信号包络(通常是信号的绝对值或平方)的频谱分析,它可以帮助识别信号的周期性成分。以下是一个基本的步骤指南,以及使用Python(特别是NumPy和Matplotlib库)和SciPy库来绘制离散曲线的包络谱的示例代码。

步骤 1: 准备数据

首先,你需要有一个离散的时间序列数据。在这个例子中,我们将创建一个简单的合成信号来模拟。

步骤 2: 计算包络

通常,包络可以通过信号的绝对值或平方来计算,然后使用低通滤波器来平滑这个信号,从而得到包络。

步骤 3: 对包络进行FFT

对包络进行快速傅里叶变换(FFT),以获得其在频率域中的表示,即包络谱。

步骤 4: 绘制包络谱

使用Matplotlib库来绘制包络谱。

示例代码一

import numpy as np
import matplotlib.pyplot as plt
from scipy.fftpack import fft# 示例数据
fs = 1000  # 采样频率
t = np.linspace(0, 1, fs, endpoint=False)  # 时间数组
freq = 5  # 信号频率
signal = np.sin(2 * np.pi * freq * t) + 0.5 * np.sin(2 * np.pi * 10 * t) + np.random.normal(0, 0.1, size=t.size)  # 合成信号# 计算包络
envelope = np.abs(signal)  # 简单地使用绝对值作为包络
# 或者使用更复杂的包络检测方法,如希尔伯特变换
# envelope = np.abs(scipy.signal.hilbert(signal))# FFT
N = signal.size
Y = fft(envelope)
P2 = np.abs(Y / N)
P1 = P2[:N // 2 + 1]
P1[1:-1] *= 2
f = fs * np.arange(0, (N // 2 + 1)) / N# 绘制包络谱
plt.figure()
plt.plot(f, P1)
plt.title('Envelope Spectrum')
plt.xlabel('Frequency (Hz)')
plt.ylabel('|P1(f)|')
plt.grid(True)
plt.show()

注意
包络计算方法:在这个例子中,我们简单地使用了信号的绝对值作为包络。但在实际应用中,可能需要更复杂的包络检测方法,如使用希尔伯特变换来获取解析信号,并从中提取包络。
低通滤波:在计算包络之前,有时需要对信号进行低通滤波,以去除高频噪声。这可以通过SciPy的signal.filtfilt或signal.lfilter函数来实现。
FFT结果:FFT的结果是对称的,通常只取一半(包括DC分量)来显示频谱。

这个代码示例提供了一个基本的框架,你可以根据具体需求进行调整和优化。

示例代码二:计算并绘制离散曲线的包络谱:

import numpy as np
import matplotlib.pyplot as plt# 生成离散曲线的数据
t = np.linspace(0, 1, 500)  # 时间序列
x = np.sin(2 * np.pi * 10 * t) + 0.5 * np.sin(2 * np.pi * 20 * t)  # 离散曲线数据# 计算包络谱
envelope = np.abs(np.fft.fft(x))# 绘制离散曲线的包络谱
plt.figure(figsize=(8, 6))
plt.plot(t, x, label='Signal')
plt.plot(t, envelope, label='Envelope Spectrum')
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.legend()
plt.show()

在这段代码中,首先使用numpy库生成离散曲线的数据。然后,通过numpy库的fft函数计算离散曲线的傅里叶变换,并计算得到包络谱。最后,使用matplotlib库绘制离散曲线和其包络谱的图像。

你可以根据自己的需求修改代码中的数据生成方式,并进行相应的调整。

相关文章:

  • 二级Java真题乱序版第十一套(含真题解析)
  • 黑马Java零基础视频教程精华部分_10_面向对象进阶(2)
  • 位运算(更新中)
  • 本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——2Yolo使用之ONNX模型准备
  • PE安装win11原版系统“无法创建新的分区,也找不到现有的分区”和“windows无法对计算机进行启动到下一个安装阶段”的解决办法
  • 【参会邀请】第四届区块链技术与信息安全国际会议(ICBCTIS 2024)诚邀相聚江城!
  • 代码随想录第五十七天
  • Vue 常用组件间通信方式
  • 代码随想录算法训练营第 32 天 | LeetCode509斐波那契数列 LeetCode70爬楼梯 LeetCode749使用最小花费爬楼梯
  • 华为路由常见 LSA 类型的产生及作用域和字段详细解读
  • 杰理-1拖8 错误状态
  • 程序员找工作之操作系统面试题总结分析
  • 【Unity实战】给Unity的类添加新功能
  • Android笔试面试题AI答之线程Handler、Thread(3)
  • 基于 Kafka 的经验:AutoMQ 和 MinIO 如何解决成本和弹性挑战
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 2018一半小结一波
  • css布局,左右固定中间自适应实现
  • ES6系列(二)变量的解构赋值
  • express如何解决request entity too large问题
  • gcc介绍及安装
  • Javascript Math对象和Date对象常用方法详解
  • Linux快速复制或删除大量小文件
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Python利用正则抓取网页内容保存到本地
  • Redis中的lru算法实现
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • Swoft 源码剖析 - 代码自动更新机制
  • vue-cli在webpack的配置文件探究
  • Xmanager 远程桌面 CentOS 7
  • 初探 Vue 生命周期和钩子函数
  • 官方解决所有 npm 全局安装权限问题
  • 基于HAProxy的高性能缓存服务器nuster
  • 聊聊hikari连接池的leakDetectionThreshold
  • 如何胜任知名企业的商业数据分析师?
  • 为什么要用IPython/Jupyter?
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 以太坊客户端Geth命令参数详解
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 1.Ext JS 建立web开发工程
  • 回归生活:清理微信公众号
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • #NOIP 2014#Day.2 T3 解方程
  • #大学#套接字
  • #每天一道面试题# 什么是MySQL的回表查询
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (06)金属布线——为半导体注入生命的连接
  • (BFS)hdoj2377-Bus Pass
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (pojstep1.1.2)2654(直叙式模拟)
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程