一个完整的脑电波采集系统通常由电极、前置放大器、滤波器、主放大器、模数转换器(ADC)、微控制器(MCU)或数据采集卡,以及上位机软件组成。电极负责从头皮上拾取脑电信号,前置放大器将微弱的脑电信号进行初步放大,滤波器去除噪声和干扰,主放大器进一步放大信号,ADC 将模拟信号转换为数字信号,MCU 或数据采集卡负责数据的采集和传输,上位机软件用于数据的显示、分析和存储。
选用合适的电极是采集高质量脑电信号的关键。常见的电极类型有湿电极、干电极和半干电极。湿电极需要使用导电膏,能够提供较好的信号质量,但使用不便;干电极无需导电膏,使用方便,但信号质量相对较差;半干电极结合了两者的优点。
前置放大器应具有高输入阻抗、低噪声、高共模抑制比(CMRR)等特点,以减少信号的衰减和干扰。可以使用专用的仪表放大器,如 AD620。
脑电信号的频率范围通常在 0.5 - 100Hz 之间,需要设计低通、高通和带通滤波器来去除噪声和干扰。可以使用有源滤波器或无源滤波器。
主放大器进一步放大经过滤波后的信号,使其满足 ADC 的输入范围。
选择具有高分辨率和采样率的 ADC,以保证信号的准确性和完整性。例如,ADS1299 是一款专门用于生物电信号采集的 ADC 芯片。
MCU 负责控制 ADC 的采样和数据传输,可以选择如 Arduino、STM32 等开发板。如果对数据采集速度和处理能力要求较高,可以使用专业的数据采集卡。
以下是一个使用 Arduino 和 ADS1299 进行脑电数据采集的示例代码:
#include
#include
ADS1299 ads;
void setup() { Serial.begin(115200); ads.begin(); ads.reset(); ads.disableAllChannels(); ads.enableChannel(1); ads.setDataRate(ADS1299_DR_250SPS); ads.start();
}
void loop() { if (ads.dataAvailable()) { int32_t data = ads.readChannel(1); Serial.println(data); }
}
上位机软件可以使用 Python 结合相关库进行开发,如pyserial
用于串口通信,matplotlib
用于数据可视化,numpy
用于数据处理。以下是一个简单的 Python 示例代码:
import serial
import matplotlib.pyplot as plt
import numpy as np
ser = serial.Serial('COM3', 115200) # 根据实际情况修改串口号和波特率
plt.ion()
fig, ax = plt.subplots()
x = np.arange(0, 100)
y = np.zeros(100)
line, = ax.plot(x, y)
while True: try: data = ser.readline().decode().strip() if data: value = int(data) y = np.roll(y, -1) y[-1] = value line.set_ydata(y) ax.relim() ax.autoscale_view() fig.canvas.draw() fig.canvas.flush_events() except KeyboardInterrupt: break
ser.close()
采集到的脑电信号通常包含噪声和干扰,需要进行信号处理来提取有用信息。常见的信号处理方法包括: