问题描述
我用 Raspberry pi(CM3+)
和 Maxim sensor(max30102)
制作了一个‘photoplethysmograph’。
我通过 Raspberry pi
在 Maxim sensor
和 I2C
之间进行连接。
我写了 python
程序。我想在 canvas
中显示‘photoplethysmograpy’。
首先,我成功显示,但出现噪音。(program0)
其次,我尝试使用数字信号处理来去除噪声。
sampling frequency: 100Hz
band pass filter :0.1Hz : 10Hz
我用带通滤波器(progmam1)编写程序 但是,出现以下错误消息并且程序不动。 我想改进程序1。我该怎么办?
错误信息:
bad screen distance "[0.01302979 1.31654249 1.30368494 0.03770999 2.069"
程序0
enter code here
import tkinter as tk
import threading
import time
import max30102
class Test():
def __init__(self):
self.root = tk.Tk()
self.root.geometry("800x600")
self.flag = True
self.c0 = tk.Canvas(self.root,bg="white",widt=760,height=160)
self.c0.grid(row=0,column=0)
self.c1 = tk.Canvas(self.root,height=160)
self.c1.grid(row=1,column=0)
self.buttonB = tk.Button(self.root,text="start",command=self.measure)
self.buttonB.grid(row=2,column=0)
#self.root.grid()
self.l0 = self.c0.create_line(0,80,fill="blue")
self.l1 = self.c1.create_line(0,fill="blue")
self.l2 = self.c0.create_line(0,fill="red")
self.root.mainloop()
def measure(self):
th0 = threading.Thread(target=self.sensor)
if self.buttonB['text'] == "start":
self.buttonB['text'] = "stop"
self.flag = True
th0.start()
else:
self.buttonB['text'] = "start"
self.flag = False
def sensor(self):
m = max30102.MAX30102()
while self.flag:
red,ir = m.read_fifo()
print('RED'+str(red))
print('IR'+str(ir))
self.add_point0(self.l0,(red/2000))
self.add_point1(self.l1,(ir/2000))
self.c0.xview_moveto(1.0)
self.c1.xview_moveto(1.0)
time.sleep(0.01)
m.shutdown()
def add_point0(self,line,y):
coords = self.c0.coords(line)
x = coords[-2] + 1
coords.append(x)
coords.append(y)
coords = coords[-1500:]
self.c0.coords(line,*coords)
self.c0.configure(scrollregion=self.c0.bbox("all"))
def add_point1(self,y):
coords = self.c1.coords(line)
x = coords[-2] + 1
coords.append(x)
coords.append(y)
coords = coords[-1600:]
self.c1.coords(line,*coords)
self.c1.configure(scrollregion=self.c1.bbox("all"))
app=Test()
程序 1
enter code here
import tkinter as tk
import threading
import time
import max30102
import scipy.signal as signal
class Test():
def __init__(self,master):
self.master = master
self.master.geometry("800x600")
self.frame = tk.Frame(self.master)
self.flag = True
self.c0 = tk.Canvas(self.frame,column=0)
self.c1 = tk.Canvas(self.frame,column=0)
self.buttonB = tk.Button(self.frame,column=0)
self.l0 = self.c0.create_line(0,fill="red")
self.frame.grid()
def measure(self):
th0 = threading.Thread(target=self.sensor)
if self.buttonB['text'] == "start":
self.buttonB['text'] = "stop"
self.flag = True
th0.start()
else:
self.buttonB['text'] = "start"
self.flag = False
def sensor(self):
m = max30102.MAX30102()
a,b = signal.buttord([0.002,0.2],[0.001,0.3],3,40)
y0 = []
y1 = []
while self.flag:
red,ir = m.read_fifo()
print('RED'+str(red))
print('IR'+str(ir))
#self.add_point0(self.l0,(red/2000))
#self.add_point1(self.l1,(ir/2000))
y0.append(red)
y1.append(ir)
if len(y0) >= 100:
y0_digital = signal.lfilter(b,a,y0)
y1_digital = signal.lfilter(b,y1)
self.add_point0(self.l0,y0_digital/2000)
self.add_point1(self.l1.y1_digital/2000)
self.c0.xview_moveto(1.0)
self.c1.xview_moveto(1.0)
y0.pop(0)
y1.pop(0)
time.sleep(0.01)
m.shutdown()
def add_point0(self,*coords)
self.c1.configure(scrollregion=self.c1.bbox("all"))
def main():
root = tk.Tk()
app = Test(root)
root.mainloop()
if __name__ == '__main__':
main()
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)