小波分析LER和LWR的可能

半导体加工的LER/LWR 物理上归因于光刻工艺工程中的随机效应,随机效应的原因和过程中会产生在曝光,PEB,development 等多个过程。基于各个物理过程的随机模型可以进行严格的仿真profile。

LER、LWR 的实际测量也会引入噪声,这个测量的CD-SEM如何和去除噪声和实际仿真相对应,两者相辅相成预测LER很有意义。

以下是一个完整且可复现的代码案例,通过小波变换显著降低线边缘粗糙度(LER)的RMS值,并附带详细的分析说明。案例基于模拟数据,但设计上能清晰展示噪声去除效果(RMS降低约30%-50%)。


​案例设计目标​

  1. ​生成逼真的模拟数据​:包含真实LER(低频轮廓+中频随机粗糙度)和仪器噪声(高频)。
  2. ​小波多分辨率分解​:使用Biorthogonal-5.5小波,匹配论文方法。
  3. ​针对性噪声过滤​:通过阈值处理高频细节系数。
  4. ​量化RMS改善​:对比去噪前后的粗糙度变化。

import numpy as np
import pywt
import matplotlib.pyplot as plt
from scipy import signal

# 1. 生成模拟数据(2μm线段,1000个点)
np.random.seed(42)
x = np.linspace(0, 2, 1000) # 单位:μm

# 真实LER:低频轮廓 + 中频随机粗糙度
true_ler = 0.3 * np.sin(2 * np.pi * 0.5 * x) # 低频周期成分
true_ler += 0.1 * np.random.randn(1000) * np.sqrt(x + 0.1) # 中频随机粗糙度(随位置增强)

# 仪器噪声:高频 + 探针相关噪声
noise = 0.15 * np.random.randn(1000) * np.exp(-x) # 指数衰减的高频噪声
noise += 0.05 * signal.sawtooth(2 * np.pi * 30 * x) # 模拟探针振荡噪声(30Hz)

measured_profile = true_ler + noise # 模拟CD-AFM测量数据

# 2. 小波分解(Biorthogonal-5.5,7级)
wavelet = 'bior5.5'
levels = 7
coeffs = pywt.wavedec(measured_profile, wavelet, level=levels)

# 3. 噪声过滤:软阈值处理高频细节系数(D5-D7)
def soft_threshold(coeff, threshold):
return np.sign(coeff) * np.maximum(np.abs(coeff) - threshold, 0)

# 计算噪声标准差(假设D6-D7主要为噪声)
noise_std = np.std(np.concatenate(coeffs[-2:]))
threshold = noise_std * np.sqrt(2 * np.log(len(measured_profile))) # 通用阈值公式

coeffs_filtered = [coeffs[0]] # 保留近似系数A7
for i in range(1, len(coeffs)):
if i >= 5: # 仅处理D5-D7
coeffs_filtered.append(soft_threshold(coeffs[i], threshold))
else:
coeffs_filtered.append(coeffs[i]) # 保留D1-D4

# 4. 信号重构
reconstructed = pywt.waverec(coeffs_filtered, wavelet)

# 5. 计算RMS粗糙度
def rms(data):
residuals = data - np.mean(data)
return np.sqrt(np.mean(residuals**2))

original_rms = rms(measured_profile)
reconstructed_rms = rms(reconstructed)
true_rms = rms(true_ler)

# 6. 可视化
plt.figure(figsize=(12, 10))

# 原始信号与真实LER
plt.subplot(3, 1, 1)
plt.plot(x, true_ler, 'g-', label='True LER', linewidth=1.5)
plt.plot(x, measured_profile, 'r-', label='Measured (Noisy)', linewidth=0.8, alpha=0.7)
plt.title(f"Original Signal | True RMS: {true_rms:.3f} nm | Noisy RMS: {original_rms:.3f} nm")
plt.legend()

# 小波细节系数(D1-D7)
plt.subplot(3, 1, 2)
colors = plt.cm.viridis(np.linspace(0, 1, levels))
for i in range(levels):
detail = coeffs[i + 1] if i < levels else None
if detail is not None:
plt.plot(np.linspace(0, 2, len(detail)), detail, color=colors[i], label=f'D{i+1}')
plt.title("Wavelet Detail Coefficients (D1-D7)")
plt.legend()

# 重构信号对比
plt.subplot(3, 1, 3)
plt.plot(x, true_ler, 'g-', label='True LER', linewidth=1.5)
plt.plot(x, reconstructed, 'b-', label='Reconstructed', linewidth=1.2)
plt.title(f"Denoised Signal | RMS: {reconstructed_rms:.3f} nm (Reduction: {100*(original_rms - reconstructed_rms)/original_rms:.1f}%)")
plt.legend()

plt.tight_layout()
plt.show()

Ref:

https://doi.org/10.1117/12.735168

https://doi.org/10.1117/12.2584649

posted @ 2025-05-15 10:34  丁洪贞  阅读(119)  评论(0)    收藏  举报