【更新20230715】MATLAB腳本《SheepEditor.m》(原UntitledProgram)使用說明
軟件版本:①MATLAB R2019b;②SleepSign2
下載地址:https://wwxr.lanzoum.com/b04dsp7sb 密碼:ayuu
示例文件:https://wwxr.lanzoum.com/b04duf87i 密碼:ayuu
目錄
基本介紹
繪制電信號圖
繪制時頻譜圖
繪制睡眠時相1
繪制睡眠時相2
繪制功率譜密度曲線
參考資料
基本介紹
該腳本旨在快速繪制腦波相關的圖片,使用MATLAB打開即可直接運行。
腳本運算的原始數(shù)據(jù)基于SleepSign的導出結果(參考示例文件),需要對SleepSign的使用有比較基礎的了解,本文不另作說明。

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

關于功率譜密度的說明:
Power Spectrum Density(PSD,功率譜密度),在這里可以等同于我們平常口述的“能譜/譜能”。由于查閱的一些相關資料里對“Power(功率)”和“能量(Energy)”有做比較詳細的區(qū)分,而個人無法對這部分的名詞稱呼妄下定論,故這里暫使用PSD(功率譜密度)作為模塊名稱,但在說明時仍然使用口語化的“能譜”,后續(xù)若能夠確定名稱再統(tǒng)一進行更改。
同樣的情況也適用于Spectrogram/時頻譜圖/時頻圖。

導入數(shù)據(jù):
點擊模塊后,根據(jù)提示導入需要繪圖的數(shù)據(jù)。可直接選擇txt文件,或?qū)xt文件內(nèi)容全選復制到Excel的第1張表格中,另存為xls或xlsx文件再選擇。

更改文字標簽:
在圖窗菜單選擇“編輯”→“坐標區(qū)屬性”,或按圖示操作打開“屬性檢查器”,即可更改文字或刻度標簽。

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

保存圖像樣式:
部分模塊可在圖窗菜單選擇“文件”→“另存為”,將當前圖窗保存為fig文件,下次在MATLAB窗口打開fig文件時能保留修改后的顏色、線粗等樣式。
MATLAB的色彩表現(xiàn)通常為RGB模式,每個值的范圍均為0~1,網(wǎng)絡查詢的0~255色彩范圍需進行等比換算。例如:經(jīng)查詢粉色的RGB值為(255,192,203),換算后即約為(1,0.753,0.796)。

繪制電信號圖

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

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

繪制時頻譜圖

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

幅值圖和時頻圖的繪制互不影響,如果只需要時頻圖,隨便打開一份幅值文件即可。
需注意,繪制顏色圖的代碼實際計算的dB = 10*log10(power),非圖例上的Log power。

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

繪制時可選擇是否顯示等待條對話框,顯示等待條進度動畫也要耗費數(shù)秒,在N數(shù)低時較浪費時間。
不顯示等待條可以節(jié)約繪圖時間,但若不小心輸錯N數(shù)無法中途中止運算。為減少意外狀況的發(fā)生,這版代碼限制不顯示等待條時只能輸入1≤N≤10。

繪制睡眠時相1

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

幅值圖和時相圖的繪制互不影響,如果只需要時相圖,隨便打開一份幅值文件即可。

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

繪制睡眠時相2

點擊Sleep Stage 2模塊,選擇使用SleepSign導出的睡眠時相文件(示例SleepStage2)。
不同Group的數(shù)據(jù)需分開放置在不同的空文件夾內(nèi),讀取時選擇相應組別文件夾內(nèi)的任意一份文件即可;導出文件的時相順序決定繪圖順序;y-sxis unit選Time;Time Division = 60 min。

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

繪制功率譜密度曲線

點擊PSD Curve模塊,選擇使用SleepSign導出的能譜文件(示例PSD Curve)。
不同Group的數(shù)據(jù)需分開放置在不同的空文件夾內(nèi),讀取時選擇相應組別文件夾內(nèi)的任意一份文件即可;每份能譜文件只導出一段Division。

該腳本可按照文件的名稱順序,對兩組文件夾內(nèi)的數(shù)據(jù)兩兩配對相減獲得差值,從而繪制Group Difference圖像。

先讀取的Group繪制在下層,后讀取的Group繪制在上層。Group difference = 后讀取 - 先讀取。

參考資料
MathWorks官網(wǎng):https://ww2.mathworks.cn/help/matlab/referencelist.html
CSDN《Matlab打包可獨立運行的exe可執(zhí)行文件》:https://blog.csdn.net/thlzzz/article/details/109697423
知乎《傅里葉分析之掐死教程(完整版)》:https://zhuanlan.zhihu.com/p/19763358
CSDN《【STM32F407的DSP教程】第27章 FFT的示波器應用》:https://blog.csdn.net/Simon223/article/details/106402717
bilibili《matlab實現(xiàn)FFT算法》:https://www.bilibili.com/video/BV1i14y1K7Bq
知乎《[振動與測試 2] 什么是PSD(功率譜密度)》:https://zhuanlan.zhihu.com/p/49328001
知乎《信號頻域分析方法的理解(頻譜、能量譜、功率譜)》:https://zhuanlan.zhihu.com/p/441559677
知乎《功率譜密度(PSD)》:https://zhuanlan.zhihu.com/p/417454806
CSDN《matlab添加進度條(waitbar)》:https://blog.csdn.net/weixin_43465015/article/details/89294079
CSDN《Matlab導出圖片模糊的解決辦法》:https://blog.csdn.net/jontargaryen/article/details/80079124
CSDN《MATLAB如何繪制多個(兩個以上)的legend,且自定義不同曲線的標記mark》:https://blog.csdn.net/ervin_yi/article/details/9504337
知乎《不會吧,還有人不知道MATLAB這8個小技巧?》:https://zhuanlan.zhihu.com/p/155747685
知乎《在MATLAB中快速輸入漂亮的公式 | LaTeX FB》:https://zhuanlan.zhihu.com/p/380894172
CSDN《MATLAB 對話框字體屬性設置方法》:https://blog.csdn.net/qq_38907360/article/details/120863127
CSDN《Matlab中imagesc用法》:https://blog.csdn.net/qq_21449473/article/details/123083741
CSDN《Matlab中的continue、break和return語句》:https://blog.csdn.net/gophae/article/details/103859511
由于從零學起參考的內(nèi)容十分瑣碎,故此處僅列出一小部分參考資料。
函數(shù)在官網(wǎng)均可查,閱讀起來可能略有晦澀,個人更多靠百度。
我盡可能將每段代碼的作用在腳本中都用中文注釋出來,詳見每段代碼“%”后的內(nèi)容。
有任何Bug,或覺得在MATLAB上的操作不夠傻瓜的地方都可找我。