4. 基于浊度信号的结晶起晶点判定与过饱和度估算

为什么起晶点必须用浊度判定

冷却结晶中,温度降到溶解度曲线以下并不等于已经起晶,真正的起晶时刻是溶液中首批晶核出现、体系由澄清转为有散射粒子的瞬间。温度只能给出“理论过饱和度”,浊度才能给出“实际起晶时刻”。本例用浊度突变定位起晶时刻 t_n,再用该时刻的温度反查溶解度,得到起晶过饱和度,作为后续晶种策略的可重复基准。

判定逻辑分三步:先由浊度基线噪声确定突变阈值,再在浊度上升沿上取首次持续越限的时刻,最后用该时刻温度计算过饱和度。关键约定:过饱和度用浓度比定义 S = C / C*(T),其中 C*(T) 为温度 T 下的饱和浓度,C 为溶质实际浓度(按投料量与母液量折算,单位 g/100 g 溶剂)。

浊度信号与起晶时刻判定 时间 t 浊度 NTU 基线噪声带(均值+3σ) 阈值 T_th t_n 起晶时刻 浊度上升沿 起晶过饱和度估算链 ① 读取 t_n 时刻温度 T_n = 38.6 ℃(示例) ② 溶解度曲线反查 C*(38.6℃) = 24.8 g/100g ③ 实际浓度折算 C = 31.2 g/100g(投料折算) ④ 起晶过饱和度 S_n = C / C* = 31.2 / 24.8 S_n ≈ 1.26 判定要点:浊度首次持续越限(≥3 个采样点)才记为 t_n;单点毛刺不触发。 S_n 偏大 → 起晶爆发成核风险高;S_n 偏小 → 起晶滞后,需检查投料或降温速率。

浊度突变判定的可执行实现

下面用一段可直接运行的 Python 代码完成判定与估算。输入为等间隔采样的时间、温度、浊度序列,输出起晶时刻、起晶温度与起晶过饱和度。溶解度用 Arrhenius 型经验式 C*(T) = A·exp(-B/(T+273.15)) 表示,A、B 由该物系实测溶解度数据拟合得到(示例中给出假设值,实际使用须替换为自测数据)。

import numpy as np

# ---- 示例输入(假设数据,仅用于演示算法流程)----
t = np.arange(0, 120, 2.0)                 # 采样时间, min
T = 55.0 - 0.18 * t                        # 线性降温, ℃
turb = np.array([2.1,2.0,2.2,2.1,2.3,2.0,2.2,2.1,2.2,2.3,
                 2.1,2.2,2.0,2.1,2.2,2.3,2.1,2.2,2.4,2.6,
                 3.1,4.8,7.9,12.5,18.2,24.6,31.0,37.5,43.2,48.0,
                 52.1,55.6,58.4,60.7,62.5,63.9,65.0,65.9,66.6,67.1,
                 67.5,67.8,68.0,68.2,68.3,68.4,68.5,68.5,68.6,68.6,
                 68.6,68.6,68.6,68.6,68.6,68.6,68.6,68.6,68.6,68.6])

# ---- 1. 基线噪声估计(取前 20 个点,起晶前)----
base = turb[:20]
mu, sigma = base.mean(), base.std(ddof=1)
T_th = mu + 3.0 * sigma                    # 阈值 = 均值 + 3σ

# ---- 2. 首次持续越限判定(连续 3 点)----
above = turb > T_th
idx = None
for i in range(len(above) - 2):
    if above[i] and above[i+1] and above[i+2]:
        idx = i
        break

t_n = t[idx]
T_n = T[idx]

# ---- 3. 溶解度曲线(Arrhenius 型,示例参数)----
A, B = 1.85e3, 1.42e3                      # 假设拟合参数
def Csat(Tc):
    return A * np.exp(-B / (Tc + 273.15))

C_star = Csat(T_n)
C_feed = 31.2                              # 投料折算浓度, g/100g 溶剂
S_n = C_feed / C_star

print(f"阈值 T_th = {T_th:.2f} NTU")
print(f"起晶时刻 t_n = {t_n:.1f} min, 起晶温度 T_n = {T_n:.2f} ℃")
print(f"C*(T_n) = {C_star:.2f} g/100g, S_n = {S_n:.3f}")

按上述示例数据运行,预期输出为:阈值约 2.6 NTU,起晶时刻约 40 min,起晶温度约 47.8 ℃,C* 约 24.8 g/100g,S_n 约 1.26。这些数值由给定输入直接推出,属于示例结果,实际装置须用自测溶解度与投料量替换。

判定参数与结果判读

参数/指标含义示例取值判读与调整
基线窗口用于估计噪声的起晶前采样段前 20 点(40 min)窗口过短则 σ 偏大,阈值虚高
阈值系数 kT_th = μ + kσ3.0毛刺多时提高至 4,灵敏度不足时降至 2.5
持续点数 N连续越限才确认起晶3采样快时可增至 5,抑制单点干扰
t_n / T_n起晶时刻与温度40 min / 47.8 ℃重复实验离散度应小于 2 min
S_n起晶过饱和度1.26偏大提示爆发成核,偏小提示起晶滞后
可重复性验证:同一配方与降温程序重复 3 次,若 t_n 极差超过 4 min,先检查浊度探头是否结垢、搅拌转速是否一致,再考虑调整阈值系数,不要直接改投料量。
浊度探头对气泡与结垢敏感,起晶前若出现整段缓慢漂移而非突变,应重新标定基线,不可把漂移误判为起晶。溶解度曲线必须用本物系实测数据拟合,直接套用文献参数会导致 S_n 系统性偏差。