SPM中文教程 汇总(已整理)

合集下载

SpaceClaim.中文教程

SpaceClaim.中文教程

SpaceClaim 联机帮助和支持Table Of Contents1. 简介 (6)2. 使用入门 (7)2.1 教程 (7)2.1.1 概述 (7)2.1.2 支架和旋钮教程 (8)2.1.3 涡轮教程 (23)2.2 SpaceClaim 界面 (23)2.2.1 概述 (23)2.2.2 结构树 (25)2.2.3 图层 (26)2.2.4 选择 (28)2.2.5 组 (29)2.2.6 选项 (30)2.2.7 属性 (30)2.2.8 SpaceClaim 快捷方式 (31)2.2.9 鼠标操作 (33)2.3 设计 (34)2.4 二维和三维设计模式 (36)2.5 草绘 (37)2.6 选择 (40)2.7 拉动 (43)2.8 移动 (47)2.9 在横截面中编辑 (51)2.10 组合和分割 (52)2.11 SpaceClaim 对象 (55)2.12 使用部件 (56)2.13 获得帮助 (58)3. 设计 (60)3.1 概述 (60)3.2 二维和三维设计模式 (61)3.3 草绘 (62)3.4 在横截面中编辑 (66)3.5 在三维模式中编辑 (67)3.6 剪切、复制和粘贴 (69)3.7 尺寸 (70)3.8 分离 (73)3.9 撤消和重做操作 (74)3.10 移动手柄 (74)3.11 草绘 (75)3.11.1 概述 (75)3.11.2 编辑草图 (79)3.11.3 复制草图 (80)3.11.4 草图栅格 (80)3.11.5 移动草图栅格 (81)3.11.6 布局 (82)3.11.7 在二维模式中移动 (83)3.11.8 通过尺寸草绘 (84)3.11.9 点 (85)3.11.10 直线 (86)3.11.11 切线 (87)3.11.12 参考线 (88)3.11.13 矩形 (89)3.11.14 三点矩形 (90)3.11.15 圆 (91)3.11.16 三点圆 (91)3.11.17 参考圆 (92)3.11.18 椭圆 (93)3.11.19 相切弧 (94)3.11.20 扫掠弧 (95)3.11.21 三点弧 (96)3.11.22 多边形 (97)3.11.23 样条曲线 (98)3.11.24 分割直线 (100)3.11.25 修剪直线 (101)3.11.26 创建角 (101)3.11.27 创建圆角 (102)3.11.28 偏置直线 (103)3.11.29 投影到草图栅格上 (104)3.11.30 弯曲 (105)3.12 编辑 (105)3.12.1 概述 (105)3.12.2 选择对象 (107)3.12.3 拉动 (115)3.12.4 移动 (142)3.12.5 填充 (150)3.12.6 替换表面 (155)3.12.7 按过渡编辑表面 (157)3.12.8 移动草图栅格 (159)3.13 相交 (159)3.13.1 概述 (159)3.13.2 组合和分割 (160)3.13.3 分割实体 (172)3.13.4 分割表面 (174)3.13.5 投影到实体 (176)3.14 插入 (177)3.14.1 概述 (177)3.14.2 插入部件 (178)3.14.3 插入图像 (178)3.14.4 插入平面 (179)3.14.5 插入轴 (181)3.14.6 插入参考轴系 (182)3.14.7 创建圆柱体 (183)3.14.8 创建球 (184)3.14.9 创建壳体 (185)3.14.10 创建偏置 (186)3.14.11 创建镜像 (187)3.14.12 插入临时对象 (189)3.15 装配部件 (190)3.15.1 概述 (190)3.15.2 使用部件 (191)3.15.3 对齐表面 (194)3.15.4 对齐轴 (194)3.15.5 将部件定向 (195)3.16 测量和分析 (195)3.16.1 概述 (195)3.16.2 显示质量 (196)3.16.3 显示测量值 (197)3.16.4 显示表面栅格 (198)4. 细节设计 (199)4.1 概述 (199)4.2 注释 (200)4.2.1 概述 (200)4.2.2 创建注释 (201)4.2.3 设定注释文本格式 (204)4.2.4 创建注释指引线 (205)4.2.5 创建尺寸注释 (206)4.2.6 形位公差注释 (208)4.2.7 基准符号 (210)4.2.8 表面光洁度符号 (211)4.2.9 中心标记和中心线 (212)4.2.10 螺纹 (213)4.2.11 表格 (213)4.3 图纸 (215)4.3.1 概述 (215)4.3.2 设置图纸 (216)4.3.3 设定图纸格式 (217)4.3.4 视图 (218)4.4 三维标记 (223)4.4.1 概述 (223)4.4.2 创建三维标记幻灯片 (225)4.4.3 显示更改过的尺寸 (225)4.4.4 已更改表面上色 (226)4.5 设置细节设计选项 (226)5. 显示设计 (229)5.1 概述 (229)5.2 设置对象可见性 (230)5.3 将设计定向 (231)5.3.1 概述 (231)5.3.2 旋转设计 (232)5.3.3 平移设计 (233)5.3.4 放大和缩小 (234)5.3.5 旋转设计 (235)5.3.6 原始视角 (235)5.3.7 显示正面视图 (236)5.3.8 选择视图 (237)5.3.9 对齐视图 (238)5.4 图形样式 (238)5.4.1 应用图形样式 (238)5.4.2 显示边 (239)5.4.3 应用颜色 (240)5.4.4 线型 (241)5.5 图层 (241)5.6 工作区窗口 (243)5.6.1 在多个窗口中显示设计 (243)5.6.2 分割工作区窗口 (244)5.6.3 在工作区窗口之间切换 (244)5.7 显示工作区工具 (245)5.8 草图栅格样式 (245)5.9 显示轻量化部件 (247)6. 使用SpaceClaim 文档 (248)6.1 创建、打开和保存文档 (248)6.2 导入和导出 (249)6.3 打印图纸和设计 (252)6.4 日志和记录 (253)6.5 设计结构 (254)6.6 SpaceClaim 文件格式 (256)7. 自定义SpaceClaim (258)7.1 概述 (258)7.2 常用选项 (259)7.3 文件导入和导出选项 (261)7.4 细节设计选项 (263)7.5 颜色选项 (266)7.6 对齐选项 (266)7.7 单位选项 (267)7.8 支持文件选项 (268)7.9 钣金选项 (269)7.10 高级选项 (270)7.11 快速访问工具栏选项 (272)7.12 插件选项 (273)7.13 显示工作区工具 (273)7.14 配置窗口 (274)8. 钣金 (275)8.1 概述 (275)8.2 修正钣金零件 (282)9. SpaceClaim 插件 (283)9.1 概述 (283)9.2 开发SpaceClaim 插件 (283)10. 获得帮助 (284)11. SpaceClaim 版权信息 (285)1. 简介1草绘(See 2.5)并拉动(See 2.7)以创建零件,或打开(See 6.2)任何建模软件创建的现有模型。

SPM-PPI中文说明

SPM-PPI中文说明

SPM-PPI中文说明版权声明本文的的英文原版说明文件版权归SPM全球社区所拥有,翻译后的本中文版版权都归翻译作者蜡笔赵欣所有,同时也感谢其学姐李方方帮忙把最后两页纸质版文档整理成电子版文档,本翻译仅做交流学习之用,如果要将其用于其它商业用途,须发邮件给作者来征得其的同意。

如果SPM全球社区发现本人在翻译的内容中有侵犯SPM全球社区的方面,可以发邮件给作者要求删除相关部分,同时文中有翻译的不恰当的地方,也希望你发邮件给我指出其中的错误。

作者蜡笔赵欣电子邮箱zhaoxin11232@PPIy=V1β1+(B2-B1)β2+(V1(B2-B1) )β3+Gβ4+ε (33.2)类似的,对于心理生理交互作用激活来说,来自大脑里面的两个区域(V1区和后顶骨区(PP 区))是被用来作主要影响区域,如下等式所示:y=V1β1+PPβ2+(V1*PP)β3+Gβ4+ε (33.3)我找到的相关资料再次注意一下以上三个等式。

33.1,33.2和33.3都有三个代数项(不要搞混咯)——两个主要影响和一个交互作用影响,因此,设计矩阵必须至少有3列。

一个最基本地PPI设计矩阵如图33.1所示图33.1 这是一个PPI(或是φPI)的示例设计矩阵,主要影响是来自V1区域的BOLD激活,该数据在第2列中,并且一个心理上的向量,注意与不注意在第三列,推论将特别地关注交互作用的代数项,在第1列中,设计矩阵用了[1 0 0 0]这样一个向量,在φPI中第三列将作为来自于源头区域的BOLD激活,而不是心理因子。

PPI与φPIs都能被想象为一个分配模型,PPIs占据着了功能连接与有效连接模型之间的中间地带,功能连接(FC)一直都是被定义为处于空间上被分割的神经生理事件之间的在时间上的一种相关,FC分析方法是最典型的无模型分析方法,同时它也不用指定一个作用的大致方向等等。

其中,A对B的作用不能通过B 对A的作用区分出来,与此相反。

PPIs是基于回归模型具有很强的紧密联系,但是因为PPIs 通常是非常简单(1个源区域和1个实验因子,如果是φPIs的话,则是两个源区域),他们都是有限的EC模型。

SPM5数据分析简明教程

SPM5数据分析简明教程

SPM5数据分析简明教程SPM5(Statistical Parametric Mapping)是一种用于脑功能研究的数据分析软件包。

它被广泛应用于神经影像学领域,尤其是功能磁共振成像(fMRI)和脑电图(EEG)数据的分析。

SPM5提供了一套完整的工具,用于数据预处理、统计分析和结果展示。

本文将为读者提供一个简明的SPM5数据分析教程,帮助他们入门并开始进行自己的数据分析。

首先,我们需要准备数据。

在SPM5中,数据的格式通常是NIfTI (Neuroimaging Informatics Technology Initiative)格式。

如果您的数据不在这种格式中,可以使用转换工具将其转换为NIfTI格式。

准备好数据后,我们可以开始进行数据预处理。

数据预处理是SPM5分析流程的第一步。

它包括将数据进行切片时间校正、运动校正和空间归一化等操作,以消除数据中的伪迹和偏差。

可以使用SPM5自带的工具箱来完成这些操作。

在进行切片时间校正时,将数据按照时间顺序排列,以修正不同时间点的数据获取延迟。

运动校正将数据对齐到一个参考时间点,以纠正研究对象在扫描期间的运动。

空间归一化是将数据的空间分辨率转换为标准形态,以便进行统计分析。

完成数据预处理后,我们可以进行统计分析。

在SPM5中,统计分析通常使用广义线性模型(GLM)来建模和推断。

GLM允许我们将神经影像数据与实验设计和研究假设相结合,以估计不同神经活动与不同条件之间的关系。

要进行统计分析,我们需要创建一个设计矩阵,其中包含任务设计和卷积函数。

任务设计是实验条件的时间表,它描述了每个条件在实验中发生的时间和持续时间。

卷积函数是血氧水平依赖(BOLD)信号响应的数学模型,它描述了神经活动和BOLD信号之间的时间延迟和持续时间的关系。

设计矩阵创建完成后,我们可以使用SPM5进行模型估计和推断。

SPM5将根据设计矩阵中的信息对每个脑体素(voxel)进行建模,估计神经活动与条件之间的关系,并计算统计显著性。

SPM中文(IPM中文)

SPM中文(IPM中文)

6 FSBB15CH60 Rev. D

FSBB15CH60 智能功率模块
电气特性 (TJ = 25°C,除非另有说明)
控制部分
符号
参数
工作条件
最小值 典型值 最大值
IQCCL IQCCH
VCC 静态 馈电流
IQBS
VBS 静态 馈电流
VFOH VFOL VSC(ref) UVCCD UVCCR UVBSD UVBSR tFOD VIN(ON) VIN(OFF)
集成的驱动、保护和系统控制功能
z 对于逆变器的高端 IGBT:门极驱动电路,高压隔离的高速电平转换控制电路的欠压 (UV) 保护 说明:自举电源电路示例见图 10 和图 11。
z 对于逆变器的低端 IGBT:门极驱动电路,短路保护 (SC) 控制电路电源的欠压 (UV) 保护
z 故障信号传送:对应于欠压 (UV) 故障 (由低端提供) z 输入接口兼容 3.3/5V CMOS/LSTTL,施密特触发器输入
FSBB15CH60 智能功率模块
FSBB15CH60
智能功率模块
7 14, 2006
SPM TM
产品特性
z 通过美国 UL 认证,编号为 E209204 (SPM27 - CA 封装) z 采用 DBC 技术,热阻极低 z 600V-15A 三相 IGBT 逆变器,内置门极驱动和功率器件保护用
控制 IC (集成电路) z 分立的三相直流负端,用于逆变器的电流检测 z 内置高压集成电路 (HVIC),可采用单驱动电源 z 绝缘等级为 2500Vrms/min。
(11) VB(U) (10) VCC(UH)
(9) IN(UH) (12) VS(U)
VB VCC COM IN

SPM程序(CCS)

SPM程序(CCS)

SPM程序(CCS)硬件层程序/******************************************************************************\ * Copyright (C) 2007 Zhongshan University.* All Rights Reserved*------------------------------------------------------------------------------* FILENAME...... CSPM_DSP_Driver.c* DATE CREATED.. 013/4/2007* LAST MODIFIED. 025/4/2007*\******************************************************************************/ /******************************************************************************\ * CSPM_DSP_Driver Module is the hardware function layer of CSPM. It contains* five module.* AD..................5 Functions* DA..................3 Functions* DIO.................5 Funcitons* Comunicaiton........5 Functions* LED.................8 Functions\******************************************************************************/ #include "dsk6416cfg.h"#include <stdio.h>#include <CSL_gpio.h>#include <math.h>#include <CSL_IRQ.h>#include <CSL_hpi.h>/*-----------------------------Definition-------------------------------------*/#define DIO_SUCCEED 1#define DIO_FAILURE 0#define DA_SUCCEED 1#define DA_FAILURE 0#define AD_SUCCEED 1#define AD_FAILURE 0#define COMM_INIT_SUCCEED 1#define COMM_INIT_FAILURE 0#define DATA_READ_SUCCEED 1#define DATA_READ_FAILURE 0#define DATA_WRITE_SUCCEED 1#define DATA_WRITE_FAILURE 0GPIO_Handle hGpio0;GPIO_Config gpioCfg0 = {0x00001E00, /* GPIO Global Control Register (GPGC) */0x0000FFFF, /* GPIO Enable Register (GPEN) */0x0000FFFF, /* GPIO Direction Register (GPDIR)*/0x00000000, /* GPIO High Mask Register (GPHM)*/0x00000000, /* GPIO Low Mask Register (GPLM)*/0x00000000 /* GPIO Interrupt Polarity Register (GPPOL)*/};void InitGPIO(void);/*AD Module*/#define MAX_AD_BUFFER_SIZE 10240;#define AD_INPUT_RANGE_PN_5 0 // -5v to +5v#define AD_INPUT_RANGE_P_5 1 // 0v to +5v#define AD_INPUT_RANGE_PN_10 2 // -10v to +10v#define AD_INPUT_RANGE_P_10 3 // 0v to 10vUint16 AD_Config = 0x0300;//Uint16 AD_Config = 0x8000;/* Bit 15 : SGL or DIFFBit 13-12: select channelBit 11-10: input rangeBit 9-8: power down select*/int GlobalEnableChannelNo[16];int GlobalEnableChannelCount = 0;int GlobalTotalSampleCount = 0; /* Record the total numbers ofAD convertion */int GlobalChip1ChannelEnableCount = 0;int GlobalChip2ChannelEnableCount = 0;int AD_Count = 0;static int ScanMode = 0;// Current AD convertion countint InitAD(void);int AD_ReadChannels(int InputRange,int ChannelEnable, //bit 0 to 7 enable channelint * SampleCountPerChannel,Uint16 * AD_Buffer); /* Read multiple AD datas formchannels. */Uint16 AD_ReadChannel(int InputRange, int ChannelNo); /* Read sigle data from AD ch-annel. */int AD_SetInputRange(int InputRange);int AD_SelChannel(int ChannelNo);int GetAD_Status(void);/*DA Module*/int InitDA(void);int DA_WriteChannel(int ChannelNo, Uint16 Value);int GetDA_Status(void);/*DIO Module*/Uint32 DO_Data[2];Uint16 DI_Data;int InitDIO(void);int DO_WriteChannel(int ChannelNo, int Data);int DO_WriteChannels(Uint32 * Data);int DI_ReadChannel(int ChannelNo);int DI_ReadChannels(Uint16 * Data);/*Communication Module*/#define MAX_BUFFER_RECEIVE_SIZE 10240#define MAX_BUFFER_SEND_SIZE 514#define BLOCK_SIZE 256Uint16 far BufferReceive[MAX_BUFFER_RECEIVE_SIZE];Uint16 far BufferSend[MAX_BUFFER_SEND_SIZE];Uint16 HasCommand = 0;interrupt void OnCommand();IRQ_Config HostIrqConfig = {OnCommand,0x00000000,IRQ_CCMASK_PCC_ENABLE | IRQ_CCMASK_DCC_MAPPED,IRQ_IEMASK_ALL};int InitHostCommPort(void);interrupt void OnCommand(void);int ReadCommand(void);int ReadHostData(int WordNos ,Uint16 Comm_Buffer[]); /* Read a number of datas fr-om Mail-Box. Max numbersof datas read fromMail-Box is 256. */int WriteHostData(int WordNos, Uint16 Comm_Buffer[]); /* Write a number of datasto Mail-Box and sent themto the host. Max numbersof datas can mord than 256. The Function can autodeal with the sendings po-rssese. *//*-----------------------------Declearation-----------------------------------*/void InitGPIO(void){hGpio0 = GPIO_open(GPIO_DEV0,GPIO_OPEN_RESET);GPIO_config(hGpio0, &gpioCfg0);}/*AD Module*/int InitAD(void){PRD_stop(&PRD_AD);MCBSP_start(hMcbsp0,MCBSP_RCV_START | MCBSP_XMIT_START | MCBSP_SRGR_START| MCBSP_SRGR_FRAMESYNC, 0);return AD_SUCCEED;}Uint16 * Buffer;int AD_ReadChannels(int InputRange, int ChannelEnable, int * SampleCountperChannel, Uint16AD_Buffer[]){int i = 0,j = 0,k = 0,l = 0,Data,num = 0,tmp=0;AD_SetInputRange(InputRange);for(i=0;i<16;i++)GlobalEnableChannelNo[i]=i;Buffer = AD_Buffer;k=400;while(k!=0) k--;for(j=0;j<=16;j+=2){l=j;if(j==16) l=0;num=GlobalEnableChannelNo[l];AD_SelChannel(num);for(i=0;i<4;i++){k=400;while(k!=0) k--;while (!MCBSP_xrdy(hMcbsp0));MCBSP_write(hMcbsp0,AD_Config);while (!MCBSP_rrdy(hMcbsp0));Data= MCBSP_read(hMcbsp0);}tmp=l;if(l==8)tmp=5;if(l==10)tmp=7;if(l==12)tmp=1;if(l==14)tmp=3; //tip_amp save in buffer[5] pha in buffer[7]GlobalChip1ChannelEnableCount=tmp;Buffer[GlobalChip1ChannelEnableCount]=Data;}// PRD_start(&PRD_AD);return AD_SUCCEED;}void PRD_AD_Convert(void){int j,tmp,Data;tmp=GlobalEnableChannelNo[AD_Count];AD_Count++;AD_SelChannel(tmp);while (!MCBSP_xrdy(hMcbsp0));MCBSP_write(hMcbsp0,AD_Config);while (!MCBSP_rrdy(hMcbsp0));Data= MCBSP_read(hMcbsp0);Buffer[GlobalChip1ChannelEnableCount]=Data;GlobalChip1ChannelEnableCount=tmp;/* while (!MCBSP_xrdy(hMcbsp0));MCBSP_write(hMcbsp0,AD_Config);if((AD_Count>0) && ((AD_Count!=GlobalChip1ChannelEnableCount) || (GlobalEnableChannelCount==GlobalChip1ChannelEnableCount))){if((AD_Count%GlobalEnableChannelCount == 0) || ((AD_Count%GlobalEnableChannelCount == GlobalChip1ChannelEnableCount) && (GlobalEnableChannelCount != GlobalChip1ChannelEnableCount))) {while (!MCBSP_rrdy(hMcbsp0));Buffer[AD_Count-GlobalEnableChannelCount] = MCBSP_read(hMcbsp0);}else{if(AD_Count<GlobalTotalSampleCount){while (!MCBSP_rrdy(hMcbsp0));Buffer[AD_Count] = MCBSP_read(hMcbsp0);}else{while (!MCBSP_rrdy(hMcbsp0));MCBSP_read(hMcbsp0);}}}else{while (!MCBSP_rrdy(hMcbsp0));MCBSP_read(hMcbsp0);}*/j=400;while(j!=0) j--; //xiaoxin add hereif(AD_Count>8){AD_Count = 0;PRD_stop(&PRD_AD);}}/*******************************AD_CONFIG***************************Config word length:16 bitsD15:SGL/DIFF (D15=1:Single-Ended;D15=0:Differential-Ended);D14/13/12:Select channel0-7000:channel 0001:channel 2010:channel 4011:channel 6100:channel 1101:channel 3110:channel 5111:channel 7D11/10:Input Range00: -5V TO +5V10: 0V TO +5V01: -10V TO +10V11: 0V TO +10VD9/D8:Power Down Selection00: power on10: Napx1: SleepD7/6/5/4/3/2/1/0: Reserved(Not Used)NOTE:Config Word need to invert because of the 74HC14***************************************AD_CONFIG********************************/ Uint16 AD_ReadChannel(int InputRange, int ChannelNo){Uint16 Data;AD_SetInputRange(InputRange);AD_SelChannel(ChannelNo);/* while (!MCBSP_xrdy(hMcbsp0));MCBSP_write(hMcbsp0,AD_Config);Data = MCBSP_read(hMcbsp0);*/while (!MCBSP_xrdy(hMcbsp0));MCBSP_write(hMcbsp0,AD_Config);Data = MCBSP_read(hMcbsp0);return Data;}int AD_SetInputRange(int InputRange){if(InputRange == AD_INPUT_RANGE_PN_5){AD_Config &= 0xF300;AD_Config |= 0x0C00; //xiaoxin add here,in order to invert;}else if(InputRange == AD_INPUT_RANGE_P_5){AD_Config &= 0xF300;AD_Config |= 0x0400;}else if(InputRange == AD_INPUT_RANGE_PN_10){AD_Config &= 0xF300;AD_Config |= 0x0800;}else if(InputRange == AD_INPUT_RANGE_P_10){AD_Config &= 0xF300;//AD_Config |= 0x0C00;}return AD_SUCCEED;}int AD_SelChannel(int ChannelNo){Uint8 * RegHcntl = (Uint8 *)0x60000001;int TempChannelNo = 0;if(ChannelNo < 8){//*RegHcntl &= 0xFFFC; //set CS bit = 0 (xiaoxin Cancel here)*RegHcntl |= 0x0002; //set CS bit = 1;(xiaoxin add here in order to invert;)//GPIO_pinWrite(hGpio0,GPIO_PIN9,1);//AD_CS0 change to AD_CS2(by zwen 2010-5-22) }else{ChannelNo -= 8;//*RegHcntl |= 0x0003; //set CS bit = 1;(xiaoxin Cancel here)*RegHcntl &= 0xFFFD; //set CS bit = 0 (xiaoxin add here in order to invert;)//GPIO_pinWrite(hGpio0,GPIO_PIN9,0);//AD_CS0 change to AD_CS2(by zwen 2010-5-22) }TempChannelNo = ChannelNo&0x0001;TempChannelNo = TempChannelNo<<2;ChannelNo = ChannelNo>>1;ChannelNo |= TempChannelNo;ChannelNo =7-ChannelNo; //xiaoxin add here,in order to invert;AD_Config &= 0x8FFF;AD_Config |= ChannelNo<<12;return AD_SUCCEED;}int GetAD_Status(void){return AD_Count;}/*DA Module*/int InitDA(void){MCBSP_start(hMcbsp2,MCBSP_RCV_START | MCBSP_XMIT_START | MCBSP_SRGR_START| MCBSP_SRGR_FRAMESYNC, 0);return DA_SUCCEED;}int DA_WriteChannel(int ChannelNo, Uint16 Value){int Delay = 400;unsigned int x = 0;Uint16 DA_CS;if(ChannelNo < 4){DA_CS = 0x0000;}else if(ChannelNo < 8){DA_CS = 0x0400;ChannelNo -= 4;}else if(ChannelNo < 12){DA_CS = 0x1000;ChannelNo -= 8;}else{DA_CS = 0x1400;ChannelNo -= 12;}// ChannelNo =3-ChannelNo; //invertedx = 65535-Value; //inverted// Value |= ChannelNo<<22;ChannelNo = 3-ChannelNo;x |= ChannelNo<<22;x |= 0x200000;// Value |= 0x900000;GPIO_write(hGpio0, GPIO_PIN12|GPIO_PIN10, DA_CS);MCBSP_FSET(PCR2, FSRP, 0);MCBSP_FSET(PCR2, CLKRP, 1);while (!MCBSP_xrdy(hMcbsp2));MCBSP_write(hMcbsp2, x);while(Delay!=0)Delay--;MCBSP_FSET(PCR2, FSRP, 1);MCBSP_FSET(PCR2, CLKRP, 0);MCBSP_setPins(hMcbsp2,MCBSP_PIN_FSR);MCBSP_setPins(hMcbsp2,MCBSP_PIN_CLKR);return DA_SUCCEED;}/*DIO Module*/int GetDIO_Status(void){return DIO_SUCCEED;}int InitDIO(void){MCBSP_start(hMcbsp1,MCBSP_RCV_START | MCBSP_XMIT_START | MCBSP_SRGR_START| MCBSP_SRGR_FRAMESYNC, 0);return DIO_SUCCEED;}int DO_WriteChannel(int ChannelNo, int Data){int Delay = 100;Uint32 Temp_DO_Data;//Uint32 Temp_DI_Data;int address;int DO_Data_OUT;address=ChannelNo/8;address=7-address; //invertedaddress=address<<8;if(ChannelNo < 32){if(!Data){Temp_DO_Data = 0x00000001;DO_Data[0] |= Temp_DO_Data<<ChannelNo;}else{Temp_DO_Data = 0xFFFFFFFE;Temp_DO_Data=Temp_DO_Data<<ChannelNo;Temp_DO_Data=Temp_DO_Data+pow(2,ChannelNo);Temp_DO_Data=Temp_DO_Data-1;DO_Data[0] &= Temp_DO_Data;}DO_Data_OUT=0x000000FF&(DO_Data[0]>>(ChannelNo/8*8)); /*ChannelNo 7-0 NO need to right shift;ChannelNo 15-8 need to right shift 8 bits;ChannelNo 23-16 need to right shift 16 bits;ChannelNo 31-24 need to right shift 24 bits;*///DO_Data_OUT=255-DO_Data_OUT; //invertedDO_Data_OUT=DO_Data_OUT+address;}else{if(!Data){Temp_DO_Data = 0x00000001;DO_Data[1] |= Temp_DO_Data<<(ChannelNo-32);}else{Temp_DO_Data = 0xFFFFFFFE;Temp_DO_Data=Temp_DO_Data<<(ChannelNo-32);Temp_DO_Data=Temp_DO_Data+pow(2,(ChannelNo-32));Temp_DO_Data=Temp_DO_Data-1;DO_Data[1] &= Temp_DO_Data;}DO_Data_OUT=0x000000FF&(DO_Data[1]>>((ChannelNo-32)/8*8));/*ChannelNo 39-32 NO need to right shift;ChannelNo 47-40 need to right shift 8 bits;ChannelNo 55-48 need to right shift 16 bits;ChannelNo 63-40 need to right shift 24 bits;*///DO_Data_OUT=255-DO_Data_OUT; //invertedDO_Data_OUT=DO_Data_OUT+address;}while(!MCBSP_xrdy(hMcbsp1));MCBSP_write(hMcbsp1, DO_Data_OUT); /*DO_Data_OUT:12 bits;DO_Data_OUT11] :reserve;DO_Data_OUT10-8: address 2-0;DO_Data_OUT7-0: 8 bits send data;*//*CASE (address 2-0)000:DO 7-0;001:DO 15-8;010:DO 23-16;011:DO 31-24;100:DO 39-32;101:DO 47-40;110:DO 55-48;111:DO 63-56;*/while(Delay!=0)Delay--;while(!MCBSP_rrdy(hMcbsp1));DI_Data= MCBSP_read(hMcbsp1);/*12 bits DI DATA:DI 16-8 AND DI 3-0*///DI_Data =Temp_DI_Data<<4;//Temp_DI_Data&=0x000F;//DI_Data=0xFFFF-DI_Data;//DI_Data&=0xFF00;//DI_Data+=Temp_DI_Data+0x00F0;/*ADD DI 7-4 TO READ DATA BY V ALUE ALL 1*/ while(Delay!=0)Delay--;return DIO_SUCCEED;}int DO_WriteChannels(Uint32 * Data){int Delay = 400;int Index;int address;int DO_Data_out;//Uint16 Temp_DI_Data;DI_Data = 0;DO_Data[0]=4294967295-Data[0];DO_Data[1]=4294967295-Data[1];for(Index = 0; Index<8; Index++){address=7-Index; //invertedaddress=address<<8;if(Index<4){DO_Data_out=0x000000FF&(DO_Data[0]>>(Index*8));DO_Data_out=DO_Data_out+address;}else{DO_Data_out=0x000000FF&(DO_Data[1]>>((Index-4)*8));DO_Data_out=DO_Data_out+address;}while(!MCBSP_xrdy(hMcbsp1));MCBSP_write(hMcbsp1, DO_Data_out);while(Delay!=0)Delay--;while(!MCBSP_rrdy(hMcbsp1));DI_Data= MCBSP_read(hMcbsp1);/*Temp_DI_Data= MCBSP_read(hMcbsp1);DI_Data =Temp_DI_Data<<4;Temp_DI_Data&=0x000F;DI_Data=0xFFFF-DI_Data;DI_Data&=0xFF00;DI_Data+=Temp_DI_Data+0x00F0;*/while(Delay!=0)Delay--;}return DIO_SUCCEED;}int DI_ReadChannel(int ChannelNo){int Delay = 400;int DO_Data_OUT;//Uint16 Temp_DI_Data;DI_Data = 0;DO_Data_OUT=0x000000FF&DO_Data[0];DO_Data_OUT |=0x00000700; //invertedwhile(!MCBSP_xrdy(hMcbsp1));MCBSP_write(hMcbsp1, DO_Data_OUT);while(Delay!=0)Delay--;while(!MCBSP_rrdy(hMcbsp1));DI_Data= MCBSP_read(hMcbsp1);/*Temp_DI_Data= MCBSP_read(hMcbsp1);DI_Data =Temp_DI_Data<<4;Temp_DI_Data&=0x000F;DI_Data=0xFFFF-DI_Data;DI_Data&=0xFF00;DI_Data+=Temp_DI_Data+0x00F0;*/while(Delay!=0)Delay--;return (DI_Data>>ChannelNo)&0x0001;}int DI_ReadChannels(Uint16 * Data){int Delay = 400;int DO_Data_OUT;//Uint32 Temp_DI_Data;DI_Data = 0;DO_Data_OUT=0x000000FF&DO_Data[0];DO_Data_OUT |=0x00000700; //invertedwhile(!MCBSP_xrdy(hMcbsp1));MCBSP_write(hMcbsp1, DO_Data_OUT);while(Delay!=0)Delay--;while(!MCBSP_rrdy(hMcbsp1));DI_Data= MCBSP_read(hMcbsp1);/*Temp_DI_Data= MCBSP_read(hMcbsp1);DI_Data =Temp_DI_Data<<4;Temp_DI_Data&=0x000F;DI_Data= 0xFFFF-DI_Data;DI_Data&=0xFF00;DI_Data+=Temp_DI_Data+0x00F0; */while(Delay!=0)Delay--;*Data = DI_Data;return DIO_SUCCEED;}/*Communication Module*/int InitHostCommPort(void){int old_intm;HPI_FSET(HPIC,HWOB,1);HPI_setWriteAddr((Uint32)BufferReceive/4);HPI_setReadAddr((Uint32)BufferSend/4);old_intm = IRQ_globalDisable();//IRQ_map(IRQ_EVT_DSPINT,15);IRQ_map(IRQ_EVT_DSPINT,13);IRQ_config(IRQ_EVT_DSPINT,&HostIrqConfig);IRQ_clear(IRQ_EVT_DSPINT);IRQ_enable(IRQ_EVT_DSPINT);IRQ_globalRestore(old_intm);IRQ_globalEnable();return COMM_INIT_SUCCEED;}int ReadCommand(void){return (int)BufferReceive[0];}int ReadHostData(int WordNos ,Uint16 * Comm_Buffer) {int Index;for(Index = 0; Index < WordNos; Index++){Comm_Buffer[Index] = BufferReceive[Index+2];}return DATA_READ_SUCCEED;}int WriteHostData(int WordNos, Uint16 Comm_Buffer[]) {int Blocks,LeftOver;int i,j;SWI_disable();Blocks = WordNos/BLOCK_SIZE;LeftOver = WordNos%BLOCK_SIZE;if(LeftOver%2 != 0)LeftOver += 1;for(i = 0; i < Blocks; i++){BufferSend[0] = BLOCK_SIZE;BufferSend[1] = BLOCK_SIZE;for(j = 0; j < BLOCK_SIZE; j++)BufferSend[j+2] = Comm_Buffer[i*256+j];//while(HPI_getHrdy());HPI_setHint(1);while(HPI_getHint());HPI_setReadAddr((Uint32)BufferSend/4);}if(LeftOver){BufferSend[0] = LeftOver;BufferSend[1] = LeftOver;for(j = 0; j < LeftOver; j++)BufferSend[j+2] = Comm_Buffer[j];// while(HPI_getHrdy());HPI_setHint(1);while(HPI_getHint());HPI_setReadAddr((Uint32)BufferSend/4);}SWI_enable();return DATA_WRITE_SUCCEED;}//-----------------------------------------------------------//functions about control 3 LEDs on the board;//led 1 about feedback status;//led 2 about scan status;//led 3 about approach status;//-----------------------------------------------------------void FeedBackLED_ON(){GPIO_write(hGpio0, GPIO_PIN11, 0x0800);}void FeedBackLED_OFF(){GPIO_write(hGpio0, GPIO_PIN11, 0x0000);}void ScanLED_ON(){GPIO_write(hGpio0, GPIO_PIN9, 0x0200);}void ScanLED_OFF(){GPIO_write(hGpio0, GPIO_PIN9, 0x0000);}void ApproachLED_ON(){Uint8 * RegHcntl = (Uint8 *)0x60000001;*RegHcntl |= 0x0001;}void ApproachLED_OFF(){Uint8 * RegHcntl = (Uint8 *)0x60000001;*RegHcntl &= 0xfffe;}功能层功能层程序/******************************************************************************\ * Copyright (C) 2007 Zhongshan University.* All Rights Reserved*------------------------------------------------------------------------------* FILENAME...... CSPM_DSP_Function.h* DATE CREATED.. 013/4/2007* LAST MODIFIED. 013/4/2007*\******************************************************************************/ /******************************************************************************\ * CSPM_DSP_Function Module is the micro manupulate funtions of CSPM.* It contains 96 functions.** function concerning initiate................2 functions* function concerning DI......................4 functions* function concerning DO.....................26 functions* function concerning DA.....................12 functions* function concerning approach................2 functions* function concerning reflesh................13 functions* function concerning AD image................5 functions* function concerning Data acquire............3 functions** function concerning stepper (Benyuan).......3 functions* function concerning stepper (Seiko).........3 functions* function concerning stepper (RHK)...........4 functions* function concerning Feedback (Analog).......7 functions* function concerning Feedback (Digital).....12 functions* function concerning NSPM Status refresh.....4 functions\******************************************************************************/ #include "CSPM_DSP_Driver.h"#include <csl_timer.h>#define FAILURE 0#define SUCCESS 1//*********************************************************//// function concerning initial ////*********************************************************////------------Function 101---------//#define DSP_HARDWRE_OK 3#define DSP_DIO_FAILURE 2#define DSP_DA_FAILURE 1#define DSP_AD_FAILURE 0int SpmType; //SpmType=0:STM;SpmType=1:AFM//xiaoxin add hereextern int GlobalFeebackType;void Delay(long tenmicrosecond);int CheckDspHardware(void){int i;int DSP_Status = 0;// Uint32 DO_Data[2]={0xFFFFFFFF,0xFFFFFFFF};Uint32 DO_Data[2]={0x00000000,0x38000008};// InitGPIO();if(InitDIO()){DO_WriteChannels(DO_Data);DO_WriteChannel(3,1);DO_WriteChannel(27,1);DO_WriteChannel(28,1);DO_WriteChannel(29,1);SpmType=DI_ReadChannel(3);if(!SpmType){DO_WriteChannel(13,1);DO_WriteChannel(14,1);DO_WriteChannel(15,0);}else{DO_WriteChannel(13,1);DO_WriteChannel(14,1);DO_WriteChannel(15,1);}DSP_Status++;}if(InitAD())DSP_Status++;if(InitDA()){for(i=0; i<16; i++)DA_WriteChannel(i,32767); // set all DA channel to 0mV DSP_Status++;}return DSP_Status;}void TappingType(void){DO_WriteChannel(13,0);DO_WriteChannel(14,1);DO_WriteChannel(15,1);}void ContactType(void){DO_WriteChannel(13,1);DO_WriteChannel(14,1);DO_WriteChannel(15,1);}//------------Function 102---------//#define FREE_SUCCESS 1#define FREE_FAILURE 0int FreeDspHardware(void){Uint16 DSP_Status = FREE_SUCCESS;if(WriteHostData(1,&DSP_Status))return SUCCESS;elsereturn FAILURE;}//*********************************************************//// function concerning DI ////*********************************************************////------------Function 103-----------//#define C_PowerOff 0#define C_PowerOn 1int IsPowerOn(void){if(DI_ReadChannel(7))return C_PowerOn;elsereturn C_PowerOff;}//------------Function 104-----------//#define C_HeadNotReady 0#define C_HeadReady 1int IsHeadReady(void){if(DI_ReadChannel(8))return C_HeadReady;elsereturn C_HeadNotReady;}//------------Function 105-----------//#define C_InputLevel_Low 0#define C_InuptLevel_High 1Uint16 ReadSingleDI(Uint16 ChannelNo){return DI_ReadChannel(ChannelNo);}//------------Function 106-----------//Uint16 ReadAllDI(void){Uint16 v=0;DI_ReadChannels(&v);return v;}//*********************************************************// // function concerning DO // //*********************************************************// //----------Function 107---------//#define C_ImgADCInsultOff 0#define C_ImgADCInsultOn 1int SwImgADCInsultlation(int DCInsult){DCInsult=(DCInsult+1)%2;if(DO_WriteChannel(16,DCInsult))return SUCCESS;elsereturn FAILURE;}//----------Function 108---------////---------switch DC insultlation of Image B-------//#define C_ImgBDCInsultOff 0#define C_ImgBDCInsultOn 1int SwImgBDCInsultlation(int DCInsult){DCInsult=(DCInsult+1)%2;if(DO_WriteChannel(17,DCInsult))return SUCCESS;elsereturn FAILURE;}//----------Function 109---------//#define C_ImgCDCInsultOff 0#define C_ImgCDCInsultOn 1int SwImgCDCInsultlation(int DCInsult){DCInsult=(DCInsult+1)%2;if(DO_WriteChannel(19,DCInsult))return SUCCESS;elsereturn FAILURE;}//------------Function 110---------//#define C_HVScanPowerOff 0#define C_HVScanPowerOn 1int SwHVScanPower(int HVScanPower){if(DO_WriteChannel(25,HVScanPower))return SUCCESS;elsereturn FAILURE;}//------------Function 111---------//#define C_LaserPowerOff 0#define C_LaserPowerOn 1int SwLaserPower(int LaserPower){if(DO_WriteChannel(2,LaserPower))//benyuan CSPM4000 //if(DO_WriteChannel(27,LaserPower))return SUCCESS;elsereturn FAILURE;}//------------Function 112---------//#define C_HVPowerOn 1#define C_HVPowerOff 0int SwHVPower(int HVPower){if(DO_WriteChannel(26,HVPower))return SUCCESS;elsereturn FAILURE;}//------------Function 113---------//#define C_TestImgA 0#define C_TestImgB 1#define C_TestImgC 2#define C_TestZControl 3#define C_TestAFMSum 4#define C_TestAFML 5#define C_TestAFMY 6#define C_TestSTMI 7int SelTest(int Test){int Ch32Value,Ch33Value,Ch34Value;Ch32Value=Test%2;Ch33Value=(Test/2)%2;Ch34Value=(Test/4)%2;if( DO_WriteChannel(34,Ch34Value)&&DO_WriteChannel(33,Ch33Value)&&DO_WriteChannel(32,Ch32Value) )return SUCCESS;elsereturn FAILURE;}//------------Function 114---------//#define C_OutputFilterCap103p 0#define C_OutputFilterCap473p 1#define C_OutputFilterCap104p 2#define C_OutputFilterCap105p 3int SelTestFilterCap(int TestFilterCap){int Ch44Value,Ch45Value;Ch44Value=TestFilterCap%2;Ch45Value=TestFilterCap/2;if(DO_WriteChannel(44,Ch44Value)&&DO_WriteChannel(45,Ch45Value)) return SUCCESS;elsereturn FAILURE;}//------------Function 115---------//#define C_NoSelSTS 0#define C_SelNormalRangeSTS 2#define C_SelSmallRagneSTS 3int SelSTS(int STS){int Ch23Value,Ch22Value;Ch23Value=STS%2;Ch22Value=STS/2;if(DO_WriteChannel(22,Ch22Value)&&DO_WriteChannel(23,Ch23Value)) return SUCCESS;elsereturn FAILURE;}//------------Function 116---------//#define C_XScanRangeNormal 0#define C_XScanRangediv2 1#define C_XScanRangediv4 2#define C_XScanRangediv8 3#define C_XScanRangediv16 4#define C_XScanRangediv32 5#define C_XScanRangediv64 6#define C_XScanRangediv128 7/*int SelXScanRange(int ScanRange){int count,Ch3Value,delay;ScanRange=4095-ScanRange;DO_WriteChannel(24,0);for(delay=0;delay<10;delay++);DO_WriteChannel(23,1);for(delay=0;delay<5;delay++);for(count=0;count<12;count++){Ch3Value=ScanRange>>(11-count);Ch3Value=0x0001&Ch3Value;DO_WriteChannel(22,Ch3Value); //DO22: 12 bit Serial data,high bit firstfor(delay=0;delay<6;delay++);DO_WriteChannel(23,0); //DO23: Serial clock// for(delay=0;delay<50;delay++);for(delay=0;delay<1100;delay++);DO_WriteChannel(23,1);for(delay=0;delay<1;delay++);}for(delay=0;delay<15;delay++);DO_WriteChannel(24,1); //DO24: X scan range CSfor(delay=0;delay<5;delay++);DO_WriteChannel(24,0);for(delay=0;delay<50;delay++);return SUCCESS;int aScanRange;int Ch3Value,Ch4Value,Ch5Value;aScanRange=7-ScanRange;Ch5Value=aScanRange/4;Ch4Value=(aScanRange%4)/2;Ch3Value=aScanRange%2;if( DO_WriteChannel(3,Ch3Value) &&DO_WriteChannel(4,Ch4Value) &&DO_WriteChannel(5,Ch5Value) )return SUCCESS;elsereturn FAILURE;}*/void Delay(long tenmicrosecond);/*----------------------------------------------------------------------------*///可编程放大器控制//Short Value:[1,4095]int portSRI;// SRI of DAC#define DO_SRI 22int portCLK;// CLK of DAC#define DO_CLK 23int portLD;// Signal L Gain Selection of DAC#define DO_LD_SIGNAL_L 18// Signal O Gain Selection of DAC#define DO_LD_SIGNAL_O 20// Signal I Gain Selection of DAC#define DO_LD_SIGNAL_I 21// Vx Scan Gain Selection of DAC#define DO_LD_X 24// Vy Scan Gain Selection of DAC#define DO_LD_Y 25// Vz Scan Gain Selection of DAC (no usage)#define DO_LD_Z 26void DACOut(short Value, int portSRI, int portCLK, int portLD){short bitOp = 0x0800;int i;static char entered = 0;// 由于4个DAC芯片公用同路数据及时钟线路,因此应防止写入过程重入if (entered!=0)return;entered = 1;// Output to DAC ChipDO_WriteChannel(portSRI, 1);DO_WriteChannel(portCLK, 1);DO_WriteChannel(portLD, 0);// Set 12 bits Register value. Most significant bit first.for (i=0; i<12; i++) {DO_WriteChannel(portSRI, !(bitOp & Value));Delay(10);DO_WriteChannel(portCLK, 0);Delay(20);DO_WriteChannel(portCLK, 1);Delay(10);bitOp >>= 1;}// Load register to ...DO_WriteChannel(portLD, 1);Delay(10);DO_WriteChannel(portLD, 0);entered = 0;}int SelXScanRange(int ScanRange){short Value;Value = (short) ScanRange;if(Value < 1) Value = 1;if(Value > 4095) Value = 4095;DACOut(Value,DO_SRI,DO_CLK,DO_LD_X);return SUCCESS;}//*----------------------------------------------------------------------------*///------------Function 117---------//#define C_YScanRangeNormal 0#define C_YScanRangediv2 1#define C_YScanRangediv4 2#define C_YScanRangediv8 3#define C_YScanRangediv16 4#define C_YScanRangediv32 5#define C_YScanRangediv64 6#define C_YScanRangediv128 7。

spm8详细教程

spm8详细教程

SPM8数据处理教程Lab 1. 数据的预处理一、概述:数据的预处理(preprocess):(1)Convert dicom files to hdr files and img images;(2)Slice Timing;(3)Realign: Estimate & Reslice;(4)Coreg: Estimate;(5)Segment;(6)两次Normalise: Write;(7)Smooth;(8)Fmri model specification;(8)Model Estimation。

二、DICOM Import:说明:转换完后会在解剖像文件名前加s,在功能像文件名前加f。

可以用“Display”来查看刚转换的图像。

(Display还有一个重要的作用是定义原点——前联合和AC-PC连线,这在做Normalise中很重要。

定义后reorient一下即可写入头信息)。

三、Slice timing1、目的:使用数学的方法使不同时间扫面的层校正为同一时间获得层。

2、过程:Date.session---[选中所有要处理的f*.文件]Number of slices---[扫描层数]TRTA---[可以用公式表示:TR-(TR/nslices)]Slice order---[扫描顺序:例如1:2:31 2:2:32分别表示从1或2开始,每间隔2个数扫描一张,即1、3、5… 2、4、6…]Reference slice---[参考层,一般选择中间的一张,对于各层扫描,一般选择即是时间的中点,又是大脑的中点。

如果是层数为偶,可以选择中点处2层中的任一层]Filename Prefix—a [默认头文件名为a]3、说明:Block Design的实验数据这一步可以跳过;event related design的实验数据必须做这一步。

四、Realign: Estimate & Reslice1、目的:如果在容许的头动范围内,可以使用一定的算法校正信号,使其靠近真实值,如果超过了这个规定的范围,则必须剔除这组数据。

SPM中文教程 汇总(已整理)

SPM中文教程   汇总(已整理)

一、SPM的安装与启动先安装matlab,然后将SPM复制到matlab下的一个文件夹(SPM2需要matlab6.0或以上版本)。

启动matlab,首先set path,然后在matlab命令窗口中输入SPM即可启动,然后选择fMRI,也可以直接输入SPM fMRI二、SPM数据处理概要先将所得数据进行空间预处理(对齐,平滑,标准化等),然后进行模型估计(将刺激的时间、间隔与血流动力函数进行卷积,所得结果与全脑象素信号进行相关分析),最后察看结果。

三、SPM8数据处理的一般步骤为方便后续的数据处理,如果数据分散处理后整合,建议所有处理数据路径保持一致,要统一路径。

处理前首先要采用数据转换软件将dicom数据转换成SPM解析格式,然后进行数据预处理,预处理结束后到matlab安装目录中备份spm*.ps文件,其中包含了空间校正和标准化的信息,然后进行建模分析。

运行命令:spm fmri,打开spm8的操作界面我们称左上侧的窗口为按钮窗口(button window),左下侧的窗口为输入窗口(input window),右侧大窗口为树形结构窗口或图形窗口(Tree Building Window or the graphics window)。

在spm8和spm5中,每一步处理都采用了直观的“树形结构”的面板,如果一个分支项左面有“+”号,你可以双击显示子分支项,如果一个分支项右面有“<-X”号,你必须为之指定选项(否则不能运行该tree),分支项的选项在其右侧面板指定,而帮助信息则在下面的面板中显示。

如果我们处理数据没有特殊需求,我们只关心带有“<-X”项目并完成输入即可,其余均可采用默认设置。

另外注意在Tree Building Window的顶部菜单,新增了一个菜单项“TASKS”,在使用批处理分析时非常重要。

以下内容,还可以参考E:\《汇总》中“静息态fMRI的数据预处理流程”这部分的讲述。

SPM12manual,统计部分(8-10)笔记

SPM12manual,统计部分(8-10)笔记

SPM12manual,统计部分(8-10)笔记fMRI model specifictaionGLM based包括以下步骤:①明确GLM设计矩阵;②⽤经典或贝叶斯⽅法估计GLM参数;③利⽤对⽐向量检查结果,⽣成统计参数图(SPMs)以及后验概率图(PPMs)。

Design matrix:每⾏对应⼀个scan,每列对应⼀个影响变量或解释变量(回归量或解释变量)。

关于GLM(⼀般线性模型)⽹络上有⼤量相关⽂章,对于多被试分析,SPM通常分为两个阶段(level):① 1st-level analysis:个体分析(within-subject)。

通常有多少被试就要进⾏多少1st-level分析。

使⽤ Specify fi rst level 和Estimate 选项。

这些选项的结果可以被⽤于做 case study。

② 2nd-level analysis:RFX analysis(Random effect analysis)。

从被试推断被试所属主体的情况。

1st level analysis:①Conditions:name(1*n cell):condition name;onsets(1*n cell):每个cell中为⼀保存condition开始时间的时间向量,每列对应⼀个condition,每⾏对应其出现时间(补充,⼼⼼⽔滴csddzh:任务刺激启动的扫描数(如1:14:70 ,代表任务从第 1个TR 开始,每14个TR 为⼀个周期,共70个TR));durations:事件时长。

⼀般这些信息都保存在condition.mat⽂件中,使⽤的时候直接load进来,使⽤Multiple Conditions.②Regressors设计矩阵中⽤来和⾎液动⼒响应做卷积的⼀列。

之后的leave-one-out实验要⽤。

暂时还没搞清楚是不是要⽤Multiple Regressors。

③Factorial design设定该选项则SPM 可以直接⽣成主要效应和交互作⽤之间必要的test:F-test(被试个体(1st level)与被试间(2nd level)的contrast image)和T-test。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、SPM的安装与启动先安装matlab,然后将SPM复制到matlab下的一个文件夹(SPM2需要matlab6.0或以上版本)。

启动matlab,首先set path,然后在matlab命令窗口中输入SPM即可启动,然后选择fMRI,也可以直接输入SPM fMRI二、SPM数据处理概要先将所得数据进行空间预处理(对齐,平滑,标准化等),然后进行模型估计(将刺激的时间、间隔与血流动力函数进行卷积,所得结果与全脑象素信号进行相关分析),最后察看结果。

三、SPM8数据处理的一般步骤为方便后续的数据处理,如果数据分散处理后整合,建议所有处理数据路径保持一致,要统一路径。

处理前首先要采用数据转换软件将dicom数据转换成SPM解析格式,然后进行数据预处理,预处理结束后到matlab安装目录中备份spm*.ps文件,其中包含了空间校正和标准化的信息,然后进行建模分析。

运行命令:spm fmri,打开spm8的操作界面我们称左上侧的窗口为按钮窗口(button window),左下侧的窗口为输入窗口(input window),右侧大窗口为树形结构窗口或图形窗口(Tree Building Window or the graphics window)。

在spm8和spm5中,每一步处理都采用了直观的“树形结构”的面板,如果一个分支项左面有“+”号,你可以双击显示子分支项,如果一个分支项右面有“<-X”号,你必须为之指定选项(否则不能运行该tree),分支项的选项在其右侧面板指定,而帮助信息则在下面的面板中显示。

如果我们处理数据没有特殊需求,我们只关心带有“<-X”项目并完成输入即可,其余均可采用默认设置。

另外注意在Tree Building Window的顶部菜单,新增了一个菜单项“TASKS”,在使用批处理分析时非常重要。

以下内容,还可以参考E:\《汇总》中“静息态fMRI的数据预处理流程”这部分的讲述。

1、转换数据dicom格式转换为img文件,将以层为单位的数据转换成以全脑为单位的数据。

转换时格式请选择NIfTI,可用SPM输入面板中的DiCOM Import模块转换,也可以采用专门的转换软件,如MRIcovert。

2、Slice timing校正1个volume中层与层之间获取(采集)时间的差异,即纠正slice(下译为扫描层)之间采集时间的差异。

这对事件相关设计的实验尤为重要,使一个TR中的各层获得时间一致(如都在一个TR的开始),相当于AFNI中tshift所做的工作。

校正后的新文件名为:a+原文件名。

原理概述:Sliceorder(扫描层序数)用于指明扫描层被采集时的顺序,其总数为n,n即一个volume (volume为一个TR时间内的扫描量)里面所包含的扫描层的总数。

每个Sliceorder(扫描层系数)同时指明了每个扫描层在图像文件中的存储位置。

因此扫描层系数表明了扫描层被采集时的时间顺序。

我们可以用SPM的Display功能来查看这个顺序。

移动鼠标的十字准线到Z 坐标为1的位置时,我们看到的就是一个volume里面第一个slice(扫描层)上的象元(voxel)。

核磁仪采集数据的时间精度为一个TR,因此我们通常默认一个TR内采集到的数据(一个volume)采自完全相同的时间。

但事实并非如此,一个TR内我们需要采集很多扫描层(例如20层)的数据以覆盖较大的脑区(通常是全脑)。

这些扫描层是一个接一个按照上面所说的sliceorder(扫描层序数)的顺序来采集的,因此各个扫描层之间的采集时间是有差异的。

Slice timing这一步所要做的就是通过一定的算法纠正这一时间差异。

常规的纠正方法是在保持整段采集信号不变的条件下推前或者推后采集的起始时间。

这可以通过简单的移动采集信号的正弦相位来做到。

一种常用的数学转换方法:傅立叶转换可以把任何复杂信号转换为由不同频率和相位的简单正弦曲线的线性组合。

这样,只要通过加入一个常数到每个频率的相位中,就可以达到移动数据起始和结束时间的目的。

我们在按钮窗口中的预处理面板中点击“Slice Timimg”,将出现如下对话框:对上图右侧选项我们做如下设置————Data,预备数个被试或者session的数据。

以下所述参数设置将被应用到所有所选数据。

点击data 并在下面的面板中点击“new session”,这样在data下会出现“session”的分支项,选中该项并点击面板下方的“select files”,然后用spm文件选择器选择你要处理的数据,最后点击“Done”。

选择数据时可以把静息态、数值任务和物理大小任务分为三个session来选(data——new session——session),也可以作为一个session来选,结果是一样的。

Number of Slices,我们输入每祯图像的层数,如“32”,即扫描层总数。

TR,我们输入重复时间,一般为2秒,我们输入“2”TA,是每祯图像获取第一层开始到获取最后一层图像的时间间隔,单位为秒。

一般可以用以下公式计算:TA=TR-(TR/扫描层数)。

这里可以不必计算出结果,直接写上带入了数字的公式就可以了。

比如,TR为3秒,扫描了20层,则可以直接写为:3-(3/20)。

我们的数据则输入“2-2/32”Slice order,输入扫描顺序。

如前述此顺序可通过SPM的Display功能查看。

我们输入“1:2:31, 2:2:32”。

指定层获取顺序的层次序参数是一个含N个数的向量,这里N是每个volume所含的层数。

每一个数表示该层在图像(volume)中的位置。

向量内的数字排列顺序是这些层的获取时间顺序。

如行向量[1 3 5 7 9 11 13 15 17 19 21 23 25 2 4 6 8 10 12 14 16 18 20 22 24](在Matlab中可表示为[1:2:25,2:2,25]) 各种扫描类型和输入的层顺序如下:ascending 升序扫描(first slice=bottom,扫描序数从底部到顶部排列,即从1顺序递增到n): [1:1:nslices];descending 降序扫描(first slice=top,扫描序数从顶部到底部排列,即从n顺序递减到1): [nslices:-1:1];interleaved 间隔扫描(扫描序数间隔递增或递减,一般顺序为2,4,6,8,10..1,3,5,7,9..n)(middle-top):for k = 1:nslices,round((nslices-k)/2 + (rem((nslices-k),2) * (nslices - 1)/2)) + 1,end;interleaved (bottom -> up): [1:2:nslices 2:2:nslices],如[1:2:25,2:2,25];interleaved (top -> down): [nslices:-2:1, nslices-1:-2:1]Reference Slice,我们输入“31”。

选择参考扫描层(一般可使用默认值),其它扫描层的起始时间都将以此层的起始时间为标准来移动进行校正。

通常选择n slice/2,如25层时选择13层作为参考层。

Filename Prefix,是指新生成的图像前加何标记,一般采用默认设置。

最后点击面板上方的向右的绿色三角即开始运行。

运行完后将会生成一系列a*.img文件,这就是时间校准后的数据。

注意很多研究者容易将时间校准和空间校准顺序颠倒,一般的观点是如果图像获取是隔层(interleaved)进行的,如1、3、5、7、9、2、4、6、8、10,则要先进行slice timing 再进行realign,如果图像各层是连续(sequential)获取的,如1、2、3、4、5、6、7、8、9、10,则要先进行realign再做slice timing。

(为什么?)3、Realign(相当于AFNI中的registration)分两步:1)coregister,将每个session的第一个scan与第一个session的第一个scan进行比较,然后将每个session中的其他scan与本session中的第一个scan进行比较,得到每个filename.img文件的转换参数,生成filename.mat文件,同时为每个session生成一个对齐参数(realignment parameters),文件名为realignment_params_*.txt2)reslice,用filename.mat文件对filename.img重新切片,生成rfilename.img文件。

并可依选择生成一个平均象,名为meanfilename.img。

以上两步具体解释如下——即使我们对被试的头部做了很好的固定,在实验过程中,被试也会不由自主的有一些轻微的头动,这在fMRI实验中尤为明显。

这一步就是把一个实验序列中的每一帧图像都和这个序列的第一桢图像按照一定的算法做对齐,以矫正头动。

做完这一步,能给出该序列中被试的头动情况,以作为是否放弃该数据的依据,如果头动超过1个voxel(功能图像扫描矩阵一般是64*64,则体素的大小为(FOV/64)*(FOV/64)*(层厚+层间距)),则要考虑放弃该时间点数据。

该程序利用最小二乘法(least squares approach)原理和含6个参数(刚体模型)的空间变换,对从一个被试获取的时间序列进行校正。

用户可指定某个volume作为随后volumes的参考。

可以是第1个volume,也可选择比较有代表性的volume(更明智的选择),例如选择磁场相对稳定的第4个volume。

校正信息(头动信息)将在结果窗口(Graphics Window)显示。

每个Session的校正信息将存储为rp*.txt,其中*为Session数据集名称。

另外,头动校正信息将以plot 图形显示。

如下图:Translation表示被试头部在X,Y,Z三个方向的平移,分别用蓝,绿,红三种颜色表示。

Rotation表示被试头部在实验过程当中绕X(L-R),Y(A-P),Z(S-I)三条轴的转动角度。

横坐标代表这个序列所采集的所有图像,纵坐标表示的是偏移量和偏转角度,分别以毫米和度为单位。

采用SPM8,头动信息和空间标准化的图形文件将以spm_“data”.ps的形式保存于matlab的工作目录下,如我们是2009年4月30日处理的数据,则将以spm_2009Apr30.ps文件存于matlab的work目录下。

我们在预处理面板校准选项中选择“Realign (Est & Res)”,出现如下对话框,我们按下面设置进行:选中“data”, 选择“New Session”, 然后选中data下出现的“Session”选项。

相关文档
最新文档