【更新20230404】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
參考資料

運行腳本
使用MATLAB打開UntitledProgram.m,可直接運行。

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

導(dǎo)入數(shù)據(jù)時,根據(jù)文件窗口的名稱依次選取文件,也可將txt文件內(nèi)容全選復(fù)制到excle的第1張表格中,另存為xls或xlsx文件后選擇。

在繪圖窗口選擇“文件”→“另存為”,保存為svg矢量圖,可導(dǎo)入Adobe Illustrator進一步修補美化。

該腳本的運算基于SleepSign導(dǎo)出的txt文件,雖然盡可能簡化了在MATLAB上的操作,但仍需要對SleepSign的使用有比較基礎(chǔ)的了解。

自定義文件信號采樣率和單元格時間

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

繪制信號典型圖

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

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

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


繪制時頻譜圖

點擊Spectrogram,選擇使用SleepSign導(dǎo)出的幅值與能譜文件(參考:示例Amplitude;示例ESD)。其中幅值文件需導(dǎo)出兩列信號,第一列為EEG,第二列為EMG;能譜文件需設(shè)置Time Division = Epoch Time。

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

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

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

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


繪制睡眠圖1

點擊Sleep Graph 1,選擇使用SleepSign導(dǎo)出的幅值與睡眠時相文件(參考:示例Amplitude;示例SleepStages1)。其中幅值文件需導(dǎo)出兩列信號,第一列為EEG,第二列為EMG;睡眠時相文件的標記必須設(shè)置為“W”、“R”、“S”。

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

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

當圖片中線條太多時可能會使導(dǎo)出的圖片模糊且非矢量,可點擊“文件”→“導(dǎo)出設(shè)置”→“渲染”→勾選“自定義渲染器”→“painters(向量格式)”→“導(dǎo)出”。


繪制睡眠圖2

點擊Sleep Graph 2,選擇使用SleepSign導(dǎo)出的睡眠時相文件(參考:示例SleepStages2)。分別創(chuàng)建一個空的文件夾放置實驗組和對照組的數(shù)據(jù),讀取時任意選擇相應(yīng)文件夾內(nèi)的一份時相即可。文件的時相順序盡量按照繪圖的Wake、REM、NREM順序?qū)С?,總時長=12h,y-sxis unit選Time,Time Division =60min。

柱狀圖的ZT輸入范圍為0≤ZT≤12,且前后間隔時間不可≤1,即無法導(dǎo)出1h的柱狀圖。


對坐標軸自動顯示的刻度標簽不滿意時可自行調(diào)節(jié)(懶得寫這部分的代碼了)。

參考資料
?
[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的示波器應(yīng)用》: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]?CSDN《Matlab中imagesc用法》:https://blog.csdn.net/qq_21449473/article/details/123083741
[9]?CSDN《matlab添加進度條(waitbar)》:https://blog.csdn.net/weixin_43465015/article/details/89294079
[10]?CSDN《Matlab導(dǎo)出圖片模糊的解決辦法》:https://blog.csdn.net/jontargaryen/article/details/80079124
[11]?CSDN《MATLAB如何繪制多個(兩個以上)的legend,且自定義不同曲線的標記mark》:https://blog.csdn.net/ervin_yi/article/details/95043379
由于從零學(xué)起參考內(nèi)容太過瑣碎,大多數(shù)函數(shù)在官網(wǎng)均可查,故此處僅列出部分參考資料。
我盡可能將每段代碼的含義在腳本中用中文進行備注,詳見每段代碼下方“%”后的內(nèi)容。