4. 测量数据获取与预处理:自动测试系统搭建、数据格式标准化与异常值检测

在SPICE参数提取流程中,测量数据的质量直接决定了模型参数的准确性与可迁移性。本章聚焦于从硬件测试到数据清洗的完整链路,涵盖自动测试系统(ATS)的搭建策略、多源数据格式的统一规范,以及针对半导体器件测量特性的异常值检测与平滑滤波算法。

4.1 自动测试系统(ATS)搭建

自动测试系统是连接待测器件(DUT)与参数提取引擎的桥梁。一个典型的MOSFET/IGBT自动测试系统包含以下核心组件:

组件 选型要点 典型型号
半导体参数分析仪 SMU通道数≥4,电流分辨率≤10 fA,电压精度≤0.1% Keysight B1500A / Keithley 4200A-SCS
探针台 漏电流≤1 pA,温度范围-60℃~300℃,支持自动对针 Cascade CM300 / MPI TS2000-SE
开关矩阵 通道隔离度≥80 dB,切换时间≤10 ms Keithley 7174A / Pickering 40-781
温控系统 控温精度±0.1℃,升降温速率≥10℃/min Attocube ANC350 / Lake Shore 336
上位机与控制软件 支持GPIB/USB/LAN通信,支持Python/C#脚本扩展 NI LabVIEW / Keysight EasyEXPERT
工程提示: 在搭建ATS时,建议采用“主控+从机”架构——上位机负责测试序列调度与数据流管理,参数分析仪作为从机执行具体电学测量。这种架构可避免因单点故障导致整批测试中断,同时便于后续集成到EDA自动化流水线中。

下图展示了一个典型的自动测试系统软件架构,其中测试序列引擎、数据采集模块与格式转换器协同工作:

自动测试系统(ATS)软件架构 上位机调度 | 并行采集 | 标准化输出 用户测试界面(GUI / CLI) 测试序列引擎(Test Sequence Engine) SMU 控制模块 数据采集模块 异常检测模块 数据格式转换器(.mdm / .csv 输出) 标准化数据文件(.mdm / .csv)

4.2 数据格式标准化

不同厂商的测试设备输出的数据格式各异,直接用于参数提取会导致脚本兼容性灾难。标准化阶段需要将原始数据统一转换为两种内部格式:

  • .mdm(Measurement Data Model)格式: 一种自描述的二进制/文本混合格式,包含器件ID、测试条件(温度、偏置)、测量模式(DC/CV/Pulse)以及原始I-V/C-V数据矩阵。头部采用JSON元数据块,便于程序解析。
  • .csv(Comma-Separated Values)格式: 轻量级文本格式,用于快速预览与轻量级脚本处理。第一行为列名,后续行为数据点。
格式转换规则: 所有原始数据在进入预处理流水线前,必须经过“三字段校验”——检查测试条件字段是否完整、数据维度是否匹配、时间戳是否在合理范围内。校验失败的数据将被隔离到“待审查”目录,不进入自动提取流程。

下表对比了两种标准化格式的适用场景与结构差异:

特性 .mdm 格式 .csv 格式
文件结构 JSON头 + 二进制数据块 纯文本,逗号分隔
元数据承载能力 强(支持嵌套、数组、单位标注) 弱(仅第一行列名)
数据精度 双精度浮点(64-bit) 取决于导出设置(通常为单精度)
文件大小 紧凑(二进制压缩) 较大(文本冗余)
适用阶段 生产级参数提取、归档 快速验证、数据预览

以下是一个简化的 .mdm 格式头部示例:

{

  "file_version": "2.1",

  "device_id": "NMOS_W10_L0.18",

  "test_date": "2025-03-15T14:32:00Z",

  "temperature": 25.0,

  "measurement_mode": "DC",

  "parameters": {

    "Vgs_start": 0.0,

    "Vgs_stop": 1.8,

    "Vgs_step": 0.1,

    "Vds": 0.1

  },

  "columns": ["Vgs", "Id", "Ig", "Is"],

  "data_offset": 512,

  "data_count": 19

}

4.3 异常值检测与平滑滤波

半导体器件测量数据中常见的异常类型包括:探针接触不良导致的“跳点”、静电放电(ESD)引起的尖峰脉冲、以及温控波动造成的基线漂移。针对这些特征,预处理模块采用三级过滤策略:

  1. 物理限值过滤: 根据器件规格书设定电流/电压的物理上下限,超出范围的数据点直接标记为无效。
  2. 局部离群点检测: 使用改进的Z-score方法,在滑动窗口(窗口大小N=5~11)内计算每个点的局部Z值,若|Z| > 3.5则判定为异常点,用窗口内中位数替换。
  3. Savitzky-Golay平滑: 对通过前两级过滤的数据进行多项式卷积平滑,保留曲线形状特征的同时抑制高频噪声。阶数通常设为2~3,窗口长度设为7~15。
注意: 平滑滤波的参数选择需谨慎——窗口过大或阶数过高会抹掉器件物理特性中的关键拐点(如阈值电压附近的跨导峰值)。建议在正式提取前,使用“参数扫描”功能对比不同平滑参数下的提取结果稳定性。

下图展示了异常值检测与平滑滤波的处理流程:

异常值检测与平滑滤波三级流程 原始测量数据 ① 物理限值过滤 ② 局部离群点检测(滑动Z-score) ③ Savitzky-Golay 平滑 标准化干净数据

4.4 预处理流水线集成示例

在EDA自动化框架中,上述预处理步骤被封装为一个独立的 DataPreprocessor 类,支持批量处理与并行加速。以下是一个简化的Python实现片段:

import numpy as np

from scipy.signal import savgol_filter



class DataPreprocessor:

    def __init__(self, window_size=7, polyorder=2, z_threshold=3.5):

        self.window_size = window_size

        self.polyorder = polyorder

        self.z_threshold = z_threshold



    def physical_limit_filter(self, data, vmin, vmax):

        """物理限值过滤"""

        return np.clip(data, vmin, vmax)



    def local_outlier_detection(self, data):

        """滑动窗口Z-score异常检测与中位数替换"""

        filtered = data.copy()

        half_win = self.window_size // 2

        for i in range(half_win, len(data) - half_win):

            window = data[i - half_win : i + half_win + 1]

            median = np.median(window)

            mad = np.median(np.abs(window - median))

            if mad == 0:

                continue

            z_score = 0.6745 * (data[i] - median) / mad

            if np.abs(z_score) > self.z_threshold:

                filtered[i] = median

        return filtered



    def savgol_smooth(self, data):

        """Savitzky-Golay平滑"""

        return savgol_filter(data, self.window_size, self.polyorder)



    def process(self, raw_data, vmin=-1e3, vmax=1e3):

        data = self.physical_limit_filter(raw_data, vmin, vmax)

        data = self.local_outlier_detection(data)

        data = self.savgol_smooth(data)

        return data

工程提示: 在实际产线环境中,建议将预处理参数(窗口大小、阶数、阈值)写入外部配置文件(如 YAML 或 JSON),避免硬编码。同时,每次预处理操作应生成日志记录,包括被过滤/替换的数据点数量与位置,便于后续审计与模型调试。

通过上述自动测试系统搭建、数据格式标准化与三级异常值处理,原始测量数据被转化为高质量、可复用的标准化数据集,为后续的SPICE模型参数提取奠定了可靠的数据基础。