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

如何使用Python修正DEktak轮廓仪采集的存在不可预见偏差的晶圆轮廓数据

嘿,我们来一步步拆解你的轮廓仪数据调平问题,给出切实可行的改进方案:

问题核心分析

你需要校正两款晶圆的轮廓扫描数据:一款是平整的Heidelberg晶圆,另一款是带有牛顿环波纹的KIT 4000晶圆,但当前的卷积+插值校正方法效果不佳。主要问题出在这几点:

  • 滑动卷积的窗口大小选择过于随意,没有匹配数据的采样频率和基线尺度
  • 基于固定比例阈值的mask筛选逻辑不够鲁棒,容易丢失有效基线点
  • 插值过程没有处理数据单调型的验证,可能导致校正后出现异常波动
优化的基线校正方案

针对轮廓仪数据的基线校正,更推荐多项式拟合(适合缓慢变化的基线)或Savitzky-Golay滤波(适合分离高频信号与基线),以下是具体实现:

方法1:多项式拟合基线校正(适合晶圆整体翘曲)

这种方法能高效拟合晶圆的缓慢形变基线,突出局部特征:

import numpy as np
import matplotlib.pyplot as plt

def poly_baseline_correct(data, degree=3):
    x = data[0]
    y = data[1]
    # 拟合基线多项式
    coeffs = np.polyfit(x, y, degree)
    baseline = np.polyval(coeffs, x)
    # 生成校正后的数据
    data_corr = np.copy(data)
    data_corr[1] = y - baseline
    return data_corr, baseline

# 加载并裁剪数据(保留你原有的裁剪逻辑)
data_heidelberg = np.genfromtxt(r'C:\Users\Klaus\Desktop\IMS\Edel.csv', delimiter=',', skip_header=17, skip_footer=0).T[:, :-8000]
data_kit4000 = np.genfromtxt(r'C:\Users\Klaus\Desktop\IMS\nichtEdel4000.csv', delimiter=',', skip_header=24, skip_footer=0).T[:, :-9000]

# 执行校正
heidelberg_corr, heidelberg_baseline = poly_baseline_correct(data_heidelberg, degree=3)
kit4000_corr, kit4000_baseline = poly_baseline_correct(data_kit4000, degree=3)

# 可视化对比
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(6,6))
# 原始数据与拟合基线
ax1.plot(data_heidelberg[0], data_heidelberg[1], label='Original Heidelberg')
ax1.plot(data_heidelberg[0], heidelberg_baseline, color='red', label='Fitted Baseline')
ax1.legend()
ax1.set_title('Heidelberg Wafer - Original vs Baseline')

ax2.plot(data_kit4000[0], data_kit4000[1], label='Original KIT 4000')
ax2.plot(data_kit4000[0], kit4000_baseline, color='red', label='Fitted Baseline')
ax2.legend()
ax2.set_title('KIT 4000 Wafer - Original vs Baseline')

# 校正后的数据对比
fig2 = plt.figure(figsize=(6,3))
plt.plot(heidelberg_corr[0], heidelberg_corr[1], label='Corrected Heidelberg')
plt.plot(kit4000_corr[0], kit4000_corr[1], color='red', label='Corrected KIT 4000')
plt.legend()
plt.title('Corrected Profile Comparison')
plt.show()

方法2:Savitzky-Golay滤波(适合分离高频牛顿环信号)

如果基线形态更复杂,这种方法能在保留信号特征的同时平滑出基线:

from scipy.signal import savgol_filter

def savgol_baseline_correct(data, window_length=2001, polyorder=3):
    x = data[0]
    y = data[1]
    # 用大窗口滤波得到基线(过滤高频牛顿环信号)
    baseline = savgol_filter(y, window_length=window_length, polyorder=polyorder)
    data_corr = np.copy(data)
    data_corr[1] = y - baseline
    return data_corr, baseline

# 执行校正
heidelberg_corr_sg, _ = savgol_baseline_correct(data_heidelberg, window_length=2001)
kit4000_corr_sg, _ = savgol_baseline_correct(data_kit4000, window_length=2001)

# 可视化校正结果
fig3 = plt.figure(figsize=(6,3))
plt.plot(heidelberg_corr_sg[0], heidelberg_corr_sg[1], label='SG Corrected Heidelberg')
plt.plot(kit4000_corr_sg[0], kit4000_corr_sg[1], color='red', label='SG Corrected KIT 4000')
plt.legend()
plt.title('Savitzky-Golay Corrected Profiles')
plt.show()
关键调参建议
  • 多项式拟合:尝试degree参数(2-5之间),3次多项式通常足以覆盖晶圆的轻微翘曲,过高阶数容易过拟合。
  • Savitzky-Golay滤波:window_length必须为奇数,且要远大于牛顿环的周期(比如牛顿环周期是100个采样点,窗口设为2001可有效过滤高频信号)。
  • 异常值处理:校正前可以用3σ法则剔除原始数据中的异常点,能进一步提升校正稳定性。
针对你原有代码的修复

如果坚持使用卷积+插值方法,可通过以下调整提升鲁棒性:

from scipy.interpolate import interp1d

def improved_correct_baseline(data, quantile=0.1, N=501):
    # 用分位数筛选基线点(比固定比例更鲁棒)
    mask = data[1] <= np.quantile(data[1], quantile)
    # 确保有足够的点用于拟合
    if np.sum(mask) < N:
        mask = data[1] <= np.quantile(data[1], 0.2)
    # 确保x单调(轮廓仪数据通常满足,但做验证避免插值异常)
    x_masked = data[0][mask]
    y_masked = data[1][mask]
    if not np.all(np.diff(x_masked) >= 0):
        sorted_idx = np.argsort(x_masked)
        x_masked = x_masked[sorted_idx]
        y_masked = y_masked[sorted_idx]
    # 平滑基线并插值
    mavg = np.convolve(y_masked, np.ones(N)/N, mode='same')
    correction = interp1d(x_masked, mavg, kind='linear', fill_value="extrapolate")
    data_corr = np.copy(data)
    data_corr[1] -= correction(data[0])
    return data_corr

内容的提问来源于stack exchange,提问作者Trần Trung Duc Klaus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:42:35