dev 1
This commit is contained in:
75
Decoder.py
75
Decoder.py
@@ -21,8 +21,8 @@ from SSVEP.dwfbcca import FbccaDw
|
||||
from Tools.plot_MI_EEG import plotMain
|
||||
from collections import deque
|
||||
|
||||
class Decoder_main(threading.Thread):
|
||||
def __init__(self):
|
||||
class Decoder_main(threading.Thread, device_type):
|
||||
def __init__(self, device_type=None):
|
||||
threading.Thread.__init__(self)
|
||||
self.Runing=True
|
||||
self.decoder = None
|
||||
@@ -33,6 +33,11 @@ class Decoder_main(threading.Thread):
|
||||
self.decoder_class = None #解码器类别
|
||||
|
||||
self.decodingSteps = 0 # 0=停止解码 1=预热 2=解码中 3=解码完成,发送解码结果
|
||||
self.device_info = {
|
||||
'device_type': None,
|
||||
'sample_rate': None,
|
||||
'channel_num': None,
|
||||
}
|
||||
|
||||
def connect(self, device_type=None, device_host=None, device_port=None, upper_host=None, upper_port=None):
|
||||
self.DeviceType = device_type if device_type is not None else int(IniRead('system', 'Device_type'))
|
||||
@@ -113,40 +118,40 @@ class Decoder_main(threading.Thread):
|
||||
|
||||
self.parameter_init(8, 30)
|
||||
|
||||
elif decoder_class == 'concentration':
|
||||
self.thread_data_server.interval_inited = False
|
||||
self.n_chan = 6
|
||||
self.win_len = 10
|
||||
self.win_step = 1
|
||||
self.low_threshold, self.high_threshold = ast.literal_eval(IniRead('system', 'concentration_ThresholdValue'))
|
||||
self.calculate = Calculate(self.low_threshold, self.high_threshold, self.fs, self.win_len)
|
||||
self.interval_epoch = [0, 1]
|
||||
self.parameter_init(2, 40)
|
||||
# self.eegQueue moved to Calculate class
|
||||
# elif decoder_class == 'concentration':
|
||||
# self.thread_data_server.interval_inited = False
|
||||
# self.n_chan = 6
|
||||
# self.win_len = 10
|
||||
# self.win_step = 1
|
||||
# self.low_threshold, self.high_threshold = ast.literal_eval(IniRead('system', 'concentration_ThresholdValue'))
|
||||
# self.calculate = Calculate(self.low_threshold, self.high_threshold, self.fs, self.win_len)
|
||||
# self.interval_epoch = [0, 1]
|
||||
# self.parameter_init(2, 40)
|
||||
# # self.eegQueue moved to Calculate class
|
||||
|
||||
elif decoder_class == 'blink':
|
||||
self.n_chan = 2
|
||||
self.l_freq = 0.1 # 带通滤波器低频截止
|
||||
self.h_freq = 8.0 # 带通滤波器高频截止
|
||||
self.total_samples = 0 # 总采样点数
|
||||
self.window_ms = 600 # 检测窗口大小 (ms)
|
||||
self.step_ms = 100 # 滑动步长 (ms)
|
||||
self.window_samples = int(self.window_ms * self.fs / 1000) # 150个样本点
|
||||
self.step_samples = int(self.step_ms * self.fs / 1000) # 25个样本点
|
||||
self.buffer_size = self.window_samples + self.step_samples * 5
|
||||
self.fp1_buffer = deque(maxlen=self.buffer_size)
|
||||
self.fp2_buffer = deque(maxlen=self.buffer_size)
|
||||
self.sample_counter = 0
|
||||
# 预计算滤波器系数,避免在循环中重复设计
|
||||
self.Dmin, self.Dmax, self.EMin, self.EMax, self.jitterwin,self.double_blink_interval,self.double_blink_jitter = ast.literal_eval(IniRead('system', 'blink'))
|
||||
self.blink_count = 0 # 单次眨眼的次数
|
||||
self.last_blink_time = 0 # 上次检测到单次眨眼的时间(样本索引)
|
||||
self.blink_timestamps = deque(maxlen=10) # 记录最近10次 单次眨眼的时间戳
|
||||
self.double_blink_count = 0 # 连续两次眨眼的次数
|
||||
self.double_blink_events = [] # 连续眨眼事件记录
|
||||
self.last_double_blink_time = 0 # 上次检测到连续眨眼的时间戳
|
||||
self.blink_events = []
|
||||
self.blink_b, self.blink_a = signal.butter(4, [self.l_freq / (self.fs / 2), self.h_freq / (self.fs / 2)], btype='band')
|
||||
# elif decoder_class == 'blink':
|
||||
# self.n_chan = 2
|
||||
# self.l_freq = 0.1 # 带通滤波器低频截止
|
||||
# self.h_freq = 8.0 # 带通滤波器高频截止
|
||||
# self.total_samples = 0 # 总采样点数
|
||||
# self.window_ms = 600 # 检测窗口大小 (ms)
|
||||
# self.step_ms = 100 # 滑动步长 (ms)
|
||||
# self.window_samples = int(self.window_ms * self.fs / 1000) # 150个样本点
|
||||
# self.step_samples = int(self.step_ms * self.fs / 1000) # 25个样本点
|
||||
# self.buffer_size = self.window_samples + self.step_samples * 5
|
||||
# self.fp1_buffer = deque(maxlen=self.buffer_size)
|
||||
# self.fp2_buffer = deque(maxlen=self.buffer_size)
|
||||
# self.sample_counter = 0
|
||||
# # 预计算滤波器系数,避免在循环中重复设计
|
||||
# self.Dmin, self.Dmax, self.EMin, self.EMax, self.jitterwin,self.double_blink_interval,self.double_blink_jitter = ast.literal_eval(IniRead('system', 'blink'))
|
||||
# self.blink_count = 0 # 单次眨眼的次数
|
||||
# self.last_blink_time = 0 # 上次检测到单次眨眼的时间(样本索引)
|
||||
# self.blink_timestamps = deque(maxlen=10) # 记录最近10次 单次眨眼的时间戳
|
||||
# self.double_blink_count = 0 # 连续两次眨眼的次数
|
||||
# self.double_blink_events = [] # 连续眨眼事件记录
|
||||
# self.last_double_blink_time = 0 # 上次检测到连续眨眼的时间戳
|
||||
# self.blink_events = []
|
||||
# self.blink_b, self.blink_a = signal.butter(4, [self.l_freq / (self.fs / 2), self.h_freq / (self.fs / 2)], btype='band')
|
||||
|
||||
def parameter_init(self,bandPass_low,bandPass_high):
|
||||
self.interval_epoch = [int(i * self.fs) for i in self.interval_epoch] # epoch截取信息
|
||||
|
||||
Reference in New Issue
Block a user