2008年8月6日星期三

锋电位分析工具SPKtool

SPKtool是一个在MATLAB平台上编写的神经元锋电位分析工具软件,具有锋电位检测、聚类以及放电序列统计分析等功能,可以满足神经信号分析的大部分要求。并且带有批处理功能,可以加快大量数据的分析速度。SPKtool集成了锋电位分析中常用的成熟算法,并且代码是开放的,方便使用者进行二次开发,根据需要扩展其功能。软件具有直观的图形化界面和详细的说明文档,使用方便。

其功能包括:

锋电位检测:

Ø 显示记录信号中锋电位峰值的分布曲线;

Ø 通过阈值检测锋电位;

Ø 通过原始信号、能量、非线性能量进行检测;

Ø 三种锋电位波形对齐方式:阈值、波谷、波峰。

Ø GUI交互式界面。

特征提取:

Ø 多种常用特征:PCA,峰值、能量等;

Ø 小波方法;

Ø 特征分别图,特征密度分布图等。

聚类分析:

Ø K-means;

Ø 模板匹配;

Ø 基于高斯混合模型的EM算法;

Ø Valley seeking;

Ø 通过绘制轮廓线,手动聚类;

Ø 对聚类结果进行合并,删除等。

动作电位串分析:

Ø 相邻动作电位间隔分布图(ISI);

Ø Poincare map;

Ø 相关函数图;

Ø 锋电位分布光栅图;

Ø 放电频次直方图;

Ø 刺激前后放电直方图(PSTH);

Ø 刺激前后放电光栅图。

软件及使用手册下载地址:http://groups.google.com/group/liuxq-works/web

界面截图:

2008年6月18日星期三

如何将曲线以不连续的形式画出来

最近有些“忙”, blog也没有什么内容好更新。弄点简单的东西,凑个篇幅。
MATLAB中的数据,用plot画出来一般是一条连续的曲线,怎么用将它画成离散的形式呢?
例如下面的连续正弦曲线,怎么画成后面的离散形式呢?

这个方法很简单,这个上图中的连续曲线:
x = 1:100;
y = sin(x/20);
figure, plot(x,y);
不连续曲线:
y1 = y(1:2:100);
y2 = y(2:2:100);
x1 = x(1:2:100);
x2 = x(2:2:100);
figure, plot([x1;x2], [y1;y2]);
简单点来说,就是将每段曲线的起点和终点的横纵坐标分别放在一个2×N的数组中。
在这个不连续曲线中,每个线段都是一个绘图对象,所以具有不同的颜色。这种方法的限制是每条连续线段必须包含相同的数据点数。否则的话,只能通过循环来逐段绘制。
实际上,如果数据中有NaN(即:Not a Number),该点是不会绘出来的,这样也可以形成不连续效果。
仍然是上面的曲线:
yn = y;
yn(3:3:100) = NaN;
figure, plot(x, yn)
得到下图。这种方法就没有了各段尺度相同的限制。简单点来说,就是在需要断开的数据点(包括横纵坐标)前面插入NaN。这样的不连续线仍然是作为一个整体的。

2008年5月30日星期五

十六国魏晋南北朝更迭

最近读夏曾佑的《中国古代史》,制作了一幅从西晋到隋即十六国和南北朝时期的更迭示意图。可能会有一些错误。

参考资料:
http://tieba.baidu.com/f?kz=45314607 ;
http://www5c.biglobe.ne.jp/~paruwees/Histoly_Goko.html
这里有一幅十六国的地理位置示意图:
http://ntpicc.51.net/cgx/images/5-16.jpg 。
SVG源文件:http://liuxqsmile.blogbus.com/files/12121506310.svg

2008年5月21日星期三

Inkscape中文化工作

Chinese translation of Inkscape interface

Inkscape 0.46的界面中共有3500项字符串,翻译的工作量很大。Chris Jia 在2006、2007年做了很多工作。由于Inkscape仍然在不断修改完善,到2008年初,我开始参与这项工作时,只有60%左右的完成度。经过一 段时间的努力,在0.46版发布之前,我将这个比例提高到了89%。
我并不从事图形图像方面的工作,专业知识不足,因此汉化后的界面中肯定存在各种问题。大家在使用Inkscape过程中,如果对一些名词或描述的译法不满意,欢迎来信指明。
如果你觉得某个中文译法很别扭,想看一看相应的英文,应该怎么做呢?在中英文界面间切换需要修改locale(Windows需要修改“区域和语言设置”),太麻烦。
简单一些的方法是查看Inkscape的界面翻译文件。到下面的地址下载中文界面文件zh_CN.po:
http://inkscape.svn.sourceforge.net/viewvc/inkscape/inkscape/trunk/po/
Linux上的编辑器一般都支持这种格式的文件,Windows上可以用Poedit 。打开这个文件,用搜索功能查找相应的中文字符,就可以同时找到相应的英文。实际上,界面汉化就是在这个文件上进行的,有些时候很难确定一些词句在界面上的具体位置,错漏也就在所难免了。

另外,我还翻译了一些Inkscape教程,已经可以在Inkscape官方网站上看到:
http://www.inkscape.org/doc/index.php?lang=en
另外,我的博客中也有相应的内容。

2008年5月2日星期五

锋电位分析软件MClust简介

MClust 是一个MATLAB上的锋电位分类工具包,用于四电极胞外记录信号的分类,也可以用于单电极的情况。程序可以直接读入Neuralynx、Axona等记录软件的数据,也可以自己编写程序,读入特定的数据。程序本身只有分类功能,因此读入的数据必须是提取的锋电位,不能是连续记录信号。可以设置PCA、幅度等多种特征提取方法。分类方法有三种,除手动外,还有BubbleClust和KlustaKwik 两种自动聚类方法。另外这个软件的文档也很详细。
打开该软件后,首先设置好特征,以及通道数目,选择数据加载方法,然后选中“Creat/Load FD files”,在弹出文件框中选择数据文件。如果没有错误的话,就可以进行聚类了。如果要重新开始分析,或者设置不同的特征,需要先选择“Clear workspace”,然后再从头来过。
手动聚类界面:
两种自动聚类方法需要借助该软件中的批处理功能,参考说明文档中的“Batch Processing”部分。然后再用MClust对聚类的结果进行二次处理。

2008年4月20日星期日

寻谷聚类算法

valley seeking clustering method
所谓的valley seeking聚类方法,就是在特征空间中寻找特征分布密度较小的位置,作为聚类的边界。如下图中的2维特征空间,形成5个分布密度较高的峰,如果能确定峰-峰间的谷的位置,也就等于确定了各个类别的边界,从而完成聚类。算法的目标是非常直观的。
这种聚类方法的流程可以简单描述如下:
1. 确定初始半径,可以取为样本标准差的某个倍数;初始半径的设置影响聚类的数目;
2. 在该半径范围内,确定每个特征的近邻数目,以及近邻的集合。 如果特征的数目为N,需要初始化一个N×N的数组来存放每个特征的近邻编号,计算完成后,可以根据最大近邻集合中元素的数目,删去多余的元素。
3. 如果一个特征的近邻数目,超过它每一个近邻各自的近邻数目,则该特征确定了上图中一个特征密度峰。如此,设置一个最小近邻标准,可以找出全部五个峰。
4. 五个峰确定5个类别,给每个峰的近邻特征设置类别标记;
5. 将所有特征按照近邻数目从大到小排序;
6. 从近邻数目最大的特征开始,看其近邻中属于哪一类别的最多,就将该特征也归入这一类;如此,完成全部特征的聚类。
在上面的聚类结果中,右上角有几个较密集的特征没有归类,反而归类了旁边更分散的几个特征。出现这种问题的原因是这几个特征的形成一个小的局部峰值,这些特征的聚类次序在周围特征之前,而这时,周围的这些特征还没有获得聚类信息。

2008年4月19日星期六

一辆伪山地车的悲惨遭遇

A Bicycle's miserable life

2005年的时候,我决定丰富自己的运动生活,跑步之外,再加点别的东西,为了不至于还是在原地转圈圈,就选择了自行车,去体验人造风的猎猎吹拂,转一个更大的圈圈。
在自行车论坛上泡了几周,又去商场转了几圈。苦于钱包不鼓,就买了现在这辆,捷马TXT 5500,新车当然是很漂亮的,可惜当初没有合影留念,网上google了一下,又百度了一下,连个图片都找不到。全钢的车身很重,锻炼身体嘛,重才有效 果!四连杆的车架,多了个起副作用的后避震,但看上去总还有一点“运动”气质。

拆掉前后挡泥板,拔高车座,“运动”气质又调高了几分。那时候实验室在一楼,车子放在房间里,每天看它几十次,喜不自胜,俨 然一自行车运动高手。学校离紫金山近,往山脚下转悠几次,踩踩点,然后就开始赶着车轱辘往山上滚了。上天文台,头陀岭,再从青年路下来。不定期地在这条路 上颠来倒去,一个更大的圈形成了。
说起来,这辆伪山地车应该像它的伪自行车爱好者主人一样骄傲了,出身贫贱,但也可以经常呆 立在头陀岭索道边的平台上,俯瞰南京灰蒙蒙的城市景观。这通常是身价数倍于它的同类才能享受的待遇。从这个意义上说,它反倒是很幸运的,尽管上山时链条和 齿盘咬牙切齿,下山时车架和前叉咣当作响。

当然,不幸还是主流,它的两个轮子不动的时间就跟主人的臀部不动的时间一样长。更糟的是,它被请出了房间,只能在学校这个大工地的车棚下面呆着,忍受灰尘和雨水,以及某些人试图让它重回正常生命轨迹的努力。为了抵抗这种努力,我给它配了两把锁。
莫名其妙地前胎破了,趁机去买了胶水和微型打气筒,自己将就着补好了。过了几个月,后胎又破了,这次锁上有了碰撞的痕迹。后来,不骑的时候,我都会把轮胎的气放掉,这下总扎不穿了吧。去年,自行车也开始主动配合,前胎自动放气,打次气可以支持个五六小时,正好够绕上一圈。
长期放在外面,生锈是难免的,座垫杆和曲柄上没有上漆,早早地就生了锈,只能经常用WD40喷一下,让锈别堆得太过分。轮圈和辐条也失去了光泽,“运动”气质也只能靠高昂的车座撑撑面子了。

一次取车的时候,发现后轮锁上套了一个塑料袋,里面有一些浅绿色的黏糊糊的东西,我有些莫名其妙,什么人吃了东西垃圾乱扔,还故意扔到我锁上?等到发现锁口上锈迹斑斑,钥匙也拧不动时,我才明白过来,撬不开拿酸液来腐蚀?这也想得出!
幸好我有WD40。
前几天再去看时,后轮上的锁怎么又变了?再一看,原来是上面的塑料套没了。又遭黑手了,还好两把锁给面子。不过,丢车的危险身已经像那些闪闪发光的部件一样越来越少,坚持到我离开南京应该不是问题了。