2019年 7月29日--8月4日 周报

8月4日 周报

(一)本周进展及下周计划

本周进展
1.学习直接用MATALB对原始脑电数据进行处理,而不依赖于EEGLAB工具箱;
2.学习python及串口通信,想办法解决python上位机存在的bug.

存在的问题
1.超声课题组的各位都放假回家了,实验进度停滞,日报无材料可写;
2.python上位机的bug找到了,正在想办法解决.

下周计划
1.把python上位机的问题解决掉;
2.开始抽时间去推进PLADRC论文的工作。

(二)具体进展情况

1. 从脑电数据中截取某一段的方法

环境需求:画图用MATLAB R2018a,查看eeg用MATALB R2013b中的EEGLAB,EEGLAB版本为v13.0.1
方法:在EEGLAB中遍历脑电数据,找到自己感兴趣的eeg片段,记下它的时间节点,然后在MATLAB R2018a中画图

(1) 在EEGLAB中遍历脑电数据,找到自己感兴趣的某一段
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
745~750s出现癫痫放电,我们对这段eeg很感兴趣,接下来要在MATLAB R2018a中将它画出来,并且分析它.

(2)在MATLAB R2018a中将745~750s的脑电数据画出来(无刺激时的癫痫状放电,文件夹1-1的数据)

clc;
clear;
close all;

openNSx('read');
t=745:(1/2000):750;
eega=double(NS3.Data);
eegn=eega(745*2000:750*2000);

figure(1)
plot(t,eegn,'k','linewidth',1.5);

l1=legend('原始小鼠癫痫放电');
set(l1,'linewidth',1.6,'fontsize',12,'fontweight','bold');
xlabel('Time(s)','fontsize',16,'fontweight','bold');
ylabel('\muV','fontsize',16,'fontweight','bold');
set(gca, 'linewidth',1.6,'fontsize',14,'fontweight','bold')
axis([745 750 -2000 3000]);

在这里插入图片描述在这里插入图片描述
(3) 同理,现在画有刺激时的癫痫状放电及其刺激信号(文件夹2-2的数据)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
:这里打开的显然是降频滞后的刺激信号,原数据是30000Hz的方波,现在在EEGLAB中将其以采样率2000Hz打开,所以才变成了类似三角波的信号.

clc;
clear;
close all;

warning('选择脑电数据的ns5数据,文件夹2-2');
openNSx('read');
warning('选择脑电数据的ns3数据,文件夹2-2');
openNSx('read');

t=541:(1/2000):576;

eega=double(NS3.Data);
eegn=eega(541*2000:576*2000);

tusa=double(NS5.Data);
tusp=resample(tusa,2000,30000);
tusn=tusp(541*2000:576*2000);

figure(1)
subplot(2,1,1)
plot(t,tusn,'k','linewidth',1.5);
l1=legend('超声刺激触发脉冲');
set(l1,'linewidth',1.6,'fontsize',12,'fontweight','bold');
xlabel('Time(s)','fontsize',16,'fontweight','bold');
ylabel('\muV','fontsize',16,'fontweight','bold');
set(gca, 'linewidth',1.6,'fontsize',14,'fontweight','bold');
axis([541 576 -4e4 4e4]);

subplot(2,1,2)
plot(t,eegn,'k','linewidth',1.5);
l2=legend('超声刺激下的小鼠脑电');
set(l2,'linewidth',1.6,'fontsize',12,'fontweight','bold');
xlabel('Time(s)','fontsize',16,'fontweight','bold');
ylabel('\muV','fontsize',16,'fontweight','bold');
set(gca, 'linewidth',1.6,'fontsize',14,'fontweight','bold')
axis([541 576 -4000 4000]);

在这里插入图片描述
(4)没有经过resample(tusp,2000,30000)改变采样率时的超声刺激信号(文件2-2)
在这里插入图片描述
arun_waveform 源码:

clear all
close all
clc%是否以超声开始点作为0时刻点,false为超声结束点
%一般以超声开始点为0时刻点,但画图的时候记得标注超声结束点
is_use_start=true;

%运行的时候会要求依次打开数据
warning('选择脑电数据的ns3数据');
openNSx('read');
warning('选择超声数据的ns5数据');
openNSx('read');
%%%%%%%%%%%画波形图

eega=double(NS3.Data);
eeg_srate=NS3.MetaTags.SamplingFreq;
clear NS3;

tusa=double(NS5.Data);
tus_srate=NS5.MetaTags.SamplingFreq;
clear NS5;
sample_rate_1=2000;
sample_rate_2=30000;
tus=resample(tusa,sample_rate_1,sample_rate_2);

eegn=eega(1:end);
tus_p=tus(1:end);

figure;
subplot(2,1,1)
plot(eegn);
subplot(2,1,2)
plot(tus_p);

从源码中可以开出tusa是未经改变采样率之前的超声刺激触发信号,从MATLAB的workplace中将其另存为出来,然后导入EEGLAB 中查看.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以说之前我们采集到的根本不是什么超声刺激信号,只是触发信号而已.

2. (1~50Hz)带通滤波器的设计

设计环境:MATLAB R2018a—fdatool

在这里插入图片描述
EEGLAB中1~50Hz的FIR滤波器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
fdatool生成的滤波器函数:

function Hd = filter1_50
%FILTER_1-50 Returns a discrete-time filter object.

% MATLAB Code
% Generated by MATLAB(R) 9.4 and Signal Processing Toolbox 8.0.
% Generated on: 04-Aug-2019 20:18:11

% FIR Window Bandpass filter designed using the FIR1 function.

% All frequency values are in Hz.
Fs = 2000;  % Sampling Frequency

N    = 30;       % Order
Fc1  = 1;        % First Cutoff Frequency
Fc2  = 50;       % Second Cutoff Frequency
flag = 'scale';  % Sampling Flag
% Create the window vector for the design algorithm.
win = hamming(N+1);

% Calculate the coefficients using the FIR1 function.
b  = fir1(N, [Fc1 Fc2]/(Fs/2), 'bandpass', win, flag);
Hd = dfilt.dffir(b);

% [EOF]

然后只要在MATALB中直接调用这个函数就可以实现滤波了

eegn_filter=filter(filter1_50,eegn);

接下来我们来试试看效果如何.

clc;
clear;
close all;

warning('文件夹1-1的eeg');
openNSx('read');
t=745:(1/2000):750;
eega=double(NS3.Data);
eegn=eega(745*2000:750*2000);

% 1-50Hz带通滤波
eegn_filter=filter(filter1_50,eegn);

% 绘图
figure(1)

subplot(2,1,1)
plot(t,eegn,'k','linewidth',1.5);

l1=legend('原始小鼠癫痫放电');
set(l1,'linewidth',1.6,'fontsize',12,'fontweight','bold');
xlabel('Time(s)','fontsize',16,'fontweight','bold');
ylabel('\muV','fontsize',16,'fontweight','bold');
set(gca, 'linewidth',1.6,'fontsize',14,'fontweight','bold')
axis([745 750 -2000 3000]);

subplot(2,1,2)
plot(t,eegn_filter,'k','linewidth',1.5);

l2=legend('滤波后小鼠癫痫放电');
set(l2,'linewidth',1.6,'fontsize',12,'fontweight','bold');
xlabel('Time(s)','fontsize',16,'fontweight','bold');
ylabel('\muV','fontsize',16,'fontweight','bold');
set(gca, 'linewidth',1.6,'fontsize',14,'fontweight','bold')
axis([745 750 -2000 3000]);

在这里插入图片描述
就按照这种方式,我们试着画出静息态的eeg并且滤波

clc;
clear;
close all;

warning('文件夹1-2的eeg');
openNSx('read');
t=0:(1/2000):5-1/2000;
eega=double(NS3.Data);
eegn=eega(1:5*2000);

% 1-50Hz带通滤波
eegn_filter=filter(filter1_50,eegn);

% 绘图
figure(1)

subplot(2,1,1)
plot(t,eegn,'k','linewidth',1.5);

l1=legend('原始小鼠静息态脑电');
set(l1,'linewidth',1.6,'fontsize',12,'fontweight','bold');
xlabel('Time(s)','fontsize',16,'fontweight','bold');
ylabel('\muV','fontsize',16,'fontweight','bold');
set(gca, 'linewidth',1.6,'fontsize',14,'fontweight','bold')
axis([0 5 -2000 3000]);

subplot(2,1,2)
plot(t,eegn_filter,'k','linewidth',1.5);

l2=legend('滤波后小鼠静息态脑电');
set(l2,'linewidth',1.6,'fontsize',12,'fontweight','bold');
xlabel('Time(s)','fontsize',16,'fontweight','bold');
ylabel('\muV','fontsize',16,'fontweight','bold');
set(gca, 'linewidth',1.6,'fontsize',14,'fontweight','bold')
axis([0 5 -2000 3000]);

在这里插入图片描述

3. 归一化频谱分析方法

李小俚老师文章中的归一化频谱分析实例在这里插入图片描述在这里插入图片描述

(1)静息态小鼠脑电滤波前后的归一化频谱分析

滤波前 的小鼠 静息态 脑电归一化频谱:

clc;
clear;
close all;

warning('文件夹1-2的eeg');
openNSx('read');
t=0:(1/2000):5-1/2000;
eega=double(NS3.Data);
eegn=eega(1:5*2000);

% 1-50Hz带通滤波
eegn_filter=filter(filter1_50,eegn);

% 归一化频谱分析
t1=0:1/500:1;%采样步长
y= eegn;
N=length(t1); %样点个数
fs=200;%采样频率
df=fs/(N-1);%分辨率
f=(0:N-1)*df;%其中每点的频率
Y=fft(y(1:N))/N*2;%真实的幅值
Y_gui1=mapminmax(Y,0,1); %幅值归一化
%Y=fftshift(Y);

% 绘图1(滤波前后的脑电)
figure(1)

subplot(2,1,1)
plot(t,eegn,'k','linewidth',1.5);

l1=legend('原始小鼠静息态脑电');
set(l1,'linewidth',1.6,'fontsize',12,'fontweight','bold');
xlabel('Time(s)','fontsize',16,'fontweight','bold');
ylabel('\muV','fontsize',16,'fontweight','bold');
set(gca, 'linewidth',1.6,'fontsize',14,'fontweight','bold')
axis([0 5 -2000 3000]);

subplot(2,1,2)
plot(t,eegn_filter,'k','linewidth',1.5);

l2=legend('滤波后小鼠静息态脑电');
set(l2,'linewidth',1.6,'fontsize',12,'fontweight','bold');
xlabel('Time(s)','fontsize',16,'fontweight','bold');
ylabel('\muV','fontsize',16,'fontweight','bold');
set(gca, 'linewidth',1.6,'fontsize',14,'fontweight','bold')
axis([0 5 -2000 3000]);

% 绘图2(归一化频谱)
figure(2)
plot(f(1:N/2),abs(Y_gui1(1:N/2)),'r','linewidth',1.5);

l3=legend('滤波前小鼠静息态脑电归一化频谱');
set(l3,'linewidth',1.6,'fontsize',12,'fontweight','bold');
xlabel('Frequency(Hz)','fontsize',16,'fontweight','bold');
set(gca, 'linewidth',1.6,'fontsize',14,'fontweight','bold')

在这里插入图片描述
滤波后的归一化频谱只需将

y=eegn;
l3=legend('滤波前小鼠静息态脑电归一化频谱');

改为

y=eegn_filter
l3=legend('滤波后小鼠静息态脑电归一化频谱');

就可以了
在这里插入图片描述

(2)癫痫态小鼠脑电滤波前后的归一化频谱分析

滤波前 的小鼠 癫痫态 脑电归一化频谱:

clc;
clear;
close all;

warning('文件夹1-1的eeg');
openNSx('read');
t=745:(1/2000):750;
eega=double(NS3.Data);
eegn=eega(745*2000:750*2000);

% 1-50Hz带通滤波
eegn_filter=filter(filter1_50,eegn);

% 归一化频谱分析
t1=0:1/500:1;%采样步长
y= eegn;
N=length(t1); %样点个数
fs=200;%采样频率
df=fs/(N-1);%分辨率
f=(0:N-1)*df;%其中每点的频率
Y=fft(y(1:N))/N*2;%真实的幅值
Y_gui1=mapminmax(Y,0,1); %幅值归一化
%Y=fftshift(Y);

% 绘图1(滤波前后的脑电)
figure(1)

subplot(2,1,1)
plot(t,eegn,'k','linewidth',1.5);

l1=legend('原始小鼠癫痫态脑电');
set(l1,'linewidth',1.6,'fontsize',12,'fontweight','bold');
xlabel('Time(s)','fontsize',16,'fontweight','bold');
ylabel('\muV','fontsize',16,'fontweight','bold');
set(gca, 'linewidth',1.6,'fontsize',14,'fontweight','bold')
axis([745 750 -2000 3000]);

subplot(2,1,2)
plot(t,eegn_filter,'k','linewidth',1.5);

l2=legend('滤波后小鼠癫痫态脑电');
set(l2,'linewidth',1.6,'fontsize',12,'fontweight','bold');
xlabel('Time(s)','fontsize',16,'fontweight','bold');
ylabel('\muV','fontsize',16,'fontweight','bold');
set(gca, 'linewidth',1.6,'fontsize',14,'fontweight','bold')
axis([745 750 -2000 3000]);

% 绘图2(归一化频谱)
figure(2)
plot(f(1:N/2),abs(Y_gui1(1:N/2)),'r','linewidth',1.5);

l3=legend('滤波前小鼠癫痫态脑电归一化频谱');
set(l3,'linewidth',1.6,'fontsize',12,'fontweight','bold');
xlabel('Frequency(Hz)','fontsize',16,'fontweight','bold');
set(gca, 'linewidth',1.6,'fontsize',14,'fontweight','bold')




在这里插入图片描述
滤波后的归一化频谱只需将

y=eegn;
l3=legend('滤波前小鼠静息态脑电归一化频谱');

改为

y=eegn_filter
l3=legend('滤波后小鼠静息态脑电归一化频谱');

就可以了
在这里插入图片描述

4. 关于python上位机串口通信的若干问题

在这里插入图片描述
我试了试,把03E8、0032等中的0去掉也是无法成功通信的,不过加空格是可以的,如:
在这里插入图片描述
在这里插入图片描述
连这样也是可以的:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
python上位机之所以发送无效可能是因为它发送的只是字符串而非hex发送.

附录

常用希腊字母英文

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值