在上一节中实现原始数据在时域的回放,这样有助于直观的认识采集的数据,以便进一步的分析和处理,数据处理时,我们可以从波形中提取和时间及强度相关的信息,并由此推演出其它物理量。
同时,我们也知道时域的波,是多个波叠加的结果,在某一时刻,为多个震动在此时刻的叠加,这部分知识,可以回顾一下这篇文章,傅立叶变换应用与性质。
参考:傅立叶变换应用与性质(https://blog.csdn.net/viswang/article/details/80727833)
如下图所示
映射到多个脏象上,那么可以认为此时的脉搏波,在这一时刻,为多个脏象震动叠加到血液上的结果,因此,通过频域分析,就可以了解到多个脏象震动的情况,从而提取到多个脏象频率及强度相关的信息,对于某个脏象可以单独把这个频率的相关的波单独提取出来,并由此推演出其它物理量。
本节只进行时域到频域的变换,直观的认识一下,由于我们使用原始数据只是一个简单的测量值,在测量过程中由于有没有出错,有没有误差我们不得而知,因此此次不涉及单独频率的反变换,后续章节将讨论反变换及误差问题。
时域到频域的变换需要进行如下操作:
A 对的量心率进行FFT变换,既对RawY_win[ ] 进行变换
B 绘图,实现动态效果
1、Python时域波形显示示例
A 对的量心率进行FFT变换,既对RawY_win[ ] 进行变换
导入numpy库
import numpy as np
FFT变换
xf = np.fft.fft(RawY_Win)
B 绘图,实现动态效果
分割窗口,时域放上面
plt.subplot(2,1,1) #表示将整个图像窗口分为2行1列, 当前位置为1
plt.ylim((0, 1000))
plt.plot(RawX_Win,RawY_Win,"b--",linewidth=1)
分割窗口,频域放下面
plt.subplot(2,1,2) #表示将整个图像窗口分为2行1列, 当前位置为2
plt.ylim((-10000, 10000))
plt.plot(xf,"b--",linewidth=1)
2、脉搏波波形显示(时域)完整程序
# -*- coding: utf-8 -*-
"""
@author: viswang@163.com
"""
import re
from matplotlib import pyplot as plt
import numpy as np
RawY_Win = [555]*400
RawX_Win = [n for n in range(1, 401)]
with open('Plusedatald0517.txt', 'r') as f:
while True:
line = f.readline() # 逐行读取
lineS=line.startswith('S', 2,3) #leading 'S' for sensor data
# lineB=line.startswith('B', 2,3) #leading 'B' for BPM data
# lineQ=line.startswith('Q', 2,3) #leading 'Q' means IBI data
if lineS:
# print(lineS)
# print(re.findall(r'\d+', line)) #cut off the leading 'S'
Sensor1 = re.findall(r'\d+', line) #convert the string to usable muber
Sensor2 = Sensor1[0]
Sensor3 = int(Sensor2) #convert the string to usable int
#Sensor3 = (1023 - int(Sensor2)) - 212
del RawY_Win[0]
RawY_Win.append(Sensor3)
xf = np.fft.fft(RawY_Win)
plt.clf()
plt.subplot(2,1,1) #表示将整个图像窗口分为2行1列, 当前位置为1
plt.ylim((0, 1000))
plt.plot(RawX_Win,RawY_Win,"b--",linewidth=1)
plt.subplot(2,1,2) #表示将整个图像窗口分为2行1列, 当前位置为2
plt.ylim((-10000, 10000))
plt.plot(xf,"b--",linewidth=1)
plt.draw()
plt.pause(0.0001)
if not line:
break
plt.show() #显示图
写在最后的话,对原始数据进行回放及频域变换,对采集的数据有直观的认识后,才能进一步的分析和处理,其中涉及到多方面的知识及反复迭代。
《难经.六十一难》将四诊概括为:望而知之谓之神、闻而知之谓之圣、问而知之谓之工、切而知之谓之巧,通过脉搏传感器测量心率,就是要实现“巧”为目标。
作为Python以及中医初学者,隐隐的有这种感觉,可以通过《难经.六十一难》为入手点,应用编程手段进行辅助诊断,可以进行如下结合
望而知之–图像分析
闻而知之–语音分析
问而知之–语音互动
切而知之–脉搏分析
有兴趣的朋友,可以邮件沟通:viswang@163.com