软件版本:①MATLAB R2019b;②SleepSign2
下载地址:/b04dsp7sb 密码:ayzl
(相关资料图)
示例文件:/b04duf87i 密码:g9je
偶有小调整未更新网页端说明,可以在网盘中查看。
进店必看
自定义文件信号采样率和时间划分
绘制电信号图
绘制时频谱图
绘制睡眠时相1
绘制睡眠时相2
绘制功率谱密度曲线
参考资料
该脚本旨在快速绘制脑波相关的图片,脚本运算基于SleepSign导出的txt文件,需要对SleepSign的使用有比较基础的了解。
使用MATLAB打开,可直接运行。
打开程序主界面,点击左侧一列按钮可运行对应绘图模块,点击右下角@Instruction可跳转在线说明。
导入数据:
可直接选择原始txt文件,或将txt文件内容全选复制到Excel的第1张表格中,另存为xls或xlsx文件再选择。
更改文字标签:
在图窗菜单选择“编辑”→“坐标区属性”,或按图示操作打开“属性检查器”,即可更改文字或刻度标签。
保存图片:
在图窗菜单选择“文件”→“另存为”,保存为svg矢量图。当图像中的线条太多时可能会使导出的图片模糊,此时可点击“文件”→“导出设置”→“渲染”→勾选“自定义渲染器”→“painters(向量格式)”→“导出”。图片可导入Adobe Illustrator进一步修补美化。
保存图像样式:
部分模块可在图窗菜单选择“文件”→“另存为”,将当前图窗保存为fig文件,下次在MATLAB窗口打开fig文件时能保留调整后的图像样式。
File Sampling Rate:
文件采样率,即幅值文件中每秒显示的信号个数。在脑波记录软件VitalRecorder中可以更改,默认为128 Hz。
Time Division:
时间划分,使用脑波分析软件SleepSign导出数据时可以更改,根据实际填写即可,默认为4 s。
点击Amplitude,选择使用SleepSign导出的幅值文件(示例Amplitude)。
导出一列幅值即可,导出多列也只绘制第一列图像。
需注意这版代码设定大于1000 uV的点为干扰信号,在绘图前已排除。
点击Spectrogram,选择使用SleepSign导出的幅值与能谱文件(示例Amplitude;示例PSD)。
幅值文件需导出两列信号,第一列为EEG,第二列为EMG;能谱文件至少导出两段Division。
幅值图和时频图的绘制互不影响,如果只需要时频图,随便打开一份幅值文件即可。需注意颜色图代码中计算的dB = 10*log10(power),非图例上的log power。
时频图可选择绘制原图或拟合后的平滑图,平滑倍数N越大,绘图耗时越长。参考效果如图:
绘制时可选择是否显示等待条对话框,显示等待条进度动画也要耗费数秒,在N数低时较浪费时间。
不显示等待条可以节约绘图时间,但若不小心输错N数无法中途中止运算。为减少意外状况的发生,这版代码限制不显示等待条时只能输入1≤N≤10。
点击Sleep Stage 1,选择使用SleepSign导出的幅值与睡眠时相文件(示例Amplitude;示例SleepStage1)。
幅值文件需导出两列信号,第一列为EEG,第二列为EMG;SleepSign内对睡眠时相的标记必须设置为“W”、“R”、“S”;根据示例文件显示,在程序主窗口输入Time Division = Epoch Time。
幅值图和时相图的绘制互不影响,如果只需要时相图,随便打开一份幅值文件即可。
由于技术水平有限,这版本代码暂使用上万条有色短线覆盖原有线条进行上色,上色后可能会造成卡顿。参考效果如图:
点击Sleep Stage 2,选择使用SleepSign导出的睡眠时相文件(示例SleepStage2)。
不同Group的数据需分开放置在空的文件夹内,读取时任意选择相应文件夹内的一份文件即可;文件导出的时相顺序决定绘图顺序;y-sxis unit选Time,Time Division = 60 min。
柱状图显示的ZT范围可输入不大于最大时长、且前后间隔不小于1的自然数。
点击PSD Curve,在弹出的窗口点击“Load Data”,导入使用SleepSign导出的睡眠时相文件(示例PSD Curve)。
不同Group的数据需分开放置在空的文件夹内,读取时任意选择相应文件夹内的一份文件即可;每份能谱文件只导出一段Division。
该脚本可按照文件的名称排列顺序,对两组文件夹内的数据两两配对相减获得差值,从而绘制Group Difference图像。
先读取的Group绘制在下层,Group difference = 后读取 - 先读取。
[1] MathWorks官网:/help/matlab/
[2] CSDN《Matlab打包可独立运行的exe可执行文件》:/thlzzz/article/details/109697423
[3] 知乎《傅里叶分析之掐死教程(完整版)》:/p/19763358
[4] CSDN《【STM32F407的DSP教程】第27章 FFT的示波器应用》:/Simon223/article/details/106402717
[5] bilibili《matlab实现FFT算法》:/video/BV1i14y1K7Bq
[6] 知乎《[振动与测试 2] 什么是PSD(功率谱密度)》:/p/49328001
[7] 知乎《信号频域分析方法的理解(频谱、能量谱、功率谱)》:/p/441559677
[8] 知乎《功率谱密度(PSD)》:/p/417454806
[9] CSDN《Matlab中imagesc用法》:/qq_21449473/article/details/123083741
[10] CSDN《matlab添加进度条(waitbar)》:/weixin_43465015/article/details/89294079
[11] CSDN《Matlab导出图片模糊的解决办法》:/jontargaryen/article/details/80079124
[12] CSDN《MATLAB如何绘制多个(两个以上)的legend,且自定义不同曲线的标记mark》:/ervin_yi/article/details/95043379
由于从零学起参考的内容十分琐碎,故此处仅列出一小部分参考资料。
函数在官网均可查,阅读起来可能略有晦涩,个人更多靠百度。
我尽可能将每段代码的作用在脚本中都用中文注释出来,详见每段代码“%”后的内容。
有任何Bug,或觉得在MATLAB上的操作不够傻瓜的地方都可找我。
标签: