振动信号频域图绘制函数(python版)

在实际应用中,不免会看时域图和频域图,封装了绘制时域图和频域图程序,方便调用

## 导入包
from matplotlib import pyplot as plt
from matplotlib import rcParams
import numpy as np
import pandas as pd

config = {
    "font.family": 'serif', # 衬线字体
    "font.size": 14, # 相当于小四大小
    "font.serif": ['SimSun'], # 宋体
    "mathtext.fontset": 'stix', # matplotlib渲染数学字体时使用的字体,和Times New Roman差别不大
    'axes.unicode_minus': False # 处理负号,即-号
}
rcParams.update(config)
##========绘制时域信号图========##
def plt_time_domain(arr, fs=1600, ylabel='Amp(mg)', title='原始数据时域图', img_save_path=None, x_vline=None, y_hline=None):
    """
    :fun: 绘制时域图模板
    :param arr: 输入一维数组数据
    :param fs: 采样频率
    :param ylabel: y轴标签
    :param title: 图标题
    :return: None
    """
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文
    plt.rcParams['axes.unicode_minus'] = False  # 显示负号
    font = {'family': 'Times New Roman', 'size': '20', 'color': '0.5', 'weight': 'bold'}
    
    plt.figure(figsize=(12,4))
    length = len(arr)
    t = np.linspace(0, length/fs, length)
    plt.plot(t, arr, c='g')
    plt.xlabel('t(s)')
    plt.ylabel(ylabel)
    plt.title(title)
    if x_vline:
        plt.vlines(x=x_vline, ymin=np.min(arr), ymax=np.max(arr), linestyle='--', colors='r')
    if y_hline:
        plt.hlines(y=0.2, xmin=np.min(t), xmax=np.max(t), linestyle=':', colors='y')
    #===保存图片====#
    if img_save_path:
        plt.savefig(img_save_path, dpi=500, bbox_inches = 'tight')
    plt.show()

##========绘制频域信号图========##
def plt_fft_img(arr, fs, ylabel='Amp(mg)', title='频域图', img_save_path=None, vline=None, hline=None, xlim=None):
    """
    :fun: 绘制频域图模板
    :param arr: 输入一维时域数组数据
    :param fs: 采样频率
    :param ylabel: y轴标签
    :param title: 图标题
    :return: None
    """
    # 计算频域幅值
    length = len(arr)
    t = np.linspace(0, length/fs, length)
    fft_result = np.fft.fft(arr)
    fft_freq= np.fft.fftfreq(len(arr), d=t[1]-t[0])  # FFT频率
    fft_amp= 2*np.abs(fft_result)/len(t)                     # FFT幅值

    # 绘制频域图
    plt.figure(figsize=(12,4))
    plt.title(title)
    plt.plot(fft_freq[0: int(len(t)/2)], fft_amp[0: int(len(t)/2)], label='Frequency Spectrum', color='b')
    plt.xlabel('频率 (Hz)')
    plt.ylabel('幅值')
    plt.legend()
    if vline:
        plt.vlines(x=vline, ymin=np.min(fft_amp), ymax=np.max(fft_amp), linestyle='--', colors='r')
    if hline:
        plt.hlines(y=hline, xmin=np.min(fft_freq), xmax=np.max(fft_freq), linestyle=':', colors='y')
    #===保存图片====#
    if img_save_path:
        plt.savefig(img_save_path, dpi=500, bbox_inches = 'tight')
    if xlim: # 图片横坐标是否设置xlim
        plt.xlim(0, xlim)  
    plt.tight_layout()
    plt.show()
    
    return fft_freq, fft_amp

示例代码

fs = 100  # 采样频率
f = 20    # 模拟正弦信号频率
time = 5  # 采样时长
t = np.linspace(0, time, time*fs)
data = 1*np.sin(2*np.pi*f*t) + np.random.normal(0, 1, time*fs)
plt_time_domain(data, fs)
plt_fft_img(data, fs)

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

BTS141TC 智能低电压端电源开关 12A 60V TO-263-3

BTS141TC是英飞凌(Infineon)推出的一款选用SmartSIPMOS内建芯片技术的N通道垂直功率FET。它供给嵌入式维护功用,如逻辑电平输入输入维护(ESD)、具有锁定功用的热关断过载维护、短路维护和过电压维护等。最大电流能够经过外部电阻调节&#xf…

JL-29 雪深监测仪

安装注意事项 (1)将支架安装于水平地面上,使用紧固器件使支架牢固的固定于水平地面,支架的“水平安装”至关重要,切不可随意。 (2)将太阳能固定臂,激光头采集固定臂,电…

Unity 布局 HorizontalLayoutGroup 多行 换行

演示Gif: 现象: 子元素宽度不同,超出父元素后不会换行 GridLayout则是固定宽度也不能用, 需求 水平排版的同时,超出父级后换行 代码: 催更就展示[狗头]

云镓半导体:集成OA与ERP系统,构建“一站式”审批流

01 客户背景 云镓半导体成立于2021年,是一家专业从事氮化镓功率器件及解决方案的设计公司,现有上海、杭州、深圳三个研发及办事机构。 公司核心团队具有多年功率器件量产经验,具备工艺开发、器件定制、IC设计、封装测试、可靠性评估和系统应用…

计算机服务器中了faust勒索病毒怎么办?Faust勒索病毒解密工具流程步骤

对于现在的众多企业来说,计算机服务器成为大家工作中不可或缺的工具,利用计算机服务器可以更好地开展各项工作业务,企业计算机服务器也大大提升了企业生产运营效率。然而,网络技术的发展也为企业的数据安全带来威胁,近…

Linux IO的奥秘:深入探索数据流动的魔法

Linux I/O(输入/输出)系统是其核心功能之一,负责处理数据在系统内部及与外界之间的流动。为了优化这一流程,Linux进行了一系列努力和抽象化,以提高效率、灵活性和易用性。🚀 1. 统一的设备模型 Linux将所…

数据绑定多级对象属性时的报错解决

数据绑定多级对象属性时的报错解决 (1)例子如下: (2)当syncObjForm被后台数据赋值时,会产生报错: (3)原因就是: 模板在渲染时,读取对象中的某个…

SimOne协作版正式发布!“云+端”一体化,加速自动驾驶技术迭代!

创新的“云端”一体化方案 让11大于2 两端登录 场景共享 本地算法 云端并发 颠覆传统自动驾驶研发工作方式 加速自动驾驶算法迭代与优化 SimOne协作版正式发布! 什么是SimOne协作版? SimOne协作版,一个创新的“云端”一体化产品。 它将…

JavaScript逆向爬虫——无限debugger的原理与绕过

debugger 是 JavaScript 中定义的一个专门用于断点调试的关键字,只要遇到它,JavaScript 的执行便会在此处中断,进入调试模式。 有了 debugger 这个关键字,就可以非常方便地对 JavaScript 代码进行调试,比如使用 JavaSc…

大创项目推荐 深度学习+opencv+python实现昆虫识别 -图像识别 昆虫识别

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数:2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 4 MobileNetV2网络5 损失函数softmax 交叉熵5.1 softmax函数5.2 交叉熵损失函数 6 优化器SGD7 学…

【javaScript面试题】2023前端最新版javaScript模块,高频24问

🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:博主收集的关于javaScript的面试题 目录 一、2023javaScript面试题精选 1.js的数据类型…

hcia datacom课程学习(6):路由与路由表基础

1.路由的作用 不同网段的设备互相通信需要具有路由功能的设备进行转发 具有路由功能的设备不一定是路由器,交换机可以有路由功能,同样的,路由器也可以有交换功能,像家里常用的路由器就是集路由功能和交换功能于一体的 2.路由相…

将本地代码提交到gitee上

本地代码提交Gitee 背景本地代码提交1. 在Gitee创建仓库2.点击克隆/下载3.本地找一个空白的文件夹初始化git仓库4.推送本地代码** 背景 在我们日常开发中有时代码写了好多才想起提交到gitee上,还有的时直接在github上或者gitee上拉取的别人的项目做框架,想把本地的代码提交到g…

【CicadaPlayer】demuxer_service中DASH的简单理解

DASH协议 dash 是属于demuxer模块的 MPEG-DASH是一种自适应比特率流技术,可根据实时网络状况实现动态自适应下载。和HLS, HDS技术类似, 都是把视频分割成一小段一小段, 通过HTTP协议进行传输,客户端得到之后进行播放;不同的是MPEG-DASH支持MPEG-2 TS、MP4(最新的HLS也支持…

数据结构OJ题——栈和队列

1. 用栈实现队列(OJ链接) 题目描述:请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty) void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回…

linux学习:内存(栈,堆,数据段,代码段)

目录 内存 栈内存 堆内存 数据段 代码段 注意 堆 例子 内存 Linux 操作系统为了更好更高效地使用内存,将 实际物理内存进行了映射,对应用程序屏蔽了物理内存的具体细节,有利于简化程序的编写 和系统统一的管理。 假设你正在使用的…

苍穹外卖jwt令牌p10

点击小虫(进入断点调试),打上断点,然后前端点击登录(此时前端的数据会作为参数传入): 光标放在字段上还会显示接收到的数据: 若想程序在所希望的地方停止,可以添加断点&a…

NetSuite中Inactive Item后相关Transaction是否能继续?

今天的标题以一个问句出发~灵感来源于我们在一个项目上要准备数据切换的事宜,我们需要明确,将一个物料Inactive之后,涉及到该Item的Transaction是否还能在业务或者财务处理的环节继续操作~基本的测试分三种场景&#x…

【Linux】基础IO----系统文件IO 文件描述符fd 重定向

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:了解在Linux下的系统文件IO,知道什么是文件描述符,什么是重定向 > 毒鸡汤:白日莫闲过,青春不再来。 …

实验2-1 进程相关的系统调用

一、实验目的 学习Linux中与进程控制相关的系统调用,加深对进程、进程树等概念的理解。 二、实验内容 1. 学习使用以下几类系统调用,进行编程练习 获取进程的信息,getpid(), getppid() 父子进程控制,fork(),wai…