add filter process

This commit is contained in:
2026-06-08 11:56:42 +08:00
parent 880caa9f7b
commit 4faeae0ff3
5 changed files with 306 additions and 299 deletions

View File

@@ -42,49 +42,33 @@ MODEL_FOLDER = "online_Models"
class Decoder_main(threading.Thread):
def __init__(self, device_info=None):
threading.Thread.__init__(self)
self.device_info = {
'sample_rate': device_info['sample_rate'],
'frame_points': device_info['frame_points'],
'channel_nums': device_info['channel_nums'],
'channel_names': device_info['channel_names'],
'channel_index': device_info['channel_index'],
}
self.device_info = device_info
self.Runing=True
self.decoder = None
self.decoder_class = None #解码器类别
# 与采集设备通信的状态码0为异常1为正常
# self.status_code = 0
# self.device_info['sample_rate'] = 250 # 采样率
# self.energy = 0 # 电量
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()
self.filter = SlidingFilter()
self.zmqServer.start() # 启动ZMQ接收线程
# self.zmqClient = zmqClient(_upper_host, _upper_port)
# self.zmqClient.set_zmq_server(self.zmqServer)
# self.zmqClient.connect()
# 2. 初始化滤波线程关联ZMQServer的环形缓存
self.sliding_filter = SlidingFilter(
ring_buffer=self.zmqServer.filterBuffer,
n_chan=self.zmqServer.device_info['channel_nums'],
srate=self.zmqServer.device_info['sample_rate']
)
# 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'))
# _device_host = device_host if device_host is not None else str(IniRead('system', 'Device_Host'))
# _device_port = device_port if device_port is not None else int(IniRead('system', 'Device_Port'))
# _upper_host = upper_host if upper_host is not None else str(IniRead('system', 'Upper_Host'))
# _upper_port = upper_port if upper_port is not None else int(IniRead('system', 'Upper_Port'))
# if self.DeviceType == 1:
# self.thread_data_server = SunnyLinker64(_device_host, _device_port, self.device_info['sample_rate'], 64, method='tcp')
# self.thread_data_server.host = _device_host
# self.thread_data_server.port = _device_port
# self.thread_data_server.toUv = True
# self.thread_data_server.start()
# 注册滤波结果回调(示例:打印数据形状)
self.sliding_filter.set_result_callback(self.zmqServer.send_filtered_data)
def is_valid_signal(self, data, threshold=1e5): # 判断当前信号是否为有效信号
@@ -210,6 +194,10 @@ class Decoder_main(threading.Thread):
def run(self):
while self.Runing:
# 当滤波数据大于5秒时启动滤波线程
if self.zmqServer.filterBuffer.GetDataLenCount() > self.device_info['sample_rate'] * 5:
self.sliding_filter.start()
if self.zmqServer.decoder_switch or self.zmqServer.changeTarget:
print(f"Decoder_class Switch Detected: {self.zmqServer.decoder_class}")
self.zmqServer.decoder_switch = False
@@ -487,6 +475,7 @@ class Decoder_main(threading.Thread):
@return:
'''
self.zmqServer.stop()
self.sliding_filter.stop()
self.Runing=False
def reset_state(self):