
簡介這份資源面向凝聚態(tài)物理實(shí)驗(yàn)方向的研究人員與具備MATLAB基礎(chǔ)的高年級學(xué)生用于處理霍爾效應(yīng)測量中的雙載流子擬合問題。當(dāng)半導(dǎo)體等材料中電子與空穴同時(shí)貢獻(xiàn)電導(dǎo)時(shí)單載流子模型往往無法準(zhǔn)確解釋霍爾電壓與電阻隨磁場的變化需要將兩類載流子的密度與遷移率分別建模求解。壓縮包內(nèi)共1個(gè)文件為MATLAB腳本.m整體約3KB體積輕量便于直接嵌入現(xiàn)有分析流程。腳本預(yù)期覆蓋實(shí)驗(yàn)數(shù)據(jù)導(dǎo)入、異常值清洗與預(yù)處理、基于非線性最小二乘的雙載流子擬合、霍爾電阻隨磁場變化及電子空穴貢獻(xiàn)的可視化以及載流子濃度與遷移率等關(guān)鍵參數(shù)的輸出。已有273人學(xué)習(xí)適合需要快速搭建雙載流子分析鏈路、對照理論模型驗(yàn)證實(shí)驗(yàn)結(jié)果的科研場景。1. 雙載流子霍爾擬合從一張 Rxx 曲線里拆出兩種載流子的濃度和遷移率你拿到一張霍爾測試的 Rxx-B 曲線發(fā)現(xiàn)它不按套路出牌——低場斜率是正的高場斜率卻翻成負(fù)的或者曲線明顯往一邊鼓。單載流子模型擬合出來的載流子濃度和遷移率換一個(gè)磁場區(qū)間就變一個(gè)值根本沒法用。這時(shí)候大概率不是設(shè)備壞了而是樣品里同時(shí)存在兩種載流子電子和空穴都在導(dǎo)電各自有不同的濃度和遷移率霍爾信號是它們疊加的結(jié)果。hall_twocarrier_rxx 這個(gè)方向要解決的就是這件事從一條 Rxx或 Hall 電阻隨磁場變化的曲線里用雙載流子模型把兩套載流子參數(shù)拆出來。它適合做半導(dǎo)體薄膜、二維材料、拓?fù)浣^緣體、有機(jī)導(dǎo)體這類多載流子共存體系的同學(xué)尤其是那些單載流子擬合殘差大、變溫?cái)?shù)據(jù)對不上的情況。載流子濃度這個(gè)熱詞在這里不是單一數(shù)字而是一組隨磁場和溫度變化的擬合參數(shù)理解這一點(diǎn)是后面所有操作的前提。2. 雙載流子模型的物理圖像與公式推導(dǎo)為什么 Rxx 會拐彎2.1 兩種載流子各自怎么貢獻(xiàn)電導(dǎo)先回到最基本的 Drude 模型。單一載流子體系里電導(dǎo)率張量的兩個(gè)分量是σ_xx n e μ / (1 (μ B)^2) σ_xy n e μ^2 B / (1 (μ B)^2)其中 n 是載流子濃度μ 是遷移率B 是磁感應(yīng)強(qiáng)度?;魻栯娮杪?ρ_xy 和橫向電阻率 ρ_xx 通過張量求逆得到ρ_xx σ_xx / (σ_xx^2 σ_xy^2) ρ_xy σ_xy / (σ_xx^2 σ_xy^2)當(dāng)體系里同時(shí)有兩種載流子時(shí)總電導(dǎo)是各自電導(dǎo)的簡單相加σ_xx_total σ_xx1 σ_xx2 σ_xy_total σ_xy1 σ_xy2注意這里有個(gè)容易翻車的地方電阻率不能直接相加必須先把各自的電導(dǎo)率算出來求和之后再求逆得到總電阻率。很多人第一次寫代碼就是在這里把 ρ_xx 直接相加結(jié)果擬合出來的曲線形狀完全不對。雙載流子模型的核心參數(shù)一共四個(gè)n1、μ1、n2、μ2。載流子類型電子還是空穴通過 μ 的符號或者電荷符號來區(qū)分。通常約定電子遷移率為負(fù)、空穴為正或者反過來只要在代碼里保持一致就行。2.2 從 Rxx 曲線形狀反推載流子類型Rxx 隨磁場的變化形狀本身就攜帶信息。如果兩種載流子的遷移率差異很大Rxx 會在高場出現(xiàn)明顯的飽和或者非單調(diào)變化。具體來說當(dāng)兩種載流子濃度相當(dāng)、遷移率接近時(shí)Rxx 在低場緩慢上升高場趨于飽和曲線看起來像被壓扁的拋物線。當(dāng)一種載流子濃度遠(yuǎn)高于另一種但遷移率低很多時(shí)低場由高遷移率載流子主導(dǎo)Rxx 上升快高場低遷移率載流子貢獻(xiàn)變大Rxx 趨于平緩。如果兩種載流子類型相反電子和空穴霍爾電阻率 ρ_xy 會出現(xiàn)符號反轉(zhuǎn)對應(yīng)的 Rxx 也會在反轉(zhuǎn)場附近出現(xiàn)一個(gè)特征性的鼓包。這些形狀特征就是擬合時(shí)判斷初值好不好的依據(jù)。我一般會先目測曲線拐點(diǎn)大概在哪個(gè)磁場然后估算兩種載流子的遷移率量級再讓擬合去細(xì)化。2.3 擬合殘差為什么比單載流子小單載流子模型只有兩個(gè)自由參數(shù)n 和 μ雙載流子有四個(gè)。參數(shù)多了擬合能力自然強(qiáng)但這不是隨便加參數(shù)的借口。判斷是否真的需要雙載流子模型看兩個(gè)指標(biāo)第一單載流子擬合的殘差是否隨磁場系統(tǒng)性偏大。如果殘差在低場和高場符號相反說明模型缺了一項(xiàng)。第二擬合出來的遷移率是否隨擬合區(qū)間變化。單載流子模型擬合 0-1T 和 0-9T 得到的 μ 差了兩倍以上基本可以確定是多載流子體系。提示不要因?yàn)殡p載流子擬合殘差更小就直接采用。參數(shù)多了容易過擬合尤其是數(shù)據(jù)點(diǎn)少、噪聲大的時(shí)候。先用單載流子試殘差有系統(tǒng)性結(jié)構(gòu)再上雙載流子。3. 用 Python 實(shí)現(xiàn)雙載流子擬合從數(shù)據(jù)讀入到參數(shù)輸出3.1 數(shù)據(jù)準(zhǔn)備與預(yù)處理假設(shè)你從霍爾測試系統(tǒng)導(dǎo)出的數(shù)據(jù)是兩列磁場 B單位 T和 Rxx單位 Ω 或 Ω/sq。常見格式是 CSV 或 Excel。先做幾件事去掉零場附近的異常點(diǎn)有些設(shè)備在 B0 附近有剩磁或偏移檢查磁場是否對稱如果只測了正場最好補(bǔ)測負(fù)場或者至少確認(rèn)曲線在正負(fù)場下對稱。import numpy as np import pandas as pd from scipy.optimize import curve_fit import matplotlib.pyplot as plt # 讀入數(shù)據(jù)假設(shè)文件有兩列B_T 和 Rxx_ohm df pd.read_csv(hall_rxx_data.csv) B df[B_T].values Rxx_exp df[Rxx_ohm].values # 去掉零場附近可能受剩磁影響的點(diǎn)可選 mask np.abs(B) 0.05 B B[mask] Rxx_exp Rxx_exp[mask] # 按磁場絕對值排序方便后續(xù)畫圖 idx np.argsort(B) B B[idx] Rxx_exp Rxx_exp[idx] print(f數(shù)據(jù)點(diǎn)數(shù): {len(B)}) print(f磁場范圍: {B.min():.2f} T 到 {B.max():.2f} T) print(fRxx 范圍: {Rxx_exp.min():.2f} 到 {Rxx_exp.max():.2f} Ω)這段代碼做了三件事讀數(shù)據(jù)、去零場附近點(diǎn)、排序。去零場附近點(diǎn)是因?yàn)楹芏嗷魻栂到y(tǒng)在 B0 附近有剩磁Rxx 會出現(xiàn)一個(gè)不合理的凹陷或尖峰留著會帶偏擬合。閾值 0.05 T 不是固定的如果你的最高場只有 1 T這個(gè)閾值要相應(yīng)減小。3.2 雙載流子電導(dǎo)率模型函數(shù)這是整個(gè)擬合的核心。輸入磁場 B 和四個(gè)參數(shù)輸出模型預(yù)測的 Rxx。def two_carrier_conductivity(B, n1, mu1, n2, mu2): 雙載流子電導(dǎo)率模型。 n1, n2: 載流子濃度單位 cm^-3 mu1, mu2: 遷移率單位 cm^2/(V·s)電子為負(fù)、空穴為正 B: 磁場單位 T 返回: Rxx 模型值單位 Ω假設(shè)樣品為二維用方塊電阻 e 1.602e-19 # 元電荷C # 把濃度從 cm^-3 轉(zhuǎn)成 m^-3 n1_si n1 * 1e6 n2_si n2 * 1e6 # 遷移率從 cm^2/(V·s) 轉(zhuǎn)成 m^2/(V·s) mu1_si mu1 * 1e-4 mu2_si mu2 * 1e-4 # 各自電導(dǎo)率 sigma_xx1 n1_si * e * np.abs(mu1_si) / (1 (mu1_si * B)**2) sigma_xy1 n1_si * e * mu1_si**2 * B / (1 (mu1_si * B)**2) sigma_xx2 n2_si * e * np.abs(mu2_si) / (1 (mu2_si * B)**2) sigma_xy2 n2_si * e * mu2_si**2 * B / (1 (mu2_si * B)**2) # 總電導(dǎo) sigma_xx sigma_xx1 sigma_xx2 sigma_xy sigma_xy1 sigma_xy2 # 求逆得到電阻率 rho_xx sigma_xx / (sigma_xx**2 sigma_xy**2) return rho_xx參數(shù)說明n1、n2 用 cm^-3 是文獻(xiàn)里最常見的單位代碼內(nèi)部轉(zhuǎn)成 SI 單位計(jì)算。μ 的符號區(qū)分載流子類型電子為負(fù)、空穴為正。注意 σ_xx 里用的是 |μ|因?yàn)殡妼?dǎo)率是正值符號只影響 σ_xy 的方向。如果你的樣品是三維體材料Rxx 和 ρ_xx 之間還差一個(gè)厚度因子需要把厚度乘進(jìn)去。3.3 初值估計(jì)與擬合調(diào)用雙載流子擬合對初值敏感直接扔隨機(jī)初值大概率不收斂。我一般用兩步法先目測曲線估一個(gè)大概范圍再用網(wǎng)格搜索找最優(yōu)初值。# 第一步根據(jù)曲線形狀估初值 # 假設(shè)低場斜率對應(yīng)高遷移率載流子高場飽和對應(yīng)低遷移率載流子 # 這里給一組典型初值實(shí)際要根據(jù)你的數(shù)據(jù)調(diào)整 p0 [1e18, 1000, 1e19, 100] # n1, mu1, n2, mu2 # 參數(shù)邊界濃度 1e15 到 1e22遷移率 1 到 10000 bounds ([1e15, -10000, 1e15, -10000], [1e22, 10000, 1e22, 10000]) # 第二步擬合 popt, pcov curve_fit(two_carrier_conductivity, B, Rxx_exp, p0p0, boundsbounds, maxfev20000) n1_fit, mu1_fit, n2_fit, mu2_fit popt perr np.sqrt(np.diag(pcov)) print(f載流子1: n {n1_fit:.3e} cm^-3, mu {mu1_fit:.1f} cm^2/(V·s)) print(f載流子2: n {n2_fit:.3e} cm^-3, mu {mu2_fit:.1f} cm^2/(V·s)) print(f擬合誤差: n1 ±{perr[0]:.2e}, mu1 ±{perr[1]:.1f}, fn2 ±{perr[2]:.2e}, mu2 ±{perr[3]:.1f}) # 畫圖對比 B_fit np.linspace(B.min(), B.max(), 500) Rxx_fit two_carrier_conductivity(B_fit, *popt) plt.figure(figsize(8, 5)) plt.plot(B, Rxx_exp, o, markersize3, label實(shí)驗(yàn)數(shù)據(jù)) plt.plot(B_fit, Rxx_fit, -, linewidth2, label雙載流子擬合) plt.xlabel(磁場 B (T)) plt.ylabel(Rxx (Ω)) plt.legend() plt.tight_layout() plt.savefig(two_carrier_fit.png, dpi150) plt.show()這段代碼的關(guān)鍵在初值和邊界。p0 里的四個(gè)數(shù)不是隨便寫的n1 和 mu1 對應(yīng)低場主導(dǎo)的載流子n2 和 mu2 對應(yīng)高場主導(dǎo)的載流子。如果你不確定哪個(gè)是哪個(gè)可以交換 p0 里兩組參數(shù)的位置再擬合一次看哪個(gè)殘差小。bounds 給了一個(gè)很寬的物理合理范圍防止擬合跑到負(fù)濃度或者離譜的遷移率上去。3.4 擬合結(jié)果的可信度檢查擬合完不能只看殘差平方和要做幾項(xiàng)檢查第一把擬合曲線和實(shí)驗(yàn)數(shù)據(jù)畫在一起目測有沒有系統(tǒng)性偏離。如果低場擬合好、高場差說明高場載流子參數(shù)沒抓準(zhǔn)。第二看參數(shù)的誤差棒。如果某個(gè)參數(shù)的誤差比參數(shù)本身還大說明這個(gè)參數(shù)沒被數(shù)據(jù)約束住可能是過擬合。第三換一個(gè)磁場區(qū)間重新擬合看參數(shù)是否穩(wěn)定。比如用 0-6T 和 0-9T 分別擬合如果 n1 變了三倍說明數(shù)據(jù)質(zhì)量不夠或者模型不對。第四檢查擬合出來的遷移率是否和文獻(xiàn)里同類材料的量級一致。如果擬合出 10000 cm^2/(V·s) 的遷移率但你的材料是普通多晶薄膜大概率是過擬合了。4. 避坑與排查雙載流子擬合里最容易翻車的五個(gè)地方4.1 現(xiàn)象擬合不收斂報(bào)錯(cuò) “Optimal parameters not found”原因初值離真實(shí)值太遠(yuǎn)或者邊界設(shè)得太窄把真值排除在外了。雙載流子模型的參數(shù)空間是四維的而且 σ_xx 和 σ_xy 對參數(shù)的敏感度不一樣梯度下降很容易卡在局部極小值。解決先用單載流子模型擬合一遍把得到的 n 和 μ 作為其中一個(gè)載流子的初值另一個(gè)載流子的初值設(shè)成濃度差一個(gè)量級、遷移率差三到五倍。如果還不行用 scipy.optimize.differential_evolution 做全局搜索雖然慢但不容易卡住。4.2 現(xiàn)象擬合出來的兩種載流子濃度幾乎一樣遷移率也幾乎一樣原因數(shù)據(jù)里其實(shí)只有一種載流子雙載流子模型把一組參數(shù)拆成了兩組相近的相當(dāng)于用四個(gè)參數(shù)擬合兩個(gè)參數(shù)就能描述的數(shù)據(jù)。這是典型的過擬合。解決先做單載流子擬合看殘差有沒有系統(tǒng)性結(jié)構(gòu)。如果沒有就別用雙載流子。如果有檢查是不是測量噪聲導(dǎo)致的假結(jié)構(gòu)??梢阅靡唤M已知單載流子的樣品數(shù)據(jù)跑一下雙載流子擬合看看它會不會也拆出兩組相近參數(shù)——如果會說明你的擬合流程需要加正則化或者參數(shù)約束。4.3 現(xiàn)象Rxx 曲線在低場有個(gè)尖峰擬合怎么都對不上原因低場尖峰通常不是載流子輸運(yùn)的本征行為而是測量偽影。常見來源包括樣品接觸不良導(dǎo)致的非歐姆接觸、零場附近的剩磁、電流過大導(dǎo)致的自加熱、或者樣品本身在低場有磁阻效應(yīng)比如弱局域化。解決先檢查測量條件。降低測試電流看尖峰是否變小。如果尖峰在正負(fù)場下不對稱基本可以確定是接觸問題或剩磁。把低場數(shù)據(jù)通常 |B| 0.1T去掉再擬合不要硬擬合。4.4 現(xiàn)象擬合參數(shù)隨溫度劇烈跳動(dòng)沒有物理趨勢原因雙載流子擬合的參數(shù)相關(guān)性很強(qiáng)n1 和 n2 之間、μ1 和 μ2 之間存在 trade-off。數(shù)據(jù)信噪比不夠時(shí)擬合會在多組參數(shù)之間跳。解決把不同溫度的數(shù)據(jù)放在一起看趨勢。如果 n1 隨溫度升高而增加、n2 隨溫度升高而減少但總濃度守恒那可能是擬合把兩種載流子的角色互換了??梢栽跀M合時(shí)加約束比如固定 n1 n2 總濃度如果總濃度能從其他測量獨(dú)立得到或者固定一種載流子的遷移率隨溫度的變化規(guī)律。4.5 現(xiàn)象擬合殘差很小但參數(shù)物理上不合理比如遷移率超過 10^5原因參數(shù)邊界設(shè)得太寬擬合跑到了非物理區(qū)域?;蛘吣P屠锷倏紤]了串聯(lián)電阻、接觸電阻等寄生效應(yīng)。解決收緊邊界。常見半導(dǎo)體材料的遷移率室溫下很少超過 2000 cm^2/(V·s)二維材料可能到 10^4 量級但 10^5 基本不可能。把邊界上限設(shè)成 5×10^4 再擬合。如果擬合結(jié)果貼著邊界說明數(shù)據(jù)里沒有足夠信息約束這個(gè)參數(shù)需要補(bǔ)測更高場的數(shù)據(jù)或者換測量方式。5. 進(jìn)階技巧用變溫 Rxx 數(shù)據(jù)交叉驗(yàn)證雙載流子參數(shù)單溫度下的雙載流子擬合只能給你一組參數(shù)但物理上是否自洽要靠變溫?cái)?shù)據(jù)來驗(yàn)證。我一般會測 5-10 個(gè)溫度點(diǎn)每個(gè)溫度下擬合出 n1、μ1、n2、μ2然后看它們隨溫度的變化趨勢是否符合預(yù)期。一個(gè)典型的驗(yàn)證方法是畫 Arrhenius 圖把 n1 和 n2 取對數(shù)后對 1/T 作圖。如果兩種載流子都來自熱激發(fā)log(n) vs 1/T 應(yīng)該是直線斜率給出激活能。如果 n1 的激活能和 n2 差很多說明它們來自不同的能級或不同的導(dǎo)電通道雙載流子模型是合理的。如果 n1 和 n2 的激活能幾乎一樣那可能它們其實(shí)是同一種載流子的不同分布模型需要簡化。另一個(gè)技巧是用 Hall 電阻率 ρ_xy 的符號反轉(zhuǎn)場來約束參數(shù)。雙載流子體系中如果電子和空穴共存ρ_xy 會在某個(gè)磁場下過零。這個(gè)過零場 B0 和兩種載流子的濃度、遷移率滿足一個(gè)近似關(guān)系B0 ≈ (n2 μ2^2 - n1 μ1^2) / (e (n2 μ2 - n1 μ1) ... )具體形式取決于符號約定但核心思路是過零場的位置對參數(shù)組合很敏感可以把它作為一個(gè)額外的約束條件加進(jìn)擬合。我通常的做法是先用 Rxx 擬合出一組參數(shù)然后檢查這組參數(shù)預(yù)測的 ρ_xy 過零場是否和實(shí)驗(yàn)測到的過零場一致。如果不一致說明 Rxx 擬合的參數(shù)有問題需要把 ρ_xy 數(shù)據(jù)也納入聯(lián)合擬合。聯(lián)合擬合的代碼結(jié)構(gòu)是在目標(biāo)函數(shù)里同時(shí)計(jì)算 Rxx 和 ρ_xy 的殘差然后加權(quán)求和。權(quán)重取各自測量誤差的倒數(shù)平方。這樣得到的參數(shù)比單獨(dú)擬合 Rxx 更可靠尤其是當(dāng) Rxx 對某些參數(shù)不敏感時(shí)ρ_xy 可以提供額外約束。最后說一個(gè)我自己的習(xí)慣每次擬合完把參數(shù)、誤差、殘差、擬合區(qū)間、溫度都記在一個(gè)表里存成 CSV。做變溫系列的時(shí)候把表畫成圖一眼就能看出哪個(gè)溫度點(diǎn)的擬合出了問題。這個(gè)習(xí)慣幫我省了很多回頭重測的時(shí)間。雙載流子擬合不是一錘子買賣數(shù)據(jù)質(zhì)量、初值選擇、約束條件、交叉驗(yàn)證每一步都影響最終結(jié)果的可信度。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取