光電容積脈搏波法(PPG)是一種低成本,無創的光學技術,可在皮膚表面進行生理測量。其最廣泛的應用之一是商用智能手表和運動手環中包含的可穿戴心率傳感器,它在日常環境下可提供舒適和連續的脈搏監測。本文演示了如何在 Zemax OpticStudio 中對人體皮膚建模以進行生理測量,并說明了使用 ZOS-API 對基于 PPG 的心率傳感器進行的時間相關模擬。
文章附件可通過最下方“閱讀原文”鏈接中的文末進行下載。
01
簡介
PPG 器件由紅外或可見光波長范圍內的發光二極管 (LED) 和光電探測器組成。它們提供了一種簡單的光學技術來檢測組織中的血容量變化,因為血液比周圍的組織對光具有更強烈地吸收和散射效應。因此,血液的脈動將導致檢測器信號發生相反的相位變化。本文介紹如何在 OpticStudio 中模擬人體皮膚組織模型,并演示如何使用 ZOS-API 應用程序模擬 PPG 設備隨時間推移的測量信號。
02
基礎設計
PPG 傳感器可設計為反射或透射模式。由于光的穿透深度取決于其波長,因此綠色和黃色 LED 光線最適合在淺表血流中進行測量,并且通常以反射模式使用。另一方面,紅外和近紅外波長更適合測量深層組織血流,可用于透射模式。在次案例中,我們展示了一個反射 PPG 設備。
我們的目標是根據相關文獻中發表的數據開發一個逼真的皮膚模型。因此,我們打算應用某種波長,通常設置為對應皮膚和血液的光學參數在文獻中廣泛可見的波長,并且也接近商業設備中最常用的波長。因此,我們建模選擇了 575nm 的波長,并使用 QSMF-C160 LED (Avago Technologies) 作為光源。此 LED 的模型可以直接從 Radiant Source Model 數據庫下載,并且可以通過從 Radiant Source Model 文件生成的光線來創建光源文件。此功能在 OpticStudio 的旗艦版中可用,知識庫文章如何使用 RSMX 光源模型生成光線集(https://support.zemax.com/hc/zh-cn/articles/1500005487321)中詳細討論了該過程。
03
人體皮膚建模
為了模擬人體組織介質中的光傳輸,我們創建了分層皮膚模型,該模型考慮了表皮、真皮和皮下脂肪的組織結構。由于此例的主要目標是模擬基于 PPG 的心率傳感器,其中關鍵點是測量由血液脈動引起的變化,因此我們專注于準確地建??梢杂^察到這種脈動的皮膚層。因此,我們分別對不同血含量值的真皮亞層進行建模,即真皮乳頭層、毛細血管下皮層、上層血網真皮層、網狀真皮層和深部血網真皮層。另一方面,由于表皮中沒有血液含量,為了保持模型簡單我們只使用一個厚表皮層,它包含所有角質層、顆粒層、棘層和基底層。最后,與大多數已發布的皮膚模型類似,我們也用一層結構表示皮下脂肪。
上述所有皮膚層在 OpticStudio 中都建模為矩形物體,每層的厚度值基于文獻數據,通過使得側面沒有漏光的方式來確定橫截面的尺寸。通過使用上一個層作為參考對象并對上一個層的 Z 長度單元格中的 Z 位置值應用 Pickup 求解來放置后續層結構。該解決方案確保了各層結構緊貼在一起,之間沒有任何間隙。
自定義組織層結構
由于本案例研究僅依賴于文獻中發表的數據,因此我們在整個建模過程中并未進行任何新的測量。盡管模型參數基于已發布的數據,但需要注意的是,人體皮膚的光學參數在不同人群中可能存在明顯差異。因此,特定主題可能需要使用不同的參數。所以,如果您的特定應用可以獲得更準確的數據,請制定相應的組織結構模型。
詳細表示皮膚中的所有每條血管將需要添加數百個具有復雜空間排列的物體,并且會降低模型的通用性,因此這種類型的建模在文獻中并不進行考慮,所以我們也沒有應用這種建模方式。相反,我們通過計算血液和周圍組織結構的光學參數的加權平均值來考慮不同皮膚層的血液含量。
因此,我們基于以下原始數據,使用 OpticStudio 中的模型材料求解對表皮層的材料進行了建模:
皮膚層結構 |
575 nm波長 折射率 |
血液含量[%] |
活表皮 | 1.45 | 0 |
真皮層 | 1.40 | 2 |
上層血網真皮層 | 1.40 | 5 |
網狀真皮層 | 1.40 | 1 |
深層血網真皮層 | 1.40 | 5 |
皮下脂肪 | 1.44 | 5 |
血液 | 1.35 | n/a |
人體組織中的體散射
Henyey-Greenstein 分布函數可以準確描述混濁介質(例如生物組織)中小顆粒的光線散射。Henyey-Greenstein 模型只有一個自由參數,即各向異性因子 g。該參數的域區間為 [-1, 1],其中 g=-1 對應反向散射,g=0 表示各向同性散射,g=1 表示正向散射。散射光的角度分布定義為:
在 OpticStudio 的非序列模式下,Henyey-Greenstein 體散射模型以 DLL (Henyey-Greenstein-bulk.DLL) 的形式提供,包含在 OpticStudio 安裝文件中。知識庫文章使用 Henyey-Greenstein 分布對體散射進行建模(https://support.zemax.com/hc/zh-cn/articles/1500005577062)對模型進行了進一步的解釋以及對 DLL 進行了全面分析。此外,有關 OpticStudio 中表面和體散射模型的詳細討論可以在此知識庫文章中找到:OpticStudio 中有哪些可用散射模型?(https://support.zemax.com/hc/zh-cn/articles/1500005575662)
在文章附件的多層皮膚模型中,每一層的散射參數都是根據文獻中給出的實際值設置的。雖然 Henyey-Greenstein 散射 DLL 的輸入參數是平均路徑、傳輸分數和各向異性參數 g,但在文獻中通常散射和吸收系數分別定義為 μs 與 μa,與各向異性因子一起展示。因此,我們使用以下公式來計算模型的輸入參數:
類似地,與之前的折射率、散射和吸收系數以及不同皮膚層的各向異性因子一樣,為血液和組織其余部分相應值的加權平均值進行計算,以下為對應于 575 nm 應用波長的原始數據:
皮膚層結構 |
μa [1/mm] |
μs [1/mm] |
g [-] |
活皮層 | 1 | 20 | 0.79 |
真皮層 | 0.28 | 21.5 | 0.79 |
上層血網真皮層 | 0.28 | 21.5 | 0.79 |
網狀真皮層 | 0.28 | 21.5 | 0.79 |
深層血網真皮層 | 0.28 | 21.5 | 0.79 |
皮下脂肪 | 0.081 | 1.396 | 0.75 |
血液 | 32.4 | 50 | 0.98 |
多層皮膚模型和組織中的光線傳輸顯示在下面的3D布局圖中。為了說明每個皮層的散射情況,光線在圖上按光線分段著色。
為了提供除顯示圖之外的數值結果,我們在設計中添加了三個矩形探測器。它們與皮膚表面之間被一個薄薄的空氣間隙隔開(出于非序列模式建模嵌套規則的考慮)。兩個探測器具有與皮膚層相同的截面尺寸,一個朝向光源,另一個朝向皮膚模型,以分別測量所有入射光和背向散射光供后續參考。第三個探測器是一個同樣面向皮膚的小探測器 (2mm x 2mm),代表了 PPG 設備中的典型光電探測器。
上述設計可以在文章附件 (skinModel.zar) 中找到,當測量/模擬與時間依賴性不相關時,它可以用作現成的皮膚模型。另一方面,對時間相關效應建模的方法——例如,在心率傳感器的應用情況下——將在下一節中討論。
04
模擬心率傳感器
為了模擬心率監測,我們可以使用 ZOS-API 來模擬組織中的脈動血流。我們通過調整皮膚層的血液含量來模擬心臟周期的不同階段,然后我們檢查探測到的背散射光作為時間步長的函數,將各層血液含量的時間變化通過倍增因子考慮在內,假設血容量在每一層中按比例且同時變化。在這個例子中,我們使用 Python API(通過 .NET 連接到 OpticStudio)來修改模型參數,使用微調設置運行光線追跡,最后分析和繪制結果。應用到的 Python 程序腳本可以從文章附件 (PPGsimulation.py) 下載。
通過 API 修改人體組織參數
根據文獻,當心臟在收縮期將血液泵入血管時,皮膚層的相對血液含量會翻倍。我們使用經驗函數來表征這種脈動,下圖顯示了 5 個心臟周期的結果(10步長/周期)。
基于此,我們首先計算了每一層的血液含量,然后我們相應地更新了折射率、平均自由程、透射率和Henyey-Greenstein 散射分布的各向異性因子 g。對應的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)
最后,我們對每個時間步長運行光線追跡,并從對應 PPG 的小尺寸探測器中提取結果,即光線命中總數和吸收功率。為了提高光線追跡速度,我們應用了簡單光線分裂 (Simple Ray Splitting),其細節在知識庫文章什么是簡單光線分裂?(https://support.zemax.com/hc/zh-cn/articles/1500005575742)中進行了討論。光線追跡和數據提取可以使用以下 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)
05
結果
由于血液的吸收和散射系數比組織的其余部分大得多,因此血液含量越高,背散射光能量越低,檢測器的測量功率也越低,反之亦然。根據我們的模擬,在每個時間步長使用 1W 的光源和 105 條分析光線,建模的血含量脈動導致檢測器信號發生 10~15% 的變化,如下圖所示。
這些結果與文獻中的實驗觀察結果非常吻合。在商用心率傳感器中,作為后處理的一部分,通常會對該數據應用簡單的信號處理算法。第一步是對噪聲信號進行平滑處理,然后計算每分鐘超過某個預定義閾值的峰值數來計算心率。
責任編輯:彭菁
-
建模
+關注
關注
1文章
315瀏覽量
61314 -
光學技術
+關注
關注
0文章
51瀏覽量
9818 -
智能手表
+關注
關注
37文章
3308瀏覽量
116347
原文標題:如何在OpticStudio中建模人體皮膚以及光學心率探測器
文章出處:【微信號:光電資訊,微信公眾號:光電資訊】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
清華大學成功研發出可測人體信號的“電子皮膚”
如何利用皮膚電阻響應制作測謊器
基于DSP的人體皮膚測量儀的設計
光學設計——ZEMAX手冊
基于DSP的人體皮膚測量儀設計與實現方案[圖]
![基于DSP的<b class='flag-5'>人體</b><b class='flag-5'>皮膚</b><b class='flag-5'>測量</b>儀設計與實現方案[圖]](https://file1.elecfans.com//web2/M00/A7/2A/wKgZomUMQsKAde6kAAAQAxEQjII036.jpg)
如何將OpticStudio中的信息轉換為有限差分本征模
使用OpticStudio進行閃光激光雷達系統建模(中)
如何在OpticStudio中模擬人眼
在計算機上正確安裝最新版本的OpticStudio
Zemax:安裝Ansys版本的OpticStudio
解析Zemax OpticStudio中復合表面的工作原理

如何利用Zemax OpticStudio模擬AR系統中的全息光波導
如何在OpticStudio中建模和設計真實波片

評論