You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现EEG串行数据流12位有效信息提取的性能优化问题

EEG串行驱动数据解析性能优化问题

我正在开发EEG(时间序列采集设备)的串行驱动,该设备共26个通道,每个通道数据采用12bit编码,采样率为200Hz。

串行数据流由标识字节0xA0开头,其后跟随45字节的数据块,承载26个通道各12bit编码的采样数据。

解析难点:这些12bit数据在45字节块中并非处于固定位置,第一个字节仅使用低4位(4 LSB),剩余44个字节各仅使用低7位(7 LSB)。

为了更直观地说明,用如下示例展示:假设启动放大器后所有通道的输出均为12bit可表示的最大整型值4095(即所有数据位为1),那么数据流格式如下:

a0 0f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f 7f a0 下一个采样...

上述数据需要映射为1~26号通道对应的整型值4095。

我编写了Python代码实现该逻辑:首先找到数据块的起始标识,将整段采样数据存入一个int/long类型变量,剔除固定位置的无效位,再在每12bit数据前补4个高位0转换为16bit表示,最后将字节数组转换为整型列表。
代码功能运行正常,但存在性能问题:单采样点的处理耗时过高,而系统要求每秒处理200个采样点,叠加真实串口读取的其他延迟后,200个采样点的总处理耗时需要远低于1秒。

# Python代码
def readByte():
# 模拟实现
    return 0xA0

def read45bytes():
    return int(0x0f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f)

def remove_bit(num, i):
    mask = num >> (i + 1)
    mask = mask << i
    right = ((1 << i) - 1) & num
    return mask | right

def insert_mult_bits(num, bits, len, i):
    mask = num >> i
    mask = (mask << len) | bits
    mask = mask << i
    right = ((1 << i) - 1) & num
    return right | mask

def main():
    while(readByte()!=0xA0):
        print("正在查找45字节数据包的起始位置...")

    print("已找到45字节数据包起始位置")

    # 读取完整采样数据
    sample=read45bytes()

    # 移除未使用的位
    corr=0
    for i in range(7, sample.bit_length(), 8):
        sample=remove_bit(sample,i-corr)
        corr=corr+1

    # 补充高位转换为2字节表示
    corr=0
    for i in range(12,sample.bit_length(),12):
        sample=insert_mult_bits(sample,0,4,i+corr)
        corr=corr+4

    # 转换为26通道×2字节的大端字节数组
    bt=sample.to_bytes(26*2,'big')

    # 转换为整型结果列表
    idx=0
    out=[]
    for i in range(0,26*2-1,2):
        out.append(int((bt[i]<<8 | bt[i+1])))
        idx=idx+1

    # 打印1号通道的第一个采样值
    print(out.pop(0))

内容的提问来源于stack exchange,提问作者Aleks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 05:57:04