光電容積脈搏波法(PPG)是一種低成本,無創(chuàng)的光學(xué)技術(shù),可在皮膚表面進(jìn)行生理測(cè)量。其極廣泛的應(yīng)用之一是商用智能手表和運(yùn)動(dòng)手環(huán)中包含的可穿戴心率傳感器,它在日常環(huán)境下可提供舒適和連續(xù)的脈搏監(jiān)測(cè)。本文演示了如何在 Zemax OpticStudio 中對(duì)人體皮膚建模以進(jìn)行生理測(cè)量,并說明了使用 ZOS-API 對(duì)基于 PPG 的心率傳感器進(jìn)行的時(shí)間相關(guān)模擬。
PPG 器件由紅外或可見光波長范圍內(nèi)的發(fā)光二極管 (LED) 和光電探測(cè)器組成。它們提供了一種簡單的光學(xué)技術(shù)來檢測(cè)組織中的血容量變化,因?yàn)檠罕戎車慕M織對(duì)光具有更強(qiáng)烈地吸收和散射效應(yīng)。因此,血液的脈動(dòng)將導(dǎo)致檢測(cè)器信號(hào)發(fā)生相反的相位變化。本文介紹如何在 OpticStudio 中模擬人體皮膚組織模型,并演示如何使用 ZOS-API 應(yīng)用程序模擬 PPG 設(shè)備隨時(shí)間推移的測(cè)量信號(hào)。
PPG 傳感器可設(shè)計(jì)為反射或透射模式。由于光的穿透深度取決于其波長,因此綠色和黃色 LED 光線極適合在淺表血流中進(jìn)行測(cè)量,并且通常以反射模式使用。另一方面,紅外和近紅外波長更適合測(cè)量深層組織血流,可用于透射模式。在次案例中,我們展示了一個(gè)反射 PPG 設(shè)備。
我們的目標(biāo)是根據(jù)相關(guān)文獻(xiàn)中發(fā)表的數(shù)據(jù)開發(fā)一個(gè)逼真的皮膚模型。因此,我們打算應(yīng)用某種波長,通常設(shè)置為對(duì)應(yīng)皮膚和血液的光學(xué)參數(shù)在文獻(xiàn)中廣泛可見的波長,并且也接近商業(yè)設(shè)備中極常用的波長。因此,我們建模選擇了 575nm 的波長,并使用 QSMF-C160 LED (Avago Technologies) 作為光源。此 LED 的模型可以直接從 Radiant Source Model 數(shù)據(jù)庫下載,并且可以通過從 Radiant Source Model 文件生成的光線來創(chuàng)建光源文件。此功能在 OpticStudio 的旗艦版中可用,知識(shí)庫文章?如何使用 RSMX 光源模型生成光線集(https://support.zemax.com/hc/zh-cn/articles/1500005487321)?中詳細(xì)討論了該過程。
為了模擬人體組織介質(zhì)中的光傳輸,我們創(chuàng)建了分層皮膚模型,該模型考慮了表皮、真皮和皮下脂肪的組織結(jié)構(gòu)。由于此例的主要目標(biāo)是模擬基于 PPG 的心率傳感器,其中關(guān)鍵點(diǎn)是測(cè)量由血液脈動(dòng)引起的變化,因此我們專注于準(zhǔn)確地建??梢杂^察到這種脈動(dòng)的皮膚層。因此,我們分別對(duì)不同血含量值的真皮亞層進(jìn)行建模,即真皮乳頭層、毛細(xì)血管下皮層、上層血網(wǎng)真皮層、網(wǎng)狀真皮層和深部血網(wǎng)真皮層。另一方面,由于表皮中沒有血液含量,為了保持模型簡單我們只使用一個(gè)厚表皮層,它包含所有角質(zhì)層、顆粒層、棘層和基底層。然后,與大多數(shù)已發(fā)布的皮膚模型類似,我們也用一層結(jié)構(gòu)表示皮下脂肪。
上述所有皮膚層在 OpticStudio 中都建模為矩形物體,每層的厚度值基于文獻(xiàn)數(shù)據(jù),通過使得側(cè)面沒有漏光的方式來確定橫截面的尺寸。通過使用上一個(gè)層作為參考對(duì)象并對(duì)上一個(gè)層的 Z 長度單元格中的 Z 位置值應(yīng)用 Pickup 求解來放置后續(xù)層結(jié)構(gòu)。該解決方案確保了各層結(jié)構(gòu)緊貼在一起,之間沒有任何間隙。
自定義組織層結(jié)構(gòu)
由于本案例研究僅依賴于文獻(xiàn)中發(fā)表的數(shù)據(jù),因此我們?cè)谡麄€(gè)建模過程中并未進(jìn)行任何新的測(cè)量。盡管模型參數(shù)基于已發(fā)布的數(shù)據(jù),但需要注意的是,人體皮膚的光學(xué)參數(shù)在不同人群中可能存在明顯差異。因此,特定主題可能需要使用不同的參數(shù)。所以,如果您的特定應(yīng)用可以獲得更準(zhǔn)確的數(shù)據(jù),請(qǐng)制定相應(yīng)的組織結(jié)構(gòu)模型。
詳細(xì)表示皮膚中的所有每條血管將需要添加數(shù)百個(gè)具有復(fù)雜空間排列的物體,并且會(huì)降低模型的通用性,因此這種類型的建模在文獻(xiàn)中并不進(jìn)行考慮,所以我們也沒有應(yīng)用這種建模方式。相反,我們通過計(jì)算血液和周圍組織結(jié)構(gòu)的光學(xué)參數(shù)的加權(quán)平均值來考慮不同皮膚層的血液含量。
因此,我們基于以下原始數(shù)據(jù),使用 OpticStudio 中的模型材料求解對(duì)表皮層的材料進(jìn)行了建模:
皮膚層結(jié)構(gòu) | 575 nm?波長 折射率 | 血液含量?[%] |
活表皮 | 1.45 | 0 |
真皮層 | 1.40 | 2 |
上層血網(wǎng)真皮層 | 1.40 | 5 |
網(wǎng)狀真皮層 | 1.40 | 1 |
深層血網(wǎng)真皮層 | 1.40 | 5 |
皮下脂肪 | 1.44 | 5 |
血液 | 1.35 | n/a |
人體組織中的體散射
Henyey-Greenstein 分布函數(shù)可以準(zhǔn)確描述混濁介質(zhì)(例如生物組織)中小顆粒的光線散射。Henyey-Greenstein 模型只有一個(gè)自由參數(shù),即各向異性因子 g。該參數(shù)的域區(qū)間為 [-1, 1],其中 g=-1 對(duì)應(yīng)反向散射,g=0 表示各向同性散射,g=1 表示正向散射。散射光的角度分布定義為:
在 OpticStudio 的非序列模式下,Henyey-Greenstein 體散射模型以 DLL (Henyey-Greenstein-bulk.DLL) 的形式提供,包含在 OpticStudio 安裝文件中。知識(shí)庫文章?使用 Henyey-Greenstein 分布對(duì)體散射進(jìn)行建模(https://support.zemax.com/hc/zh-cn/articles/1500005577062)?對(duì)模型進(jìn)行了進(jìn)一步的解釋以及對(duì) DLL 進(jìn)行了全面分析。此外,有關(guān) OpticStudio 中表面和體散射模型的詳細(xì)討論可以在此知識(shí)庫文章中找到:OpticStudio 中有哪些可用散射模型?(https://support.zemax.com/hc/zh-cn/articles/1500005575662)
在文章附件的多層皮膚模型中,每一層的散射參數(shù)都是根據(jù)文獻(xiàn)中給出的實(shí)際值設(shè)置的。雖然 Henyey-Greenstein 散射 DLL 的輸入?yún)?shù)是平均路徑、傳輸分?jǐn)?shù)和各向異性參數(shù) g,但在文獻(xiàn)中通常散射和吸收系數(shù)分別定義為 μs 與 μa,與各向異性因子一起展示。因此,我們使用以下公式來計(jì)算模型的輸入?yún)?shù):
類似地,與之前的折射率、散射和吸收系數(shù)以及不同皮膚層的各向異性因子一樣,為血液和組織其余部分相應(yīng)值的加權(quán)平均值進(jìn)行計(jì)算,以下為對(duì)應(yīng)于 575 nm 應(yīng)用波長的原始數(shù)據(jù):
皮膚層結(jié)構(gòu) | μa [1/mm] | μs [1/mm] | g [-] |
活皮層 | 1 | 20 | 0.79 |
真皮層 | 0.28 | 21.5 | 0.79 |
上層血網(wǎng)真皮層 | 0.28 | 21.5 | 0.79 |
網(wǎng)狀真皮層 | 0.28 | 21.5 | 0.79 |
深層血網(wǎng)真皮層 | 0.28 | 21.5 | 0.79 |
皮下脂肪 | 0.081 | 1.396 | 0.75 |
血液 | 32.4 | 50 | 0.98 |
多層皮膚模型和組織中的光線傳輸顯示在下面的?3D?布局圖中。為了說明每個(gè)皮層的散射情況,光線在圖上按光線分段著色。
為了提供除顯示圖之外的數(shù)值結(jié)果,我們?cè)谠O(shè)計(jì)中添加了三個(gè)矩形探測(cè)器。它們與皮膚表面之間被一個(gè)薄薄的空氣間隙隔開(出于非序列模式建模嵌套規(guī)則的考慮)。兩個(gè)探測(cè)器具有與皮膚層相同的截面尺寸,一個(gè)朝向光源,另一個(gè)朝向皮膚模型,以分別測(cè)量所有入射光和背向散射光供后續(xù)參考。第三個(gè)探測(cè)器是一個(gè)同樣面向皮膚的小探測(cè)器 (2mm x 2mm),代表了 PPG 設(shè)備中的典型光電探測(cè)器。
上述設(shè)計(jì)可以在文章附件 (skinModel.zar) 中找到,當(dāng)測(cè)量/模擬與時(shí)間依賴性不相關(guān)時(shí),它可以用作現(xiàn)成的皮膚模型。另一方面,對(duì)時(shí)間相關(guān)效應(yīng)建模的方法——例如,在心率傳感器的應(yīng)用情況下——將在下一節(jié)中討論。
為了模擬心率監(jiān)測(cè),我們可以使用 ZOS-API 來模擬組織中的脈動(dòng)血流。我們通過調(diào)整皮膚層的血液含量來模擬心臟周期的不同階段,然后我們檢查探測(cè)到的背散射光作為時(shí)間步長的函數(shù),將各層血液含量的時(shí)間變化通過倍增因子考慮在內(nèi),假設(shè)血容量在每一層中按比例且同時(shí)變化。在這個(gè)例子中,我們使用 Python API(通過 .NET 連接到 OpticStudio)來修改模型參數(shù),使用微調(diào)設(shè)置運(yùn)行光線追跡,然后分析和繪制結(jié)果。應(yīng)用到的 Python 程序腳本可以從文章附件 (PPGsimulation.py) 下載。
通過 API 修改人體組織參數(shù)
根據(jù)文獻(xiàn),當(dāng)心臟在收縮期將血液泵入血管時(shí),皮膚層的相對(duì)血液含量會(huì)翻倍。我們使用經(jīng)驗(yàn)函數(shù)來表征這種脈動(dòng),下圖顯示了 5 個(gè)心臟周期的結(jié)果(10步長/周期)。
基于此,我們首先計(jì)算了每一層的血液含量,然后我們相應(yīng)地更新了折射率、平均自由程、透射率和Henyey-Greenstein 散射分布的各向異性因子 g。對(duì)應(yīng)的Python代碼如下:
layer = TheNCE.GetObjectAt(layerNum)
solver = layer.MaterialCell.CreateSolveType(ZOSAPI.Editors.SolveType.MaterialModel)
solver._S_MaterialModel.IndexNd = n
layer.MaterialCell.SetSolveData(solver)
volPhysData = layer.VolumePhysicsData
volPhysData.ModelSettings._S_DLLDefinedScattering.MeanPath = meanPath
volPhysData.ModelSettings._S_DLLDefinedScattering.SetParameterValue(0, transmission)
volPhysData.ModelSettings._S_DLLDefinedScattering.SetParameterValue(1, g)
結(jié)尾處,我們對(duì)每個(gè)時(shí)間步長運(yùn)行光線追跡,并從對(duì)應(yīng) PPG 的小尺寸探測(cè)器中提取結(jié)果,即光線命中總數(shù)和吸收功率。為了提高光線追跡速度,我們應(yīng)用了簡單光線分裂 (Simple Ray Splitting),其細(xì)節(jié)在知識(shí)庫文章?什么是簡單光線分裂?(https://support.zemax.com/hc/zh-cn/articles/1500005575742)中進(jìn)行了討論。光線追跡和數(shù)據(jù)提取可以使用以下 Python 命令完成:
NSCRayTrace = TheSystem.Tools.OpenNSCRayTrace()
NSCRayTrace.ClearDetectors(0)
NSCRayTrace.SplitNSCRays = True
NSCRayTrace.ScatterNSCRays = True
NSCRayTrace.UsePolarization = True
NSCRayTrace.IgnoreErrors = True
NSCRayTrace.SaveRays = False
NSCRayTrace.Run()
NSCRayTrace.WaitForCompletion()
NSCRayTrace.Close()
hits = -3 # pixel =-3 for total hits
power = 0 # pixel = 0 for total power
Data = 0
hits_bool_return, total_hits = TheNCE.GetDetectorData(detectorNum, hits, Data, 0)
power_bool_return, total_power = TheNCE.GetDetectorData(detectorNum, power, Data, 0)
由于血液的吸收和散射系數(shù)比組織的其余部分大得多,因此血液含量越高,背散射光能量越低,檢測(cè)器的測(cè)量功率也越低,反之亦然。根據(jù)我們的模擬,在每個(gè)時(shí)間步長使用 1W 的光源和 105 條分析光線,建模的血含量脈動(dòng)導(dǎo)致檢測(cè)器信號(hào)發(fā)生 10~15% 的變化,如下圖所示。
這些結(jié)果與文獻(xiàn)中的實(shí)驗(yàn)觀察結(jié)果非常吻合。在商用心率傳感器中,作為后處理的一部分,通常會(huì)對(duì)該數(shù)據(jù)應(yīng)用簡單的信號(hào)處理算法。第 一步是對(duì)噪聲信號(hào)進(jìn)行平滑處理,然后計(jì)算每分鐘超過某個(gè)預(yù)定義閾值的峰值數(shù)來計(jì)算心率。
參考文獻(xiàn)
1. Maeda, et al. Monte Carlo simulation of spectral reflectance using a multilayered skin tissue model. Optical Review (2010)