test
This commit is contained in:
@@ -295,12 +295,12 @@ class Decoder_main(threading.Thread):
|
|||||||
if self.zmqServer.StartDecode:
|
if self.zmqServer.StartDecode:
|
||||||
self.zmqServer.StartDecode = False
|
self.zmqServer.StartDecode = False
|
||||||
self.decodingSteps = 1
|
self.decodingSteps = 1
|
||||||
self.zmqServer.paradigmBuffer.ResetAllPara()
|
self.zmqServer.paradigmBuffer.resetAllPara()
|
||||||
print('启动预测')
|
print('启动预测')
|
||||||
if self.zmqServer.paradigmBuffer.GetDataLenCount() < 50:
|
if self.zmqServer.paradigmBuffer.GetDataLenCount() < 50:
|
||||||
time.sleep(0.005)
|
time.sleep(0.005)
|
||||||
return
|
return
|
||||||
if self.zmqServer.get_Impedance != False: # 阻抗检测状态不解码
|
if self.zmqServer.open_Impedance: # 阻抗检测状态不解码
|
||||||
return
|
return
|
||||||
data = self.zmqServer.paradigmBuffer.getDataViaSSVEP(50)
|
data = self.zmqServer.paradigmBuffer.getDataViaSSVEP(50)
|
||||||
data = data[:self.n_chan, :]
|
data = data[:self.n_chan, :]
|
||||||
@@ -636,7 +636,7 @@ class Decoder_main(threading.Thread):
|
|||||||
def reset_state(self):
|
def reset_state(self):
|
||||||
"""清空解码器状态和缓存数据"""
|
"""清空解码器状态和缓存数据"""
|
||||||
# 重置设备层缓存
|
# 重置设备层缓存
|
||||||
self.thread_data_server.reset_state()
|
self.zmqServer.reset_state()
|
||||||
|
|
||||||
# 重置解码状态
|
# 重置解码状态
|
||||||
self.decodingSteps = 0
|
self.decodingSteps = 0
|
||||||
|
|||||||
@@ -14,4 +14,8 @@ Debug_64ch_Decoder_Optimize is an updated version that fixes several issues and
|
|||||||
7. decoder_class切换时,数据重置、各类参数重置
|
7. decoder_class切换时,数据重置、各类参数重置
|
||||||
|
|
||||||
# update
|
# update
|
||||||
2026年6月5日13:55:34
|
2026年6月5日13:55:34
|
||||||
|
|
||||||
|
# 遗留问题
|
||||||
|
1. 之前当处于阻抗检测状态时,Decoder在空跑。
|
||||||
|
2. 当前无法判断是否处于阻抗检测状态。
|
||||||
@@ -55,7 +55,7 @@ def receive_messages(socket, stop_event):
|
|||||||
|
|
||||||
print("接收线程已停止。")
|
print("接收线程已停止。")
|
||||||
|
|
||||||
def zero_mq_client(server_address="tcp://192.168.254.101:8099"):
|
def zero_mq_client(server_address="tcp://127.0.0.1:8099"):
|
||||||
"""
|
"""
|
||||||
ZeroMQ客户端函数,用于与服务器通信
|
ZeroMQ客户端函数,用于与服务器通信
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
from scipy import signal
|
from scipy import signal
|
||||||
import threading
|
import threading
|
||||||
|
from logs.log import algo_log
|
||||||
|
|
||||||
class ParadigmRingBuffer:
|
class ParadigmRingBuffer:
|
||||||
def __init__(self, n_chan, n_points):
|
def __init__(self, n_chan, n_points):
|
||||||
@@ -19,7 +20,8 @@ class ParadigmRingBuffer:
|
|||||||
## append buffer and update current pointer
|
## append buffer and update current pointer
|
||||||
def appendBuffer(self, data):
|
def appendBuffer(self, data):
|
||||||
if self.nUpdate == self.n_points:
|
if self.nUpdate == self.n_points:
|
||||||
raise Exception("Buffer is full")
|
# raise Exception("Buffer is full")
|
||||||
|
algo_log("Buffer is full", record_once=True)
|
||||||
|
|
||||||
n = data.shape[1]
|
n = data.shape[1]
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class zmqServer(threading.Thread):
|
|||||||
|
|
||||||
# 原有业务状态变量
|
# 原有业务状态变量
|
||||||
# self.get_Impedance = False # 是否返回阻抗值
|
# self.get_Impedance = False # 是否返回阻抗值
|
||||||
# self.open_Impedance = None # 是否开启阻抗检测功能
|
self.open_Impedance = False # 是否开启阻抗检测功能
|
||||||
self.StartDecode = False # false 停止解码,true=开始解码
|
self.StartDecode = False # false 停止解码,true=开始解码
|
||||||
self.StartTrain = False # False未进入训练状态,True处于训练状态
|
self.StartTrain = False # False未进入训练状态,True处于训练状态
|
||||||
self.state_mode = None # 'train'为训练状态,’rest'为休息状态,'test'为测试状态
|
self.state_mode = None # 'train'为训练状态,’rest'为休息状态,'test'为测试状态
|
||||||
@@ -36,6 +36,7 @@ class zmqServer(threading.Thread):
|
|||||||
# 范式数据缓存
|
# 范式数据缓存
|
||||||
self.paradigmBuffer = ParadigmRingBuffer(self.device_info['channel_nums'], self.device_info['sample_rate'] * 10)
|
self.paradigmBuffer = ParadigmRingBuffer(self.device_info['channel_nums'], self.device_info['sample_rate'] * 10)
|
||||||
self.filterBuffer = FilterRingBuffer(self.device_info['channel_nums'], self.device_info['sample_rate'] * 10)
|
self.filterBuffer = FilterRingBuffer(self.device_info['channel_nums'], self.device_info['sample_rate'] * 10)
|
||||||
|
self.paradigmBufferLock= threading.Lock()
|
||||||
|
|
||||||
|
|
||||||
# 命令与数据通信
|
# 命令与数据通信
|
||||||
@@ -111,6 +112,17 @@ class zmqServer(threading.Thread):
|
|||||||
with self._event_lock:
|
with self._event_lock:
|
||||||
self._event_inner_idx = value
|
self._event_inner_idx = value
|
||||||
|
|
||||||
|
def reset_state(self):
|
||||||
|
"""清空采集器状态和缓存数据"""
|
||||||
|
with self.paradigmBufferLock:
|
||||||
|
self.paradigmBuffer.resetAllPara()
|
||||||
|
self.count_events = {}
|
||||||
|
self.epoch_finished = False
|
||||||
|
self.pack_contain_event = False
|
||||||
|
self.event_inner_idx = -1
|
||||||
|
self.interval_inited = False
|
||||||
|
|
||||||
|
|
||||||
def interval_init(self, decoder_class):
|
def interval_init(self, decoder_class):
|
||||||
if decoder_class == 'ssmvep':
|
if decoder_class == 'ssmvep':
|
||||||
interval_epoch = ast.literal_eval(IniRead('system', 'SSMVEP_IntervalEpoch'))
|
interval_epoch = ast.literal_eval(IniRead('system', 'SSMVEP_IntervalEpoch'))
|
||||||
@@ -199,15 +211,18 @@ class zmqServer(threading.Thread):
|
|||||||
self.running = False
|
self.running = False
|
||||||
elif method == "rest": #休息状态
|
elif method == "rest": #休息状态
|
||||||
self.state_mode = 'rest'
|
self.state_mode = 'rest'
|
||||||
|
elif method == "impedance":
|
||||||
|
if params == 1:
|
||||||
|
self.open_Impedance = True # 开启阻抗
|
||||||
|
# self.get_Impedance = True # 返回阻抗
|
||||||
|
elif params == 2:
|
||||||
|
self.open_Impedance = False # 关闭阻抗
|
||||||
else:
|
else:
|
||||||
algo_log(f"未知命令:{method}", level="WARNING")
|
algo_log(f"未知命令:{method}", level="WARNING")
|
||||||
|
|
||||||
# elif method == "getReport":
|
# elif method == "getReport":
|
||||||
# self.getReport = True
|
# self.getReport = True
|
||||||
# elif method == "impedance":
|
|
||||||
# if params == 1:
|
|
||||||
# self.open_Impedance = True # 开启阻抗
|
|
||||||
# self.get_Impedance = True # 返回阻抗
|
|
||||||
# elif params == 2:
|
# elif params == 2:
|
||||||
# self.open_Impedance = False # 关闭阻抗
|
# self.open_Impedance = False # 关闭阻抗
|
||||||
# self.get_Impedance = False # 停止返回阻抗
|
# self.get_Impedance = False # 停止返回阻抗
|
||||||
@@ -251,7 +266,7 @@ class zmqServer(threading.Thread):
|
|||||||
self.paradigmBuffer.appendBuffer(data_np)
|
self.paradigmBuffer.appendBuffer(data_np)
|
||||||
self.filterBuffer.appendBuffer(data_np)
|
self.filterBuffer.appendBuffer(data_np)
|
||||||
|
|
||||||
algo_log(f"数据写入成功:shape={data_np.shape}, 范围=[{data_np.min():.2f}, {data_np.max():.2f}] μV", level="DEBUG")
|
# algo_log(f"数据写入成功:shape={data_np.shape}, 范围=[{data_np.min():.2f}, {data_np.max():.2f}] μV", level="DEBUG")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
algo_log(f"数据处理失败:{str(e)}", level="ERROR")
|
algo_log(f"数据处理失败:{str(e)}", level="ERROR")
|
||||||
|
|||||||
Reference in New Issue
Block a user