体积描记器不适用于数字信号处理

问题描述

我用 Raspberry pi(CM3+)Maxim sensor(max30102) 制作了一个‘photoplethysmograph’

我通过 Raspberry piMaxim sensorI2C 之间进行连接。 我写了 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 (将#修改为@)