3. 数据采集系统架构:前端电子学(FEE)设计、模拟信号链路径、数字信号处理流程

好,咱们进入正题。这一章讲的是CT探测器数据采集系统的核心骨架。说白了,就是信号从探测器出来,到变成数字量,再到被计算机读走,这中间到底经历了什么。

我做了这么多年CT硬件,最深的体会就是:前端电子学(FEE)决定了系统的天花板。你后端算法再牛,如果前端信号链被噪声淹没了,那一切都是白搭。咱们一步步拆开看。

3.1 前端电子学(FEE)设计:第一道防线

FEE紧贴着探测器模块。它的任务很明确:把探测器输出的微弱电流信号,变成电压信号,并且放大到ADC能处理的幅度。

嗯,这里要注意一个关键点——阻抗匹配。探测器输出阻抗很高,而后续电路输入阻抗要足够大,否则信号就衰减了。我习惯用JFET输入的运放做第一级缓冲,输入阻抗能做到10^12Ω以上。

核心设计原则:

  • 低噪声:第一级运放的噪声系数要小于1dB
  • 高输入阻抗:避免信号源负载效应
  • 宽带宽:至少覆盖探测器输出信号的3倍频程
  • 低功耗:每个通道功耗控制在mW级别,64排探测器就是几千个通道

我曾经在一个项目中,为了省成本选了普通运放,结果系统噪声大了3倍。后来换成了专用的低噪声运放(比如ADA4897),信噪比一下就上去了。这个坑,我替你们踩过了。

3.2 模拟信号链路径:从pA到V的蜕变

模拟信号链,说白了就是一条处理流水线。每个环节都有它的使命。

环节 功能 典型器件 我踩过的坑
电荷灵敏前置放大器 将探测器电荷转换为电压 CR-110, A250 反馈电容选太大,带宽不够
成形放大器 整形脉冲、滤除高频噪声 半高斯成形电路 成形时间常数选错,堆积严重
基线恢复器 消除直流偏移 CDS相关双采样 恢复时间常数要匹配帧率
可编程增益放大器 动态范围匹配 PGA281, AD8250 增益切换时毛刺处理
抗混叠滤波器 防止ADC采样混叠 贝塞尔低通滤波器 截止频率要留余量

你想想看,探测器出来的电流信号只有pA级别。经过这五级处理,最终变成几伏的电压信号。这个动态范围,差不多是10^12倍。我刚开始做的时候,总觉得这太夸张了,直到用示波器看到真实的信号波形——嗯,确实需要这么干。

个人经验:成形时间常数是个关键参数。选短了,噪声大;选长了,脉冲堆积。我一般根据探测器输出脉冲宽度来定,取半高宽的1.5到2倍。比如探测器输出半高宽是100ns,成形时间常数就设在150-200ns之间。

3.3 数字信号处理流程:从ADC到DMA

模拟信号调理好了,接下来就是数字化。这个环节,我建议重点关注三个部分:ADC采样、数字滤波、数据打包。

3.3.1 ADC采样:精度与速度的博弈

CT探测器对ADC的要求很苛刻。分辨率至少16位,采样率要覆盖探测器输出脉冲的带宽。我常用的ADC型号是AD7760或者ADS1675,都是24位Σ-Δ型。

// ADC配置示例(伪代码)
void ADC_Init(void) {
    // 设置采样率:2.5 MSPS
    ADC_SetSampleRate(2500000);
    
    // 设置数字滤波器:SINC3,抽取因子32
    ADC_SetFilter(SINC3, 32);
    
    // 启动连续转换模式
    ADC_SetMode(CONTINUOUS);
    
    // 使能数据就绪中断
    ADC_EnableInterrupt(DRDY);
}

这里有个细节:Σ-Δ型ADC内部有数字滤波器,会引入群延迟。我遇到过工程师没注意这个,结果系统时序对不上。解决办法是在FPGA里做延迟补偿,或者用同步采样保持器。

3.3.2 数字信号处理:FPGA里的流水线

ADC出来的数据,直接进FPGA。FPGA里跑的是真正的实时处理流水线。我一般这么设计:

  1. 数据对齐:多通道ADC的数据要时间对齐,偏差不能超过1个采样周期
  2. 偏移校正:每个通道减去暗电流偏移,我习惯用滑动平均法
  3. 增益校正:乘以校正系数,补偿通道间增益差异
  4. 坏像素标记:检测异常通道,用相邻通道插值替代
  5. 数据打包:按帧格式组织数据,添加时间戳和状态字

警告:偏移校正和增益校正的系数,必须在系统上电后实时更新。因为温度变化会导致探测器特性漂移。我曾经见过一个项目,校正系数写死在Flash里,结果机器预热半小时后图像就出现条纹。后来改成每帧更新校正系数,问题才解决。

3.3.3 数据传输:告别PCIe,拥抱高速串行

处理完的数据要传给上位机。早期CT用PCIe,但线缆多、距离短。现在主流是用万兆以太网或者光纤。我最近一个项目用的是JESD204B接口,直接连接ADC和FPGA,省了很多PCB走线。

数据量有多大?算一下:64排探测器,每排1024个通道,16位分辨率,每秒采集10000帧。总数据量是:64 × 1024 × 2 × 10000 = 1.31 Gbps。嗯,万兆网刚好够用。

3.4 实战避坑指南

最后,分享几个我这些年总结的教训:

  • 电源噪声:模拟电路和数字电路一定要分开供电。我习惯用LDO给模拟部分供电,开关电源给数字部分。两者之间用磁珠隔离。
  • 地平面分割:模拟地和数字地单点连接。不要跨分割区走线,否则EMI会让你头疼。
  • 时钟抖动:ADC的采样时钟抖动要小于1ps。我一般用专用的时钟芯片,比如LMK04828。
  • 热管理:FEE靠近探测器,温度可能到50°C以上。运放的温漂要选小于1μV/°C的型号。

我曾经在一个项目中,因为没处理好地平面分割,导致系统在某个频率点出现共振噪声。排查了整整两周,最后发现是模拟地和数字地之间的回路面积太大。改成星形接地后,噪声下降了20dB。这个教训,让我养成了画PCB前先画电源/地拓扑图的习惯。

好了,这一章的内容就这些。下一章咱们聊探测器模块的选型与测试,到时候我会带几个实际案例来分析。