使用Jupyter Notebook进行波形分析

首先拿到了振动传感器的数据

解释数据:
我们知道机械波分为横波竖波、以及复杂波,现实世界中全部为复杂波——上下左右都有振动。
传感器每秒记录10240条数据(**每分钟仅记录前30秒的数据**),对应X轴Y轴、以及Z轴的数据。我们这次仅分析一天 Z轴的数据。

由于一秒10240条数据一天的数据量就是
10240*30s*60min*24h = 442368000条记录,这个数据量挺大的,如果将一天的数据都画出波形图,会导致没有任何细节,整个图都会缩在一起。所以我这里先做了每分钟的均方根处理,然后每分钟去画图能够清晰的展示出每天哪个时间段有较强的振动。

--------------------------------接下来看代码以及效果----------------------------

#以下是导入的包、以及用到的方法import numpy as np
from scipy.fftpack import fft,ifft
import matplotlib.pyplot as plt
import os
import math#计算均方根
def get_rms(records):"""均方根值 反映的是有效值而不是平均值"""return math.sqrt(sum([x ** 2 for x in records]) / len(records))#读取文件
def readname():filePath = '/root/Rone/waveData/data'name = os.listdir(filePath)return name

接着将一天的数据上传到服务器指定的文件夹 ——计算每分钟的均方根,以及将结果保存(这里我打印了出来,个人感觉比保存到文件中更方便去处理)

#求每分钟的RMS
names = readname()
arr = []
for i in names:tempData =  np.loadtxt("/root/Rone/waveData/data/"+i)rmsData = get_rms(tempData)arr.append(rmsData)print(i)file=open('/root/Rone/waveData/resultRMS.txt','w')
file.write('\n'.join(str(arr)))
file.close() print("=============")
for i in arr:print(i)

下图是部分均方根的执行结果
使用matlab库画出一天的均方根图

dataRMS =  np.loadtxt("/root/Rone/waveData/resultRMS.txt")
x = np.linspace(0,1313,1313)plt.subplot(4,1,1)
fig=plt.gcf()
fig.set_size_inches(128.5, 100.5)
plt.plot(x,dataRMS[0:1313])plt.title('24h Data Analysis')
plt.xlabel('t')
plt.ylabel('x')x2 = np.linspace(500,1313,813)
#print(x2)
print(dataRMS.size)
fig=plt.gcf()
fig.set_size_inches(20.5, 10.5)

结果图(16点——第二天14点的数据)我们可以看出峰值高的是下午5点左右 以及第二天8-10点左右。(使用均方根后出现一个问题——没有了负值,这是因为均方根是经过平方后再开方导致的)。均方根只会把差距放大,不能代表波形的振幅
接下来我们就去找异常值。

#查询16点到16.30点的数据 total
names = readname()
arr = np.zeros(1)
for i in names:tempData =  np.loadtxt("/root/Rone/waveData/data/"+i)##print(tempData)arr = np.concatenate((arr,tempData),axis=0)if i =='20190909_165228.txt':#break;print(i)
print(len(arr))
lenthData = len(arr)
np.savetxt(r"/root/Rone/waveData/16_17_hour.txt",arr)x = np.linspace(0,lenthData,lenthData)#print(x)
plt.subplot(4,1,1)
plt.plot(x,arr[0:])fig=plt.gcf()
fig.set_size_inches(158.5, 130.5)

#查询16.30点到17.00点的数据 total
names = readname()
arr = np.zeros(1)
rootPath = "/root/Rone/waveData/data/"
# 52 58.txtfor i in (53,59):tempData =  np.loadtxt(rootPath+"20190909_16"+str(i)+"58.txt")##print(tempData)arr = np.concatenate((arr,tempData),axis=0)if i =='20190909_170058.txt':#break;print(i)
print(len(arr))
lenthData = len(arr)
#np.savetxt(r"/root/Rone/waveData/16_30_17_00_hour.txt",arr)x = np.linspace(0,lenthData,lenthData)plt.subplot(4,1,1)
plt.plot(x,arr[0:])fig=plt.gcf()
fig.set_size_inches(158.5, 130.5)

#查询17.00点到17.30点的数据 total
names = readname()
arr = np.zeros(1)
rootPath = "/root/Rone/waveData/data/"
# 52 58.txtfor i in range(0,9):tempData =  np.loadtxt(rootPath+"20190909_170"+str(i)+"58.txt")arr = np.concatenate((arr,tempData),axis=0)if i =='20190909_170958.txt':#break;print(i)for i in range(10,30):#20190909_172958tempData =  np.loadtxt(rootPath+"20190909_17"+str(i)+"58.txt")arr = np.concatenate((arr,tempData),axis=0)if i =='20190909_170058.txt':#break;print(i)
print(len(arr))
lenthData = len(arr)
#np.savetxt(r"/root/Rone/waveData/16_30_17_00_hour.txt",arr)x = np.linspace(0,lenthData,lenthData)#print(x)
plt.subplot(4,1,1)
plt.plot(x,arr[0:])fig=plt.gcf()
fig.set_size_inches(158.5, 130.5)

上图有断点数据 很大的可能是因为传感器只有每分钟前30秒的数据。
接着查询

#查询21.40点到22.50点的数据 total
names = readname()
arr = np.zeros(1)
rootPath = "/root/Rone/waveData/data/"for i in range(40,41):tempData =  np.loadtxt(rootPath+"20190909_21"+str(i)+"58.txt")arr = np.concatenate((arr,tempData),axis=0)print(i)
#lenthData = len(arr)
lenthData = 10240x = np.linspace(0,1,10240)#原始波形
plt.subplot(4,1,1)
plt.plot(x,arr[0:10240])
#加窗
w = np.hanning(10240)
plt.subplot(4,1,2)
plt.plot(x,w)#画出 hanning窗
z = w*arr[0:10240]
plt.subplot(4,1,3)
plt.plot(x,z)#加hanning窗后的波形fig=plt.gcf()
fig.set_size_inches(30.5, 16.5)

接着进傅里叶转换


yf1=abs(fft(z[0:]))        #归一化处理
yf2 = yf1[range(5120)]  #由于对称性,只取一半区间xf = np.arange(5120)
plt.subplot(222)
plt.plot(xf[0:],yf2[0:])
plt.title('FFT',fontsize=12)  fig=plt.gcf()
fig.set_size_inches(158.5, 130.5)

本篇到此结束,下一篇我分享一下低通滤波后的结果+傅里叶展开后的特征图形。

Python 波形处理相关推荐

  1. python波形峰值检测

    python波形峰值检测 1.效果图 2.简介 获取一段波形的峰值,可以通过科学计算库scipy来实现, 函数: scipy.signal.find_peaks(x, height=None, thr ...

  2. python 波形发生器_python实现简单函数发生器

    最近学校又抽风把我自动化系的苦逼童鞋留下做课设,简直无聊到爆的-->用VB实现函数发生器,(语言不限制) 大伙不知从哪搞来的MATLAB版本,于是几十个人就在这基础上修修改改蒙混过关了,可我实在 ...

  3. python 波形包络线_Python在信号与系统中的应用(1)——Hilbert变换,Hilbert在单边带包络检波的应用,FIR_LPF滤波器设计,还有逼格高高的FM(PM)调制...

    多谢董老师,董老师是个好老师! 心情久久不能平静,主要是高频这门课的分析方法实在是让我难以理解,公式也背不过,还是放放吧. 最近厌恶了Matlab臃肿的体积和频繁的读写对我的Mac的损害,所以学习了一 ...

  4. python 波形包络线_一个简单的波形包络提取算法

    最近做了一个项目来提取语音信号包络波形,因此,花一些时间来研究各种包络提取算法. 所谓包络检测被称为振幅解调,在许多领域都有重要的应用.它假设载波信号被确定,所以,通常的方式同步解调,优选以这样的方式 ...

  5. python 波形发生_事件与信号

    事件 Event 所有的GUI程序都是事件驱动的.事件主要由用户触发,但也可能有其他触发方式:例如网络连接.window manager或定时器.当我们调用QApplication的exec_()方法 ...

  6. 转:Python处理音频信号实战 : 手把手教你实现音乐流派分类和特征提取

    参考链接: https://www.jiqizhixin.com/articles/2019-01-11-25 1986年出版的<音乐心理学>一书中说到"人类和音乐遵循共同的规律 ...

  7. Python处理音频信号实战 : 手把手教你实现音乐流派分类和特征提取

    原文:https://flashgene.com/archives/17964.html Posted on 2019年1月12日by Sanda 1986年出版的<音乐心理学>一书中说到 ...

  8. MIT-BIH使用(四)使用WFDB批量读取MIT-BIH

    目录 前言 1.一口气运行看看! 2.代码注释 结束语 前言 刚拿到这个数据集,甚至都不知道应该如何打开查看里边儿的内容,然后经过查找资料拿到了 MIT-BIH介绍(三) 中原生的读取方式,直接且粗暴 ...

  9. 基于Python的MORSE音频的波形和频谱(二)

    1.需求分析   现有一个MORSE.wav的音频文件,要求使用Python读取该文件画出其波形和频谱. 2.代码实现 #coding:utf-8 import wave import numpy a ...

最新文章

  1. mongodb log ,warning: chunk is larger than 65203623200 bytes because of key
  2. .net c# 序列化和反序列
  3. mysql日期时间函数(常用的)
  4. Thread Safety in the Standard C++ Library
  5. js 实时计算文本框字数限制
  6. 不同国家的视力表也不一样!| 今日趣图
  7. codeforces1303 F. Number of Components(并查集+添_正序、删_逆序)
  8. LeetCode MySQL 1607. 没有卖出的卖家
  9. 自动轮播图html代码适应手机,JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)...
  10. python读取cad_SmartSoft中用C#.Net实现AutoCAD块属性提取|python基础教程|python入门|python教程...
  11. 软件工程导论01-概论
  12. win10创建新的计算机用户名和密码,Win10怎么新建账户 Win10创建新用户图文教程...
  13. 图像处理笔记(0)---- 图像空间知识
  14. 高并发访问数据库引发的故障
  15. [CSS] css使用first-child 和last-child 实现三条杠效果
  16. CCSP201902纸牌计数——解题报告
  17. OSX: 命令行制作U盘Recovery HD
  18. 夺宝观察:从一元夺宝用户的舆论看行业发展
  19. 带账号、密码ssh的脚本
  20. ie8和html5的兼容性,ie8网页兼容性不完全指南

热门文章

  1. 获取当前系统使用的语言 OC
  2. Python批量格式化文件名为000xxx.jpg
  3. kubernetes之亲合性调度
  4. 【51nod_3121】小陶与杠铃片
  5. 赴台旅学前奏~台湾旅游知识普及篇
  6. as转html5工具,Flash资源转换工具
  7. elementUI switch 开关状态更新到数据库
  8. 读稻盛和夫《活法》-现代人的修行之路
  9. DOM属性的增删改、属性的其他操作及DOM事件
  10. JavaScript作用域的知识点