Python 波形处理
使用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 波形处理相关推荐
- python波形峰值检测
python波形峰值检测 1.效果图 2.简介 获取一段波形的峰值,可以通过科学计算库scipy来实现, 函数: scipy.signal.find_peaks(x, height=None, thr ...
- python 波形发生器_python实现简单函数发生器
最近学校又抽风把我自动化系的苦逼童鞋留下做课设,简直无聊到爆的-->用VB实现函数发生器,(语言不限制) 大伙不知从哪搞来的MATLAB版本,于是几十个人就在这基础上修修改改蒙混过关了,可我实在 ...
- python 波形包络线_Python在信号与系统中的应用(1)——Hilbert变换,Hilbert在单边带包络检波的应用,FIR_LPF滤波器设计,还有逼格高高的FM(PM)调制...
多谢董老师,董老师是个好老师! 心情久久不能平静,主要是高频这门课的分析方法实在是让我难以理解,公式也背不过,还是放放吧. 最近厌恶了Matlab臃肿的体积和频繁的读写对我的Mac的损害,所以学习了一 ...
- python 波形包络线_一个简单的波形包络提取算法
最近做了一个项目来提取语音信号包络波形,因此,花一些时间来研究各种包络提取算法. 所谓包络检测被称为振幅解调,在许多领域都有重要的应用.它假设载波信号被确定,所以,通常的方式同步解调,优选以这样的方式 ...
- python 波形发生_事件与信号
事件 Event 所有的GUI程序都是事件驱动的.事件主要由用户触发,但也可能有其他触发方式:例如网络连接.window manager或定时器.当我们调用QApplication的exec_()方法 ...
- 转:Python处理音频信号实战 : 手把手教你实现音乐流派分类和特征提取
参考链接: https://www.jiqizhixin.com/articles/2019-01-11-25 1986年出版的<音乐心理学>一书中说到"人类和音乐遵循共同的规律 ...
- Python处理音频信号实战 : 手把手教你实现音乐流派分类和特征提取
原文:https://flashgene.com/archives/17964.html Posted on 2019年1月12日by Sanda 1986年出版的<音乐心理学>一书中说到 ...
- MIT-BIH使用(四)使用WFDB批量读取MIT-BIH
目录 前言 1.一口气运行看看! 2.代码注释 结束语 前言 刚拿到这个数据集,甚至都不知道应该如何打开查看里边儿的内容,然后经过查找资料拿到了 MIT-BIH介绍(三) 中原生的读取方式,直接且粗暴 ...
- 基于Python的MORSE音频的波形和频谱(二)
1.需求分析 现有一个MORSE.wav的音频文件,要求使用Python读取该文件画出其波形和频谱. 2.代码实现 #coding:utf-8 import wave import numpy a ...
最新文章
- mongodb log ,warning: chunk is larger than 65203623200 bytes because of key
- .net c# 序列化和反序列
- mysql日期时间函数(常用的)
- Thread Safety in the Standard C++ Library
- js 实时计算文本框字数限制
- 不同国家的视力表也不一样!| 今日趣图
- codeforces1303 F. Number of Components(并查集+添_正序、删_逆序)
- LeetCode MySQL 1607. 没有卖出的卖家
- 自动轮播图html代码适应手机,JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)...
- python读取cad_SmartSoft中用C#.Net实现AutoCAD块属性提取|python基础教程|python入门|python教程...
- 软件工程导论01-概论
- win10创建新的计算机用户名和密码,Win10怎么新建账户 Win10创建新用户图文教程...
- 图像处理笔记(0)---- 图像空间知识
- 高并发访问数据库引发的故障
- [CSS] css使用first-child 和last-child 实现三条杠效果
- CCSP201902纸牌计数——解题报告
- OSX: 命令行制作U盘Recovery HD
- 夺宝观察:从一元夺宝用户的舆论看行业发展
- 带账号、密码ssh的脚本
- ie8和html5的兼容性,ie8网页兼容性不完全指南