【更新20230415】MATLAB腳本《UntitledProgram.m》使用說明
本腳本測試軟件:①MATLAB R2019b;②SleepSign2-OBI
下載地址:https://wwxr.lanzoum.com/b04dsp7sb?密碼:ayzl
示例文件:https://wwxr.lanzoum.com/b04duf87i 密碼:g9je
可能偶有小調(diào)整未更新網(wǎng)頁端說明,可以在網(wǎng)盤中查看。

目錄
?
進店必看
自定義文件信號采樣率和時間劃分
繪制信號圖
繪制時頻譜圖
繪制睡眠時相1
繪制睡眠時相2
繪制功率譜密度曲線
參考資料

進店必看
?
此腳本旨在快速繪制腦波相關的圖片,腳本運算基于SleepSign2-OBI導出的txt文件,需要對SleepSign的使用有比較基礎的了解。有任何覺得在MATLAB上的操作不夠傻瓜的地方都可找我。
使用MATLAB打開UntitledProgram.m,可直接運行。

?
程序主界面如圖,點擊右下角@Instruction可跳轉(zhuǎn)在線說明。

?
導入數(shù)據(jù)時,可直接選擇原始txt文件,或?qū)xt文件內(nèi)容全選復制到Excel的第1張表格中,另存為xls或xlsx文件后選擇。

?
遇到看不順眼的文字或刻度標簽,都可以在圖窗選擇“編輯”→“坐標區(qū)屬性”,或按圖示操作打開“屬性檢查器”后自行調(diào)節(jié)。

?
在圖窗選擇“文件”→“另存為”,保存為svg矢量圖。當圖像中的線條太多時可能會使導出的圖片模糊,可點擊“文件”→“導出設置”→“渲染”→勾選“自定義渲染器”→“painters(向量格式)”→“導出”。圖片可導入Adobe Illustrator進一步修補美化。


自定義文件信號采樣率和時間劃分

?
File Sampling Rate:
? ? ? ?文件采樣率,即幅值文件中每秒顯示的信號個數(shù)。在腦波記錄軟件VitalRecorder中可以更改,默認為128 Hz。
?
Time Division:
? ? ? ?時間劃分,使用腦波分析軟件SleepSign導出數(shù)據(jù)時可以更改,根據(jù)實際填寫即可,默認為4 s。

繪制信號圖

點擊Amplitude,選擇使用SleepSign導出的幅值文件(示例Amplitude)。導出一列幅值即可,導出多列也只繪制第一列圖像。

?
需注意這版代碼設定大于1000 uV的點為干擾信號,在繪圖前已排除。

?
其中頻域圖像較密集,放大可見柱體。


繪制時頻譜圖
?

點擊Spectrogram,選擇使用SleepSign導出的幅值與能譜文件(示例Amplitude;示例PSD)。其中幅值文件需導出兩列信號,第一列為EEG,第二列為EMG;能譜文件至少導出兩段Division。

?
依次導入所需文件后即可獲得圖像。幅值圖和時頻圖的繪制互不影響,如果只需要時頻圖,隨便打開一份幅值文件即可。需注意顏色圖代碼計算的dB?=?10*log10(power),非圖例上的log power。

?
時頻圖可選擇繪制原圖或擬合后的平滑圖,平滑倍數(shù)N越大,繪圖耗時越長。參考效果如下:

繪制時可選擇是否顯示等待條對話框,顯示等待條進度動畫需耗費5 s左右,在N數(shù)低時較浪費時間。

?
不顯示等待條可以節(jié)約繪圖時間,但若不小心輸錯N數(shù)無法中途中止運算。為減少意外狀況的發(fā)生,這版代碼限制不顯示等待條時只能輸入1≤N≤10。


繪制睡眠時相1
?

點擊Sleep Phase 1,選擇使用SleepSign導出的幅值與睡眠時相文件(示例Amplitude;示例SleepStages1)。其中幅值文件需導出兩列信號,第一列為EEG,第二列為EMG;睡眠時相文件的標記必須設置為“W”、“R”、“S”,并根據(jù)文件顯示,在主窗口輸入Time Division = Epoch Time。

依次導入所需文件后即可獲得圖像。幅值圖和時相圖的繪制互不影響,如果只需要時頻圖,隨便打開一份幅值文件即可。?

由于技術(shù)水平有限,這版本代碼暫使用上萬條有色短線覆蓋原有線條進行上色,上色后可能會造成卡頓。參考效果如下:


繪制睡眠時相2

點擊Sleep Phase 2,選擇使用SleepSign導出的睡眠時相文件(示例SleepStages2)。Group 1和Group 2的數(shù)據(jù)需分別放在一個空的文件夾內(nèi),讀取時任意選擇相應文件夾內(nèi)的一份時相即可。文件的時相順序建議按照繪圖的Wake、REM、NREM順序?qū)С?,y-sxis unit選Time,Time Division = 60 min。


柱狀圖ZT范圍可輸入不大于最大時長的自然數(shù),前后間隔時間不小于1。


?

繪制功率譜密度曲線
?

點擊PSD Curve,在彈出的窗口點擊“Load Data”,導入使用SleepSign導出的睡眠時相文件(示例PSD Curve)。Group 1和Group 2的數(shù)據(jù)需分別放在一個空的文件夾內(nèi),讀取時任意選擇相應文件夾內(nèi)的一份時相即可。能譜文件只需導出一段Division。


可在圖窗選擇“文件”→“另存為”,保存為fig文件,下次在MATLAB窗口打開時能保留調(diào)整后的圖像樣式。


參考資料
?
[1]?MathWorks官網(wǎng):https://ww2.mathworks.cn/help/matlab/referencelist.html
[2]?CSDN《Matlab打包可獨立運行的exe可執(zhí)行文件》:https://blog.csdn.net/thlzzz/article/details/109697423
[3]?知乎《傅里葉分析之掐死教程(完整版)》:https://zhuanlan.zhihu.com/p/19763358
[4]?CSDN《【STM32F407的DSP教程】第27章 FFT的示波器應用》:https://blog.csdn.net/Simon223/article/details/106402717
[5]?bilibili《matlab實現(xiàn)FFT算法》:https://www.bilibili.com/video/BV1i14y1K7Bq
[6]?知乎《[振動與測試 2] 什么是PSD(功率譜密度)》:https://zhuanlan.zhihu.com/p/49328001
[7]?知乎《信號頻域分析方法的理解(頻譜、能量譜、功率譜)》:https://zhuanlan.zhihu.com/p/441559677
[8]?知乎《功率譜密度(PSD)》:https://zhuanlan.zhihu.com/p/417454806
[9]?CSDN《Matlab中imagesc用法》:https://blog.csdn.net/qq_21449473/article/details/123083741
[10]?CSDN《matlab添加進度條(waitbar)》:https://blog.csdn.net/weixin_43465015/article/details/89294079
[11]?CSDN《Matlab導出圖片模糊的解決辦法》:https://blog.csdn.net/jontargaryen/article/details/80079124
[12]?CSDN《MATLAB如何繪制多個(兩個以上)的legend,且自定義不同曲線的標記mark》:https://blog.csdn.net/ervin_yi/article/details/95043379
?
?
由于從零學起參考內(nèi)容很瑣碎,函數(shù)在官網(wǎng)均可查,故此處僅列出部分參考資料。
我盡可能將每段代碼的含義在腳本中用中文備注,詳見每段代碼“%”后的內(nèi)容。