优化filter stop
This commit is contained in:
18
Decoder.py
18
Decoder.py
@@ -49,18 +49,9 @@ class Decoder_main(threading.Thread):
|
||||
self.decodingSteps = 0 # 0=停止解码 1=预热 2=解码中 3=解码完成,发送解码结果
|
||||
|
||||
|
||||
self.zmqServer = None
|
||||
self.sliding_filter = None
|
||||
|
||||
self._init_threads()
|
||||
|
||||
def _init_threads(self):
|
||||
"""初始化ZMQ服务和滤波线程"""
|
||||
# 1. 初始化ZMQServer并启动
|
||||
self.zmqServer = zmqServer(device_info=self.device_info)
|
||||
self.zmqServer.start() # 启动ZMQ接收线程
|
||||
|
||||
# 2. 初始化滤波线程(关联ZMQServer的环形缓存)
|
||||
|
||||
self.sliding_filter = SlidingFilter(
|
||||
ring_buffer=self.zmqServer.filterBuffer,
|
||||
n_chan=self.zmqServer.device_info['channel_nums'],
|
||||
@@ -68,8 +59,7 @@ class Decoder_main(threading.Thread):
|
||||
)
|
||||
|
||||
# 注册滤波结果回调(示例:打印数据形状)
|
||||
self.sliding_filter.set_result_callback(self.zmqServer.send_filtered_data)
|
||||
|
||||
self.sliding_filter.filter_result_callback = self.zmqServer.send_filtered_data
|
||||
|
||||
def is_valid_signal(self, data, threshold=1e5): # 判断当前信号是否为有效信号
|
||||
# data: (chans, samples)
|
||||
@@ -196,10 +186,11 @@ class Decoder_main(threading.Thread):
|
||||
while self.Runing:
|
||||
# 当滤波数据大于5秒时,启动滤波线程
|
||||
if self.zmqServer.filterBuffer.GetDataLenCount() > self.device_info['sample_rate'] * 5:
|
||||
algo_log("启动滤波线程", level="DEBUG")
|
||||
self.sliding_filter.start()
|
||||
|
||||
if self.zmqServer.decoder_switch or self.zmqServer.changeTarget:
|
||||
print(f"Decoder_class Switch Detected: {self.zmqServer.decoder_class}")
|
||||
algo_log(f"Decoder_class Switch Detected: {self.zmqServer.decoder_class}", level="DEBUG")
|
||||
self.zmqServer.decoder_switch = False
|
||||
self.zmqServer.changeTarget = False
|
||||
self.reset_state() # 切换前先统一清理旧状态
|
||||
@@ -210,7 +201,6 @@ class Decoder_main(threading.Thread):
|
||||
# self.zmqClient.send_to_all('sync', self.zmqClient.state)
|
||||
self.zmqServer.state_mode = 'rest'
|
||||
|
||||
# --- 取数优先:先执行 decoder(消费环形缓冲),再处理 plot/report 等重负载 ---
|
||||
try:
|
||||
if self.decoder_class == 'ssvep' or self.decoder_class == 'pvs':
|
||||
self.decoder_SSVEP()
|
||||
|
||||
Reference in New Issue
Block a user