欢迎光临散文网 会员登陆 & 注册

【更新20230404】MATLAB脚本《UntitledProgram.m》使用说明

2023-04-05 00:11 作者:锕天霸动霸羽  | 我要投稿

本脚本测试软件:①MATLAB R2019b;②SleepSign2-OBI

下载地址:https://wwxr.lanzoum.com/b04dsp7sb 密码:ayzl

示例文件:https://wwxr.lanzoum.com/b04duf87i 密码:g9je

可能偶有小调整未更新网页端说明,可以在网盘中查看。


目录


  • 运行脚本

  • 自定义文件信号采样率和单元格时间

  • 绘制信号典型图

  • 绘制时频谱图

  • 绘制睡眠图1

  • 绘制睡眠图2

  • 参考资料



运行脚本


使用MATLAB打开UntitledProgram.m,可直接运行。


程序主界面如图所示,点击右下角@Instruction可跳转在线说明。


导入数据时,根据文件窗口的名称依次选取文件,也可将txt文件内容全选复制到excle的第1张表格中,另存为xls或xlsx文件后选择。


在绘图窗口选择“文件”→“另存为”,保存为svg矢量图,可导入Adobe Illustrator进一步修补美化。


该脚本的运算基于SleepSign导出的txt文件,虽然尽可能简化了在MATLAB上的操作,但仍需要对SleepSign的使用有比较基础的了解。



自定义文件信号采样率和单元格时间



File Sampling Rate:

文件采样率,即信号幅值文件中每秒显示的信号个数。在脑波记录软件VitalRecorder中可以更改,默认为128Hz。

 

Epoch Time:

单元格时间,在使用脑波分析软件SleepSign导出数据前可以更改,根据实际填写即可,默认为4s。



绘制信号典型图



点击Typical Graph,选择使用SleepSign导出的幅值文件(参考:示例Amplitude)。导出一列幅值即可,导出多列也只绘制第一列图像。


需注意这版代码设定大于1000uV的点为干扰信号,在绘图前已排除。


其中频域图像较密集,放大可见柱体。


绘制时频谱图



点击Spectrogram,选择使用SleepSign导出的幅值与能谱文件(参考:示例Amplitude;示例ESD)。其中幅值文件需导出两列信号,第一列为EEG,第二列为EMG;能谱文件需设置Time Division = Epoch Time。


依次导入所需文件后即可获得图像。幅值图和时频图的绘制互不影响,如果只需要时频图,随便打开一份幅值文件即可。需注意颜色图代码计算的dB=10*log10(power),非图例上的log power。


时频图可选择绘制原图或拟合后的平滑图,平滑倍数N越大,绘图耗时越长。参考效果如下:


绘制时可选择是否显示等待条对话框,显示等待条进度动画需耗费4s左右,在N数低时较浪费时间。


不显示等待条可以节约绘图时间,但若不小心输错N数无法中途中止运算。为减少意外状况的发生,这版代码限制不显示等待条时只能输入1≤N≤10。


绘制睡眠图1



点击Sleep Graph 1,选择使用SleepSign导出的幅值与睡眠时相文件(参考:示例Amplitude;示例SleepStages1)。其中幅值文件需导出两列信号,第一列为EEG,第二列为EMG;睡眠时相文件的标记必须设置为“W”、“R”、“S”。


依次导入所需文件后即可获得图像。幅值图和时频图的绘制互不影响,如果只需要时频图,随便打开一份幅值文件即可。


由于技术水平有限,这版本代码暂使用上万条有色短线覆盖原有线条进行上色,上色后可能会造成卡顿。参考效果如下:


当图片中线条太多时可能会使导出的图片模糊且非矢量,可点击“文件”→“导出设置”→“渲染”→勾选“自定义渲染器”→“painters(向量格式)”→“导出”。


绘制睡眠图2



点击Sleep Graph 2,选择使用SleepSign导出的睡眠时相文件(参考:示例SleepStages2)。分别创建一个空的文件夹放置实验组和对照组的数据,读取时任意选择相应文件夹内的一份时相即可。文件的时相顺序尽量按照绘图的Wake、REM、NREM顺序导出,总时长=12h,y-sxis unit选Time,Time Division =60min。


柱状图的ZT输入范围为0≤ZT≤12,且前后间隔时间不可≤1,即无法导出1h的柱状图。


对坐标轴自动显示的刻度标签不满意时可自行调节(懒得写这部分的代码了)。


参考资料

 

[1] MathWorks官网:https://ww2.mathworks.cn/help/matlab/referencelist.html

[2] CSDN《Matlab打包可独立运行的exe可执行文件》: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实现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导出图片模糊的解决办法》:https://blog.csdn.net/jontargaryen/article/details/80079124

[11] CSDN《MATLAB如何绘制多个(两个以上)的legend,且自定义不同曲线的标记mark》:https://blog.csdn.net/ervin_yi/article/details/95043379



由于从零学起参考内容太过琐碎,大多数函数在官网均可查,故此处仅列出部分参考资料。

我尽可能将每段代码的含义在脚本中用中文进行备注,详见每段代码下方“%”后的内容。



【更新20230404】MATLAB脚本《UntitledProgram.m》使用说明的评论 (共 条)

分享到微博请遵守国家法律