第二节 BCI浏览器的设计
一、VEP刺激器的设计
1.理论基础
在脑机接口的应用中,视觉刺激器既是提供视觉刺激的外部装置,同时也是与脑机接口系统中的人机界面。设计时应考虑以下因素(Chen et al.,1999):
(1)视觉刺激器能产生有效的视觉刺激,以便检测出可靠的视觉诱发电位。
(2)刺激器产生的图形刺激模块代表着受试者可能作出的不同的选择或控制,应该明确地表示出选择或控制信息。
(3)作为人机界面,应该尽可能让使用者容易接受。
(4)刺激器能产生多种不同的刺激模式,以满足不同需要,且应便于修改或升级。
虽然闪光刺激和图形刺激都能引起视觉诱发电位,在脑机接口中应用得比较多的是图形刺激方式,闪光刺激应用得比较少。
美国空军研究室在ACT项目中一个实验曾采用了白色荧光灯产生调制为13.25Hz正弦波光作为视觉刺激,使受试者产生稳态视觉诱发响应(steady state visual evoked response,SSVER),受试者通过生物反馈训练学习控制该刺激引起的SSVER幅度,通过控制SSVER幅度升高或降低来实现控制,比如当SSVER幅度低于某一阈值时,控制飞行模拟器向左转;当SSVER幅度高于某一阈值时,控制飞行模拟器向右转。
由于闪光刺激本身不包含任何选择或控制信息,受试者必须通过大量反馈训练学习控制诱发脑电的幅度,而且这种方法主要适用于二元控制,存在一定的局限性。
通过设计,控制或选择信息可以包含于图形刺激中,而且信息的表达直观、形象,更容易让人接受。因此,在本脑机接口实验中选择图形刺激作为视觉刺激方式。
2.刺激频率的考虑
根据刺激频率的不同,视觉诱发电位可分为稳态视觉诱发电位与瞬态视觉诱发电位,二者均可用于脑机接口的研究,但诱发电位的提取方法以及对视觉刺激器的要求都有所不同。
稳态视觉诱发电位信号包含刺激频率及其谐波成分,通过比较诱发电位信号频谱峰值,判别注视目标。通常采用快速傅立叶变换(FFT)进行频谱分析,提取脑机接口控制信号。采用稳态视觉诱发电位实现脑机接口的最大优点是信号提取方法简单,比较容易实现,因此,目前国内外有关稳态视觉诱发在脑机接口中的应用研究较多,国内清华大学在稳态诱发电位用于脑机接口方面进行了比较深入的研究,并取得了一些成果。
稳态诱发电位用于脑机接口存在一定的局限。首先,稳态视觉诱发电位对视觉刺激器的频率稳定性要求很严格,同一屏幕上不同的目标一定要采用不同的刺激频率,而且各个频率必须非常稳定。如果刺激频率不稳定,诱发电位信号的频谱峰值会发生变化,将直接影响脑机接口控制信号提取的正确率。其次,稳态刺激频率范围一般为6~14Hz,而人的自发脑电α波频率为8~13Hz,其信号幅度强于诱发电位,选择刺激频率还需避开α波所在频带,视觉刺激频率的选择受到一定的限制。此外,频率较高的视觉刺激比较容易引起视觉疲劳。
在我们进行的视觉刺激实验中,当视觉刺激频率较高时,有部分受试者感觉眼睛不适,眨眼次数增多,难以持续注视刺激目标。此外,还有少数受试者的瞬态诱发电位比较大,但当刺激频率较高时,其稳态视觉诱发电位幅度很小,甚至检测不到,测得的诱发电位信号的频谱难以确定刺激频率。由于稳态诱发电位在脑机接口应用亦存在一定的局限,因此研究瞬态诱发电位在脑机接口中的应用,同样具有重要的价值。需要说明的是,我们的研究目的并非否定稳态视觉脑机接口的应用,而是在脑机接口应用的一种重要补充。至于采用何种方法实现脑机接口最佳,要视应用的场合及对象的具体情况而定。
与稳态诱发电位相比,由于瞬态视觉诱发电位与刺激之间具有严格的锁时同步关系,能比较准确地检测出诱发电位信号,有利于提高脑机接口控制的准确率。这种提取诱发电位的方案对刺激频率的稳定性没有严格要求,在DOS或Windows环境下用软件实现视觉刺激器比较容易。另一方面,SSVEP信号提取通常采用FFT进行频谱分析,方法简单。相比之下,瞬态VEP信号的提取难度较大,但随着信号处理技术的发展,瞬态VEP的少次/单次快速提取已经成为可能,为采用瞬态VEP实现脑机接口提供了可能。
3.刺激模式
(1)刺激图形。视觉模式刺激一般要求有清晰的轮廓和锐利的边缘,这样可以使刺激更加有效。因此设计时,视觉刺激模块(刺激目标)通常采用矩形(方块或长方块)。
(2)选择或控制信息表示。选择或控制信息的表达,采用直接在刺激模块上标注文字、符号或在刺激模块上方插入有关图形的方法实现。比如脑机接口用于数字输入的视觉刺激界面设计时,就可直接将阿拉伯数字以醒目的颜色(如红色)标注在刺激模块上,这种表达方式直观、形象,一目了然,使用者容易理解和接受。
(3)多目标选择与控制。在脑机接口应用中,通常要求能够实现多项目标选择与控制。即在同一屏幕上,需提供多个与选择或控制项目对应的刺激模块。将多个分别标注不同文字或符号的刺激模块,排列在同一屏幕上,就可以提供多项目标选择界面。受试者通过注视需要选择的目标,来实现选择与控制。
(4)刺激方式。静止的图形不能引发视觉诱发电位,只有图形的改变或运动才能引起有效的视觉诱发电位。我们采用以刺激模块闪烁的方式引起视觉刺激,实验表明闪烁的方式可以引起视觉诱发电位。此外,刺激模块颜色的交替变化(如红/绿交替)也可引起视觉诱发电位。
(5)刺激时序。为了能够区分不同刺激模块所引起的刺激,屏幕上各个刺激模块的闪烁的时刻有所不同。刺激时序可以分为以下三大类:
①单一顺序刺激;
②不同频率复合刺激;
③同频次复合刺激。
二、视觉诱发电位的提取
1.诱发电位提取方法介绍(Chenv CW et al.,1999)
(1)累加平均法。累加平均方法是最经典的诱发电位信号处理方法,也是电生理测量中提高信噪比最常用的方法,其具体方法是:以同样的条件对人体进行多次刺激,记录每一次刺激产生的诱发电位,然后把各次记录波形以施加刺激的时刻为参考点在时间上加以对齐,进行累加平均,以平均波形代表所要提取的信号。
(2)自适应滤波。自适应滤波是Widrow等人在自适应天线研究基础上发展起来的信号处理技术,已广泛应用于通信和信号处理领域。其特点是当输入过程的统计特性未知时或者变化时,能够相应地调整自身的参数,以满足某种准则的要求。它不需要有关信号和噪声的先验知识,却能在某一最佳准则下跟踪信号。
(3)参数模型法。参数模型法是生物医学信号处理中广泛采用的方法之一,也可用于诱发电位的信号提取。建立信号模型时,把待研究信号看成是由某一输入信号激励某一系统所产生的,要求该系统的输出与待研究信号具有相似的性质。信号的不同特性可以由模型参数的不同组合表现出来,所以称为参数模型。
(4)频谱分析方法。稳态视觉诱发电位(SSVEP)包含了刺激频率及其谐波成分,采用快速傅立叶变换(FFT)对SSVEP进行频谱分析,是获取特征的最佳方法。
(5)小波分析。小波变换技术是20世纪80年代末发展起来的新理论,它的作用类似于经典的傅立叶分析,但用小波基代替了经典的正弦波基。由于小波理论所采用的基波同时具有不同的时间和频率分辨率,使得小波分析成为一种崭新的时频分析方法。小波理论在生物医学信号处理方面应用较多,其中采用小波来提取诱发电位,在减少刺激次数、提高信噪比方面有着明显的效果。
2.小波变换用于诱发电位信号提取
小波分析方法是一种比较理想的时频分析工具,特别适合分析诱发电位这类非平稳的生理信号。根据诱发电位信号及背景噪声的时频分布特征,设计了小波时频滤波器,结合少量次的累加平均,可以提高信噪比,提取到比较好的诱发电位波形,诱发电位的波形特征显著,便于识别,能满足脑机接口实验中正确识别信号的要求。采用小波滤波器提取诱发电位,可以大大减少累加平均次数,从而缩短了检测信号的所需的时间,有利于提高脑机接口的通信速度。采用上述方法对脑机接口实验中检测到的脑电信号进行分析处理,实验结果表明,对记录到的原始信号进行大约9~25次累加平均后,再采用小波滤波器进行滤波处理,可以有效地提高信噪比,得到波形特征显著且容易识别的诱发电位信号,能满足脑机接口应用的要求。
三、HTML代码的解析
BCI浏览器由于不通过鼠标和键盘进行输入控制,使用常规的方法无法满足对页面浏览的需要,这时候必须通过对客户端的html代码进行解析来完成对网页的控制。比较常用的解析方法有以下两种:
1.正则表达式
正则表达式(Regular Expression)在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”。
一个正则表达式通常被称为一个模式(pattern),指用来描述或者匹配一系列符合某个句法规则的字符串。最初的正则表达式出现于理论计算机科学的自动控制理论和形式语言理论中。在这些领域中有对计算(自动控制)的模型和对形式语言描述与分类的研究。20世纪40年代,Warren McCulloch与Walter Pitts将神经系统中的神经元描述成小而简单的自动控制元。进入50年代,数学家斯蒂芬·科尔·克莱尼利用被称为正则集合的数学符号来描述此模型。肯·汤普逊将此符号系统引入编辑器QED,然后是Unix上的编辑器ed,并最终引入grep。自此,正则表达式被广泛地用作各种Unix或者类似Unix的工具,例如Perl。
以下是在.NET中正则表达式的基本语法:
\ 将下一个字符标记为一个特殊字符,或一个原义字符,或一个后向引用,或一个八进制转义符。
^ 匹配输入字符串的开始位置。
! 匹配输入字符串的结束位置。
* 匹配前面的子表达式零次或多次。
+ 匹配前面的子表达式一次或多次。
? 匹配前面的子表达式零次或一次。
{n} n是一个非负整数,匹配确定的n次。
{n,} n是一个非负整数,至少匹配n次。
{n,m} m和n均为非负整数,其中n≤m。最少匹配n次,最多匹配m次。
x|y 匹配x或y。
[xyz] 字符集合。匹配所包含的任意一个字符。
[^xyz] 负值字符集合。匹配未包含的任意字符。
[a-z] 字符范围。匹配指定范围内的任意字符。
[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。
\b 匹配一个单词边界,也就是指单词和空格间的位置。
\B 匹配非单词边界。
\cx 匹配由x指明的控制字符。
\d 匹配一个数字字符,等价于[0-9]。
\D 匹配一个非数字字符,等价于[^0-9]。
\f 匹配一个换页符,等价于\x0c和\cL。
\n 匹配一个换行符,等价于\x0a和\cJ。
\r 匹配一个回车符,等价于\x0d和\cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等。
\S 匹配任何非空白字符,等价于[^\f\n\r\t\v]。
\t 匹配一个制表符,等价于\x09和\cI。
\v 匹配一个垂直制表符,等价于\x0b和\cK。
\w 匹配包括下划线的任何单词字符。
\W 匹配任何非单词字符。
\xn 匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长。
\num 匹配num,其中num是一个正整数。
\nm 标识一个八进制转义值或一个后向引用。
\nml 如果n为八进制数字(0-3),且m和l均为八进制数字(0-7)。
\un 匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。
基于以上规则,我们如果要对HTML代码中的超链接作匹配,可以通过以下代码:
Regex re=new Regex(@"<a[^>]+href=\s*(?:′(?<href>[^]′+)′|""(?<href>[^""]+)""|(?<href>[^>\s]+))\s*[^>]*>(?<text>.*?)</a>",RegexOptions.IgnoreCase|RegexOptions.Singleline);
其中Regex类构造函数的第一个参数就是HTML中超链接的正则表达式,第二个参数中IgnoreCase表示忽略大小写,Singleline表示模式匹配规则是基于单行匹配。
2.HTML DOM
HTML DOM是HTML Document Object Model(文档对象模型)的缩写,HTML DOM则是专门适用与HTML/XHTML的文档对象模型。熟悉软件开发的人员可以将HTML DOM理解为网页的API。它将网页中的各个元素都看成一个个对象,从而使网页中的元素也可以被计算机语言获取或者编辑。
HTML DOM把HTML文档呈现为带有元素、属性和文本的树结构(节点树,见图7-1)。
图7-1
根据HTML DOM的结构,我们使用c#将HTML转化为DOM Tree。
//DOM_node是当前的HTML DOM节点
//Tree_node是当前插入树的结点
private void InsertDOMNodes(IHTMLDOMNode parentnode,TreeNode tree_node)
{
int sibing=0;//当前结点在兄弟结点之间的顺序,所有的结点之间通过","隔开
if(parentnode.hasChildNodes())
{
//level++;
//pathstring=pathstring+","+level;
IHTMLDOMChildrenCollection allchild=(IHTMLDOMChildrenCollection) parentnode.childNodes;
int length=allchild.length;
for(int i=0;i<length;i++)
{
string instring=pathstring;
instring=instring+","+sibing++;
IHTMLDOMNode child_node=(IHTMLDOMNode)allchild.item(i);
TreeNode tempnode=tree_node.Nodes.Add(child_node.nodeName+"_"+instring);
//string tmp=
InsertDOMNodes(child_node,tempnode);
pathstring=instring;
}
}
}
private void eVIPSBrowser_DocumentComplete(object sender,AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent e)
{
pathstring="0";
level=0;
DOMTreeView.Nodes.Clear();
IHTMLDocument3 HTMLDocument=(IHTMLDocument3)eVIPSBrowser.Document;
IHTMLDOMNode rootDomNode=(IHTMLDOMNode)HTMLDocument.documentElement;
TreeNode root=DOMTreeView.Nodes.Add("HTML"+"_"+ pathstring);
InsertDOMNodes(rootDomNode,root);
}
四、浏览器的框架设计
BCI浏览器和刺激器同时在一个窗体中,系统结构如图7-2所示:
图7-2 BCI浏览器的处理流程图
在这张处理流程图中,刺激器产生的刺激信号诱发被试者产生脑电波,通过采集设备将其进行A/D转换、信号放大、数据预处理等步骤将其发送给信号处理模块,经过信号处理和特征抽取运算将处理以后所产生的特征信号将发送给浏览器的控制模块,最终通过发送控制信号来实现对浏览器的控制。
浏览器的前台采用c#2005开发,后台数据处理程序采用MATLAB开发,然后编译为COM组件供主程序调用,具体的实现方法在之前的章节已经有相关的介绍,这里就不再详述。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。