在Window XP中,通过Internet连接共享可以与其它计算机共享网络连接,一拖多共同上网。在网络连接中启用该功能时,可能会弹出错误信息:RPC Server unavaliable(RPC 服务器不可用)。
解决的方法是在控制面板->管理工具->“服务”中启动“DHCP Client”,并将启动方式改为“自动”。
在我的机子上,未启动该服务时,并不总是弹出错误提示,但一段时间后,网络连接自动断开,连主机也不能上网。在网络连接中先“禁用”外网网卡,再重新“启用”后又恢复正常。启用该服务可以解决这个问题。
参考链接:http://www.legend.ws/blog/tips-tricks/rpc-server-unavailable-ics/
本来想用Windows自带的ICS与另一机子共享上网的,弄了半天还是不行,一个很奇怪的现象是,主机可以ping通客户机,而客户机只有在主机 ping客户机后很短的时间内才能ping通主机。试了网上的各种解决方法,打开各种服务,关闭防火墙等等,还是不通。最后装了Sygate就马上解决问 题了。
2008年4月15日星期二
2008年4月13日星期日
MATLAB中的正态分布检验
要对一组样本进行正态性检验,在MATLAB中,一种方法是用normplot画出样本,如果都分布在一条直线上,则表明样本来自正态分布,否则是非正态分布。
MATLAB中也提供了几种更正式的检验方法:
kstest Kolmogorov-Smirnov 正态性检验,将样本与标准正态分布(均值为0,方差为1)进行对比,不符合正态分布返回1,否则返回0;该函数也可以用于其它分布类型的检验;
lillietest Lilliefors test。 与kstest不同,检验目标不是标准正态,而是具有与样本相同均值和方差的正态分布。
jbtest Jarque-Bera test。与 Lilliefors test 类似,但不适用于小样本的情况。
MATLAB中也提供了几种更正式的检验方法:
kstest Kolmogorov-Smirnov 正态性检验,将样本与标准正态分布(均值为0,方差为1)进行对比,不符合正态分布返回1,否则返回0;该函数也可以用于其它分布类型的检验;
lillietest Lilliefors test。 与kstest不同,检验目标不是标准正态,而是具有与样本相同均值和方差的正态分布。
jbtest Jarque-Bera test。与 Lilliefors test 类似,但不适用于小样本的情况。
2008年3月31日星期一
MATLAB中的一些小技巧(2)
MATLAB中的一些小技巧(2)
1. Ctrl+D打开子程序
在MATLAB的Editor中,将输入光标放到一个子程序名称中间,然后按Ctrl+D可以打开该子函数的m文件。当然这个子程序要在路径列表中(或在当前工作路径中)。实际上该快捷键对应右键菜单中“Open Selection”命令。
2. 列出依赖函数
在Editor菜单中,选择Tools->Show Dependency Report,可以列出当前m文件调用的子程序。如果需要将程序移动到别的电脑上,使用这个工具可以确保不会漏掉一些东西。这个工具也适用于文件夹。
3. 显示鼠标数据内容
调试程序过程中,程序运行到断点后,将鼠标移到一个变量名上,将会弹出一个方框,显示该变量的内容。不在调试状态下,怎么使用这个功能呢?在File菜单 中打开设置选项(Preferences),选择 Editor/Debugger -> Display,在 "General Display Options" 中选择 "Enable datatips in Edit Mode "。
4. 单元数组的基本操作
清除cell中的元素
cell的两种引用方式
a(1) 得到 {'str1'}, 因为a是一个cell数组,所以其中的每一个元素都是一个cell,
而a{1} 得到 'str1'。
5. MATLAB 中的字体平滑
在File菜单中打开设置选项(Preferences),在 Fonts 中,选择底部的 “Using antialiasing to smooth desktop fonts” ,MATLAB 中默认字号比较小,可以调大一些(可以在下拉菜单中输入数字,更精细地控制文字大小)。有衬线字体打开反锯齿后可能会看起来“发虚”。
6. 同步缩放坐标轴linkaxes
linkaxes命令,可以将一个figure中的各个axes指定相同的坐标范围,实现各个绘图同 步放大、缩小。在缩放一个绘图时,其它也会同步缩放。可以同时关联x、y轴,也可以只关联一个坐标轴。
7. 鼠标绘图
MATLAB Help中的Interactive Plotting一文提供了一种在figure中用鼠标绘图的方法,主要使用ginput函数。
8. GUI程序关闭按钮的callback
为GUI窗口右上角的关闭按钮添加回调函数:在GUIDE中打开GUI,在没有控件的地方单击,选中整个figure,右键菜单中选择 View Callbacks -> CloseRequestFcn,m文件中将自动添加该回调函数,输入代码就可以了。
1. Ctrl+D打开子程序
在MATLAB的Editor中,将输入光标放到一个子程序名称中间,然后按Ctrl+D可以打开该子函数的m文件。当然这个子程序要在路径列表中(或在当前工作路径中)。实际上该快捷键对应右键菜单中“Open Selection”命令。
2. 列出依赖函数
在Editor菜单中,选择Tools->Show Dependency Report,可以列出当前m文件调用的子程序。如果需要将程序移动到别的电脑上,使用这个工具可以确保不会漏掉一些东西。这个工具也适用于文件夹。
3. 显示鼠标数据内容
调试程序过程中,程序运行到断点后,将鼠标移到一个变量名上,将会弹出一个方框,显示该变量的内容。不在调试状态下,怎么使用这个功能呢?在File菜单 中打开设置选项(Preferences),选择 Editor/Debugger -> Display,在 "General Display Options" 中选择 "Enable datatips in Edit Mode "。
4. 单元数组的基本操作
清除cell中的元素
cellname(n1:n2) = [];
合并如下的两个cell数组a = {'str1', 'str2', 'str3'};
b = [1:3];
b = [1:3];
- c = [a(1:2), b, a(3)];
得到:c = { 'str1' 'str2' [1x3 double] 'str3'}
- 而 c = {a(1:2), b, a(3)}
则得到 c = {1x2 cell} [1x3 double] {1x1 cell}
cell array本质上是数组,前一种操作方式与普通数组的操作方式相同,而后一种方式则是将逗号分隔的各个元素分别一个cell,整体作为一个cell数组。cell的两种引用方式
a(1) 得到 {'str1'}, 因为a是一个cell数组,所以其中的每一个元素都是一个cell,
而a{1} 得到 'str1'。
5. MATLAB 中的字体平滑
在File菜单中打开设置选项(Preferences),在 Fonts 中,选择底部的 “Using antialiasing to smooth desktop fonts” ,MATLAB 中默认字号比较小,可以调大一些(可以在下拉菜单中输入数字,更精细地控制文字大小)。有衬线字体打开反锯齿后可能会看起来“发虚”。
6. 同步缩放坐标轴linkaxes
linkaxes命令,可以将一个figure中的各个axes指定相同的坐标范围,实现各个绘图同 步放大、缩小。在缩放一个绘图时,其它也会同步缩放。可以同时关联x、y轴,也可以只关联一个坐标轴。
7. 鼠标绘图
MATLAB Help中的Interactive Plotting一文提供了一种在figure中用鼠标绘图的方法,主要使用ginput函数。
8. GUI程序关闭按钮的callback
为GUI窗口右上角的关闭按钮添加回调函数:在GUIDE中打开GUI,在没有控件的地方单击,选中整个figure,右键菜单中选择 View Callbacks -> CloseRequestFcn,m文件中将自动添加该回调函数,输入代码就可以了。
2008年3月25日星期二
开源矢量绘图软件Inkscape 0.46 发布!
新版本的执行效率显著提升,同时引入了众多新特性。其中包括:
- 对话框可以停靠在编辑窗口中;
- 渐变的修改可以完全在画布上执行;
- 新的油漆桶工具,可以为封闭区域填色;
- 新的立方体工具,有助于使绘图更符合透视规律;
- 新的扭曲工具,为路径和对象提供了更直观的编辑方式;
- 新的实时路径效果,可以为路径提供“笔刷”等多种灵活的路径效果;
- 改进的色彩管理工具,除sRGB之外,还提供对其它色彩模式的支持;
- 实现了多数 SVG 滤镜,并提供了强大的滤镜堆栈编辑界面。
== 下载Inkscape 0.46 ==
Inkscape 0.46 已经包含在Ubuntu Hardy (8.04)中,可以正常安装;
Ubuntu Gutsy (7.10) 可以通过如下方式安装:
在Admin : Software Sources : Third-Party Software: 中添加
deb http://ppa.launchpad.net
deb-src http://ppa.launchpad.net
Macintosh OS X 用户可以下载 Leopard 通用安装包:
http://sourceforge.net/project
Fedora 、Debian 以及 Windows 等其它平台的安装包也将于近期发布。
Inkscape网站
http://www.inkscape.org/
完整的Release Notes见这里:
http://wiki.inkscape.org/wiki
新功能截图及介绍:
http://inkscape.org/screenshot
MATLAB 中GUI子程序的参数传递
输入参数传递:
比如子GUI的名称为subGUI, 设想的参数输入输出为:[out1, out2] = subGUI(in1, in2)
在subGUI的m文件中(由GUIDE自动产生):
1.第一行的形式为:function varargout = subGUI(varargin)
该行不用做任何修改;varargin 和 varargout 分别是一个可变长度的cell数组(MATLAB帮助文件中有说明)。输入参数in1和in2保存在varargin中,输出参数out1,out2包含在varargout中;
2.在subGUI的OpeningFcn中,读入参数,并用guidata保存,即:
handles.in1 = varargin{1};
handles.in2 = varargin{2};
guidata(hObject, handles);
返回参数的设置:
1. 在GUI子程序的OpeningFcn函数的结尾加上uiwait(handles.figure1); figure1是subGUI的Tag;
2. subGUI中控制程序结束(如"OK”和"Cancel"按钮)的callback末尾加上uiresume(handles.figure1),不要将delete命令放在这些callback中;
3. 在子GUI的OutputFcn中设置要传递出去的参数,如 varargout{1} = handles.out1;varargout{2} = handles.out2;末尾添加 delete(handles.figure1); 结束程序。
比如子GUI的名称为subGUI, 设想的参数输入输出为:[out1, out2] = subGUI(in1, in2)
在subGUI的m文件中(由GUIDE自动产生):
1.第一行的形式为:function varargout = subGUI(varargin)
该行不用做任何修改;varargin 和 varargout 分别是一个可变长度的cell数组(MATLAB帮助文件中有说明)。输入参数in1和in2保存在varargin中,输出参数out1,out2包含在varargout中;
2.在subGUI的OpeningFcn中,读入参数,并用guidata保存,即:
handles.in1 = varargin{1};
handles.in2 = varargin{2};
guidata(hObject, handles);
返回参数的设置:
1. 在GUI子程序的OpeningFcn函数的结尾加上uiwait(handles.figure1); figure1是subGUI的Tag;
2. subGUI中控制程序结束(如"OK”和"Cancel"按钮)的callback末尾加上uiresume(handles.figure1),不要将delete命令放在这些callback中;
3. 在子GUI的OutputFcn中设置要传递出去的参数,如 varargout{1} = handles.out1;varargout{2} = handles.out2;末尾添加 delete(handles.figure1); 结束程序。
在GUI的OpenFcn中,如果不加uiwait, 程序会直接运行到下面,执行OutputFcn。也就是说程序一运行,返回值就确定了,再在其它部分对handles.output作更改也没有效果了。
加上uiwait后,只有执行了uiresume后,才会继续执行到OutputFcn,在此之前用户有充分的时间设置返回值。
通过以上设置以后,就可以通过 [out1, out2] = subGUI(in1, in2) 的形式调用该子程序。
在一个GUI中调用另一个GUI时,主GUI不需要特别的设置,同调用普通的函数一样。在打开子GUI界面的同时,主程序还可以响应其它的控件。不需要担心子GUI的返回值被传错了地方。
2008年3月22日星期六
磁共振成像MRI的简单介绍
磁共振成像MRI的简单介绍
MRI图像中,灰度反映了组织中水的含量http://www.umshp.org/rs/mrict.htm
那么MRI设备是怎么得到人体内部的氢原子的含量呢,当然就像它的名字那样,通过核磁共振,本来这种成像方式应该成为核磁共振成像,为了消除病人的恐惧,去掉了里面的“核”字。
氢原子核实际上就是一个带电的质子,原子核绕其中心旋转,我们可以认为在原子核上产生了电流,这个环形的电流就使原子核产生了磁场。可以将H原子核看成类似于地球,具有南北磁极,同时也在不停地绕自身旋转(自旋)。
将这个小地球放入一个更强的磁场时,由于自转方向与磁场力方向不同,原子核在自转的同时,将绕着磁场方向公转,这种现象叫进动。磁场强度不同,进动的情况也不同。 实际上由于组织内部分子的热运动,只有极少部分的氢原子核能够发生这种进度,但正是这极少数的原子核才是磁共振成像成为可能。当然磁场的强度越高,发生进度的原子核越多,对成像也越有利。

我们知道,电磁波也是有能量的,当用电磁波作用于发生进动的原子核时,原子核吸收电磁波的能量,进动的形式会发生变化。不过,由于原子核的量子特性,原子核的能量并不是平滑变化,而是会在特定的能级间跳跃,所以只有特定频率的电磁波才会被原子核吸收,发生能量的跃迁,也就是核磁共振。用来激发核磁共振的电磁波的频率很高,属于射频范围。磁场强度不同,氢原子核的进动就不同,吸收的电磁波的频率也就不同。
处于较高能级的原子核是不稳定的,在激发电磁波取消后,它会重新回到低能量状态,同时将能量仍以电磁波的形式释放出来,发射电磁波的频率同激发的频率是一致的。释放能量的原子核越多,产生的电磁波的强度也越高。通过检测设备,我们就可以将这个释放的电磁波检测出来,根据这个电磁波的性质,我们就可以判断出氢原子核的相对密度。

到这里我们应该很清楚了,要测出组织内的氢原子核的密度,需要一个很强的磁场,一个射频发射装置,一个射频检测装置,当然还要有相应的控制装置,计算机软件处理等。但这还是不够的,在这种情况下如果将一个组织放入其中扫描,由于磁场是均匀的,组织内每一处的氢原则核都发生进动,在射频下都共振,检测出来的信号也是全体组织的,将整个脑袋放进去也就是一个大亮点而已。
解决的方法是,在主磁场的基础上,再叠加一个空间上均匀变化的磁场(称为梯度场),使组织内不同位置的氢原子核的进动情况都不同,然后用不同频率的射频分别激励,各个位置的原子核依次响应,放射出不同频率的电磁波,空间上的差异就检测出来了。
通常在医院看到的MRI设备是下面这样的,一个大圆筒和一个病人躺的工作台。你肯定能猜到这个大圆筒是干什么的了。没错,它就是一个超级大磁铁。可以产生磁场的方法无外乎两种,永久性的磁铁和电磁效应产生磁场。永久性的磁铁磁场 弱,而且又大又沉,一般用在低端设备上,场强低于0.3特斯拉。而更高场强的设备只能用电来驱动。但较高的场强,不仅需要很大的功率,线圈的散热也很成问题。
现在最多的是通过超导体产生的永磁场。比如图中这台GE的MRI,场强为3特斯拉,而地球磁场的强度仅仅为0.000005特斯拉。
超导需要极低的温度,因此MRI的励磁线圈浸泡在液态氦中,温度为4.2K,在线圈中通电后,切断电源,电流就在线圈中永无休止,永不衰减地流动,并且产生强大的磁场。人们早就发现了在更高温度下具有超导性的材料,为什么还要还用这么低的温度呢?原来,大部分超导材料在较强的磁场作用下都会失去超导性,直到1970年代,人们才发现了可以在强磁场中工作的超导体。
超导线圈要放在液氦中,而盛放液氦的容器与环境总是存在一些热交换,会导致液氦不断蒸发。为了减少液氦的消耗,盛放液氦的容器又放在液氮中,液氮的温度77K比液氦高,但比室温又低多了,液氦与环境的温度差降低,蒸发量也就下降了。当然,液氮也会不断蒸发,但它的价格比较便宜。
前面提到,需要一个空间上变化的磁场,来确定成像的位置信息。这个就是梯度磁场,梯度磁场是用普通线圈通过电磁效应产生的,强度要远小于主磁场。在快速成像中,梯度磁场实际上是变化的,这引起金属器件受力变化,产生变形,这是噪声的主要来源。梯度磁场的线圈位于主磁场的内侧,更靠近圆筒内壁的地方。
射频线圈的形式多种多样。用于大脑成像的射频线圈一般是圆筒形,扫描时套在头部。由于射频的发射和接受在时间上是分开的,所以可以用一个线圈同时充当发射线圈和接受线圈,在两种模式下交替工作。也可以用两个独立的线圈。射频信号被线圈接受后,经过复杂的计算机处理,生产影像。
MRI的主要缺点是,病人被限制在一个狭小的空间里,扫描的部位要一动不动,病人体验不够好。也有一些是开放式的结构,不过一般场强较低,能力有限。
如果你看美剧《豪斯医生》,对MRI这个词一定感到很熟悉,在豪斯的诊断中几乎是必不可少的环节。那么什么是MRI,它又是怎样工作的呢?
因为工作的关系,我曾经接触过MRI一段时间,简单查阅过一些文献。在这里,我想从一个外行的角度,对MRI做一些形象的描述。
MRI的全称是Magnetic Resonance Imaging,即磁共振成像,它在医学上的应用有些类似于CT和X光。MRI设备对人体的某些部位(如大脑等),进行扫描,得到氢原子核H在组织中的密度分布。不同的组织,水的含量也是不同的,病变的组织的水含量又与正常的组织不同,通过对比,来了解组织的状况,以作为诊断的重要依据。
那么MRI设备是怎么得到人体内部的氢原子的含量呢,当然就像它的名字那样,通过核磁共振,本来这种成像方式应该成为核磁共振成像,为了消除病人的恐惧,去掉了里面的“核”字。
氢原子核实际上就是一个带电的质子,原子核绕其中心旋转,我们可以认为在原子核上产生了电流,这个环形的电流就使原子核产生了磁场。可以将H原子核看成类似于地球,具有南北磁极,同时也在不停地绕自身旋转(自旋)。
将这个小地球放入一个更强的磁场时,由于自转方向与磁场力方向不同,原子核在自转的同时,将绕着磁场方向公转,这种现象叫进动。磁场强度不同,进动的情况也不同。 实际上由于组织内部分子的热运动,只有极少部分的氢原子核能够发生这种进度,但正是这极少数的原子核才是磁共振成像成为可能。当然磁场的强度越高,发生进度的原子核越多,对成像也越有利。
我们知道,电磁波也是有能量的,当用电磁波作用于发生进动的原子核时,原子核吸收电磁波的能量,进动的形式会发生变化。不过,由于原子核的量子特性,原子核的能量并不是平滑变化,而是会在特定的能级间跳跃,所以只有特定频率的电磁波才会被原子核吸收,发生能量的跃迁,也就是核磁共振。用来激发核磁共振的电磁波的频率很高,属于射频范围。磁场强度不同,氢原子核的进动就不同,吸收的电磁波的频率也就不同。
到这里我们应该很清楚了,要测出组织内的氢原子核的密度,需要一个很强的磁场,一个射频发射装置,一个射频检测装置,当然还要有相应的控制装置,计算机软件处理等。但这还是不够的,在这种情况下如果将一个组织放入其中扫描,由于磁场是均匀的,组织内每一处的氢原则核都发生进动,在射频下都共振,检测出来的信号也是全体组织的,将整个脑袋放进去也就是一个大亮点而已。
解决的方法是,在主磁场的基础上,再叠加一个空间上均匀变化的磁场(称为梯度场),使组织内不同位置的氢原子核的进动情况都不同,然后用不同频率的射频分别激励,各个位置的原子核依次响应,放射出不同频率的电磁波,空间上的差异就检测出来了。
通常在医院看到的MRI设备是下面这样的,一个大圆筒和一个病人躺的工作台。你肯定能猜到这个大圆筒是干什么的了。没错,它就是一个超级大磁铁。可以产生磁场的方法无外乎两种,永久性的磁铁和电磁效应产生磁场。永久性的磁铁磁场 弱,而且又大又沉,一般用在低端设备上,场强低于0.3特斯拉。而更高场强的设备只能用电来驱动。但较高的场强,不仅需要很大的功率,线圈的散热也很成问题。
现在最多的是通过超导体产生的永磁场。比如图中这台GE的MRI,场强为3特斯拉,而地球磁场的强度仅仅为0.000005特斯拉。
超导需要极低的温度,因此MRI的励磁线圈浸泡在液态氦中,温度为4.2K,在线圈中通电后,切断电源,电流就在线圈中永无休止,永不衰减地流动,并且产生强大的磁场。人们早就发现了在更高温度下具有超导性的材料,为什么还要还用这么低的温度呢?原来,大部分超导材料在较强的磁场作用下都会失去超导性,直到1970年代,人们才发现了可以在强磁场中工作的超导体。
超导线圈要放在液氦中,而盛放液氦的容器与环境总是存在一些热交换,会导致液氦不断蒸发。为了减少液氦的消耗,盛放液氦的容器又放在液氮中,液氮的温度77K比液氦高,但比室温又低多了,液氦与环境的温度差降低,蒸发量也就下降了。当然,液氮也会不断蒸发,但它的价格比较便宜。
前面提到,需要一个空间上变化的磁场,来确定成像的位置信息。这个就是梯度磁场,梯度磁场是用普通线圈通过电磁效应产生的,强度要远小于主磁场。在快速成像中,梯度磁场实际上是变化的,这引起金属器件受力变化,产生变形,这是噪声的主要来源。梯度磁场的线圈位于主磁场的内侧,更靠近圆筒内壁的地方。
射频线圈的形式多种多样。用于大脑成像的射频线圈一般是圆筒形,扫描时套在头部。由于射频的发射和接受在时间上是分开的,所以可以用一个线圈同时充当发射线圈和接受线圈,在两种模式下交替工作。也可以用两个独立的线圈。射频信号被线圈接受后,经过复杂的计算机处理,生产影像。
MRI的主要缺点是,病人被限制在一个狭小的空间里,扫描的部位要一动不动,病人体验不够好。也有一些是开放式的结构,不过一般场强较低,能力有限。
参考资料:关于低温的概念、技术和应用
2008年3月18日星期二
Nonlinear energy:非线性能量
Nonlinear energy:非线性能量
对神经信号进行锋电位提取时,一种方法是直接对采集信号设置阈值,提取波形;另一种方法是对信号的能量分布曲线设置阈值。 常用的能量计算有两种,线性能量(Linear energy)和非线性能量(Nonlinear energy)。
线性能量相当于直接对数据点求平方,相当于即时功率。 而非线性能量是指,幅度平方与频率平方的乘积,即(Amplitude^2) * (Frequency^2),由于频率的引入,这种能量计算方法可以放大突变信号(频率较高)的能量,在锋电位提取中可能会获得更好的效果。
非线性能量的计算一般简化为:
一个典型的锋电位波形的非线性能量:
不过,非线性能量对信号中的毛刺非常敏感,如下图:
对神经信号进行锋电位提取时,一种方法是直接对采集信号设置阈值,提取波形;另一种方法是对信号的能量分布曲线设置阈值。 常用的能量计算有两种,线性能量(Linear energy)和非线性能量(Nonlinear energy)。
线性能量相当于直接对数据点求平方,相当于即时功率。 而非线性能量是指,幅度平方与频率平方的乘积,即(Amplitude^2) * (Frequency^2),由于频率的引入,这种能量计算方法可以放大突变信号(频率较高)的能量,在锋电位提取中可能会获得更好的效果。
非线性能量的计算一般简化为:
NEO = v(t)2-v(t-1)*v(t+1)。v(t)表示 t 时刻的信号幅度,NEO 即非线性能量运算符 Nonlinear energy operator。 参考:http://www.nbb.cornell.edu/neurobio/land/PROJECTS/spikeSort/index.html 一个典型的锋电位波形的非线性能量:
订阅:
博文 (Atom)