基于多模态数据的脑卒中病人健康评估与预测系统
数据处理流程
1.将光密度转换为血氧浓度数据
将采集到的原始光强数据转换为氧合血红蛋白(Oxy-Hb),脱氧血红蛋白(Deoxy-Hb)和总的血红蛋白(Total-Hb),转换过程主要使用朗伯-比尔定律。
2.滤波
对数据滤波是一个常规的操作,目的就是去掉不需要的频率信号并保留属于fNIRS的频率信号。对血氧浓度数据进行巴特沃斯滤波,使用了matlab的工具包Butterworth Filters中的带阻滤波函数bandstop_butterworth()
3.小波去噪
(1)wden
传统的傅里叶分析中,信号是完全在频域展开,不包含任何时域信息。而小波变换具有多分辨率的特点,在时域和频域上都有表征局部信息的能力,时间窗和频率窗都可以根据信号的具体形态动态调整,在低频部分采用较低的时间分辨率,提高频率的分辨率,在高频情况下,采用较低的频率分辨率来获得精确的时间定位。
小波变换被广泛地应用在诸多领域,在信号分析方面主要用于滤波、去噪、压缩和传递等方面。
使用Matlab Wavelet Toolbox中的函数进行去噪操作。
wden函数是一种用小波进行一维信号的消噪或压缩的函数
此处使用了四种信号处理函数:
xdH=wden(x,'heursure',SORH,SCAL,N,'sym6'); %heursure阈值信号处理;
xdR=wden(x,'rigrsure',SORH,SCAL,N,'sym6'); %rigrsure阈值信号处理;
xdS=wden(x,'sqtwolog',SORH,SCAL,N,'sym6'); %sqtwolog阈值信号处理;
xdM=wden(x,'minimaxi',SORH,SCAL,N,'sym6'); %minimaxi阈值信号处理;
处理结果如下:
这是37个通道中的第3个通道,对所有通道进行相同的操作,将得到的数据保存起来。后面的函数也均以此通道为例展示。
(2)dwt和idwt
dwt和idwt是一维离散小波(反)变换。其中,小波变换的参数ca1是”大概信号”,也就相对于低频,ad1是“细节信号”,也就相对于高频。
[ca1,ad1]=dwt(x,'db2');
s=idwt(ca1,ad1,'db2');
err=norm(x-s);
处理结果如下:
(3)wavedec和wrcoef
wavedec函数和wrcoef函数也比较常用,wavedec函数是用于小波变换的多层次重构。wrcoef函数是用于对小波系数进行重构。
wavedec函数:多层次单尺度一维小波分解
wrcoef函数:对一维小波系数进行单支重构
wname='db1';
N=3; %进行3尺度小波分解
%%% wrcoef函数:对一维小波系数进行单支重构
%%% s=wrcoef('type',C,L,'wname',N) 含N表示对N进行重构
%%% s=wrcoef('type',C,L,Lo_R,Hi_R,N)
type='a'; %a是大概approximation(低频);d是细节detail(高频)
[C,L]=wavedec(x,N,wname);
sa=wrcoef(type,C,L,wname,N); %N不加,默认为3
sd=wrcoef('d',C,L,wname);
处理结果如下:
(4)upwlev
upwlev就是将尺度往上返回了一级,其实与手动将wavedec中的N系数减一是等效的。
下图的结果体现了这一点,同时也对比了不同尺度上的低频(高频)的信号重构。
(5)wpdec和wprec
wpdec和wprec这两个函数是对一维小波包进行分解和重构。
wpt=wpdec(x,3,'db2');
rex=wprec(wpt);
处理结果如下:
参考资料:
1.小波变换(matlab)-常见脚本函数 https://blog.csdn.net/QWER306306/article/details/121847610
包含了上面过程的完整代码,处理自己的数据时不必生成随机含噪信号,把x替换为自己的数据即可。
2.MATLAB小波变换工具箱 Wavelet Toolbox 实际操作与训练 https://blog.csdn.net/qq_24598387/article/details/84977504