- 博客(75)
- 资源 (3)
- 收藏
- 关注
原创 从CHB-MIT数据集入手了解癫痫
癫痫分类是指seizure也就是发作的分类,通常是把脑电信号输入给机器,机器判断哪些地方是癫痫发作的,这个是目前癫痫脑电研究的最主要的大方向之一。分类刷论文拉满以后,很多研究人员开始搞预测算法,就是能不能提前识别即将要癫痫发作了,这个问题难度非常高,并且存在诸多困难,比如明确的癫痫发作前1s的过度信号算不算是癫痫发作,这个目前还没有明确的结论,因此预测虽然开展了很多研究,但是目前还处于探索阶段。癫痫发作是癫痫的主要症状,经常是毫无征兆的发生,不可预测,因此容易对人产生重大伤害。这里就出现了一个经典问题,
2026-03-31 10:01:08
77
原创 脑电采集经验教训及注意事项
本文总结了脑电采集实验的注意事项:1)使用全新导电膏降低阻抗;2)被试需当天洗头;3)打导电膏时要拨开头发,观察阻抗变化确认位置;4)提醒被试避免任何小动作,如咬牙、抿嘴等,这些会导致信号异常。这些要点有助于提高脑电数据质量。
2026-03-31 08:00:01
49
原创 脑电python分析库MNE安装
MNE-Python(通常简称 MNE)是一个开源的 Python 包,专门用于探索、可视化、处理和分析人类神经生理数据。它是目前脑电(EEG)、脑磁图(MEG)领域最流行、最全面的开源工具之一,同时也支持其他模态如皮层脑电(sEEG/ECoG)、近红外光谱(NIRS)等。
2026-02-15 17:05:25
408
原创 neuroscan curry9记录的cdt文件使用第三方工具读取报错
【摘要】使用Neuroscan Curry9记录EEG数据时,应避免选择压缩格式。压缩文件(dataguid为2912E8D8...)会导致python-MNE直接报错"Unsupported compressed data format",而MATLAB-EEGLAB虽不报错但会读取错误数据(可通过events和plot检查)。解决方案是使用Curry9将压缩文件转换为非压缩格式(dataguid为0B86B22B...)。该问题源于第三方工具对压缩格式的不兼容性,操作前需特别注意文件
2026-02-15 16:55:32
145
原创 技术细节-MNE读取neuroscan curry9版本cdt文件
如果上面两个都能成功 import 环境已经准备好了。运行成功会打印如下信息,包括记录的通道,等等。
2026-02-15 16:44:52
83
原创 “读脑”,“写脑”,“脑控”,到底有没有那么神?有创无创到底是什么意思,一文了解脑机接口和神经调控技术
近年来,“读脑”、“写脑”、“意念控制”、“脑控”等词汇频繁出现在科技新闻、影视作品甚至商业宣传中。铺天盖地的宣传,眼花缭乱的词汇,从国家六部委联合发文支持,到北京上海超一线政策频出,看起来脑机接口已经到了历史的转折点,实际上真的是这样吗?(Brain-Computer Interface, BCI) 和(Neuromodulation),近期常被混为一谈,实则目标、原理与应用场景大不相同,其技术对应的问题也千差万别。
2026-02-15 15:41:39
122
原创 脑机接口与神经调控专栏开通
这个专栏开通背景是脑机接口和神经调控在2024-2025年得到了空前的关注,但其研究和应用均存在较大的工程挑战,相对于现在市场上盲目的叫好或者非常内人员对于脑控、永生这些话题的无稽之谈,作为这个行业的研究人员,个人更偏向于一步一步解决实际问题,而不是一步登天,这在本领域也不太可能,因为脑机接口和神经调控是一个伦理及其严格的领域,特别涉及侵入式的高级研究,其发展极度依赖当前对大脑的理解,尽管脑机接口和神经调控本身也是探索大脑的工具,但必须承认二者的发展要相辅相成。
2026-02-15 10:04:54
68
原创 机器学习-卷积神经网络CNN中的单通道和多通道图片差异
在CNN中涉及到的主要就是image kernel bias这三个元素。这里image表示是首层的输入,后边卷积层的impute都是前边的output,与首层操作类似,不再多说。# 定义一个二维卷积层# 假设有一个4维的输入张量 x,形状为 (batch_size, in_channels, height, width)# 在输入张量上应用卷积层# 输出张量的形状为 (batch_size, out_channels, output_height, output_width)其中,
2023-03-07 18:44:15
5130
3
原创 玩转NVIDIA Jetson (30)--- 解决jetson平台使用Python import包时出现illegal instruction(cpre dumped)问题
这个方法是最简单的方法,需要注意的是,这种方法只适用于特定的软件包,不能解决所有类似的问题。最近在一台新的jetson nano上配置python开发环境,使用conda方法安装的包,在import导入时出现了错误。作用就是设置OpenBLAS库使用ARMv8架构编译,这样可以避免与Jetson Nano的CPU架构不匹配的问题。这个问题之前在国外的论坛找到过解决方案,但是时间久了又忘了,这次再遇到,记录下来,以免以后再碰到同样的问题。在这种情况下,可以通过设置环境变量来指定使用的CPU架构。
2023-02-28 10:43:21
1871
原创 玩转NVIDIA Jetson (28)--- jetson clocks对tensorRT推理速度的影响
使用resnet18训练了一个CNN网络,放到jetson nano上进行推理的时候,发现前几组推理耗时比较久,五次大概是50ms 40ms 30ms 20ms这种递减的情况,随后进入了一个比较稳定的阶段,稳定在20ms左右的推理速度。jetson clocks的使用在之前文章中专门提过,这次是在使用tensorRT加速CNN的时候偶然发现了他的一些影响,记录下来,希望对其他人有所帮助。可以看到,除了第一次耗时之外,后边的计算耗时就很稳定了,也解决了我的应用问题。
2023-02-15 12:45:45
1273
6
原创 使用MobaXterm tunneling访问集群(服务器)jupyter notebook
想要在本地计算机C上使用高性能服务器上的计算节点运行jupyter notebook相关的代码。高性能服务器上通常只有一个公网ip用于账户登陆管理,但有多个计算节点,需要使用公网IP通过SSH方式登入管理节点A,并使用SSH二次登陆计算节点B,此时如果需要在本地计算机C上想要操作计算节点B的计算资源,例如使用节点B的jupyter notebook,需要进行单独的配置。
2022-11-22 10:04:26
2290
原创 环境配置 - Conda虚拟环境下配置jupyter notebook
jupyter notebook使用anaconda环境3. 将当前环境写入jupyter notebook中注意,这里的env是环境明, display_name是你要在jupytername里显示的kernel名字,一般情况下是一个名字,也可以不一致,这个看个人需求。这时候通过change kernel就可以使用配置好的anaconda环境了
2022-11-14 15:03:22
1478
原创 玩转NVIDIA Jetson (26)--- 在python虚拟环境中快速使用tensorRT
python版本的tensorRT是跟随jetpack已经安装好的,但是在编译的时候只适配了python2.7和python3.6版本,也就是jetpack自带的python版本,如果需要在自己创建的conda环境中进行使用,会出现无法引入包的情况。pythonpath环境变量是导入包的时候自动检索的目录,默认情况下是检索python解释器所在文件目录下的包,我们只需要将这个变量多配置一个原机自带的python包目录,就可以快速使用tensorRT了。2.切换到你所使用的虚拟环境,安装pycuda。
2022-09-04 17:24:03
2063
原创 玩转NVIDIA Jetson (25)--- jetson 安装pytorch和torchvision
在jetson上安装pytorch能够快速的帮助PC用户在熟悉的环境下进行开发,但是这个过程里边有一些坑,我建议大家参照官方给出的安装指导来进行安装,包括pytorch和包含各种网络的torchvision。这里需要特别注意的一个问题就是你需要选择与你机器上jetpack相匹配的版本,千万别下错了,比如我这里用的是jetpack4.6,那我安装的pytorch就是V1.10.0版本。我还是建议大家用虚拟环境,不然jetson上的python环境非常容易被搞乱,具体安装方法见之前的文章。
2022-09-04 10:45:37
11174
7
原创 玩转NVIDIA Jetson (24)--- jetson docker非sudo使用
jetson系统中安装了docker,但在使用的时候每次都需要加sudo权限,很麻烦。6.测试docker命令,拉取一个ubuntu18.04镜像跑hello world。解决方案是将当前用户添加到docker的用户组里,这样就避免了重复的sudo输入。一般会出现类似 docker:x:127,证明用户组存在,如果没有,手动创建。一般会出现 docker:x:127:nano, nano就是我们新加入的。3.将当前用户加入docker用户组,以nano用户名为例。5.查看用户是否已经在用户组中。
2022-08-24 08:44:18
778
原创 玩转NVIDIA Jetson (23)--- jetson nano 添加swap内存
不管是使用4GB还是2GB的nano,在进行一些任务会受到内存的限制,要么卡死,要么killed,要么无法分配内存,而刷机的时候我们很少会去分配swap分区,这会影响到我们使用jetson进行一些大内存的任务,比如训练神经网络,编译一些软件工具,使用tensorRT等。本文介绍如何在刷机后添为nano添加swap分区,从而保障一些AI任务的运行。创建好swap分区以后,在/etc/fstab文件中追加一行。这样保障了改变的永久生效。
2022-08-19 11:50:24
2105
2
原创 玩转NVIDIA Jetson (22)--- jetson clocks的使用
Jetson 使用了DVFS (Dynamic voltage and frequency scaling )技术,该技术的目的是调节各处理器的电压值。有的时候我们需要在一次开机过程中的一段时间使用高性能模式,任务结束后又想要关闭应该如何操作。在默认情况下,DVFS功能是开启的,但针对一些特殊的任务,比如用深度网络run一张图片,需要打开性能封印。系统默认是不开启jetson_clocks模式的,也就是一个平衡性能的状态,此时使用命令。保存当前的DVFS模式,然后关闭DVFS。查看板子当前的工作状态。
2022-08-19 11:32:14
5803
原创 Jetson人工智能系列(1)- jetson安装python和anaconda那些事
jetson平台下的python版本管理和anaconda安装
2022-06-19 11:12:31
7204
9
原创 linux时间相关函数
kernel#include <linux/ktime.h>ktime_t calltime, delta, rettime;unsigned long long duration;calltime = ktime_get();YOUR FUN HERErettime = ktime_get();delta = ktime_sub(rettime,calltime);duration = (unsigned long long)ktime_to_ms(delta);u
2022-01-10 16:04:03
823
原创 玩转NVIDIA Jetson (21)--- jetson isolcpus
在jetson平台jetpack4.6之后的版本,可以很容易的将一个CPU独立出来使用。打开/boot/extlinux/extlinux.conf在APPEND选项最后加入isolcpus=3这时可以通过cat /proc/cmdline来查看是否已经将isolcpus加入,并且重启可以通过系统监视来查看独立出来的CPU是否使用率是0%。独立出来的CPU不接受其他程序进行运算,除非显示的使用taskset -c 3 xxx上述代码可以使XXX程序单独运行
2022-01-03 20:24:45
1368
原创 Linux进程相关操作
1. 查看系统内所有的进程ps -eps -efps -Aps -eF这几个命令显示的内容多少不一样,大家可以自己长尝试一下。2.通过进程名字查看PIDpgrep namepgrep -l namepgrep -o namepgrep -n namename就是你要找的进程名字。这种情况适用于自动化获取PID,并进行一些操作的情况。3.查看进程的详细信息cat /proc/pid/status4.查看进程的优先级chrt -p pid5.修改进程.
2021-12-19 12:00:04
551
原创 QT产生随机数
使用QT的QTime库产生随机数,代码如下#include <QTime> QTime randtime; randtime = QTime::currentTime(); qsrand(randtime.msec()+randtime.second()*1000); //以当前时间ms为随机种子 int n = qrand() % 100; //产生100以内的随机整数float fn = float(n)/10; //产生10以内的随机浮点数,精度为小数点
2021-11-27 16:37:08
13479
原创 工具类 - jetson录屏工具和串口调试工具
录屏工具vokoscreen安装sudo apt-get install vokoscreen运行vokoscreen带界面的串口调试工具cutecom安装sudo apt-get install cutecom运行cutecom
2021-10-26 10:14:22
1152
原创 Linux ubuntu开机自动加载设备驱动
背景自己写的驱动在用的时候经常需要手动加载,这很麻烦,本文介绍如何开机自动进行驱动加载。第一种方法,适合部署阶段,也就是你的驱动不会再改了step1准备好你的.ko文件,将它复制到/lib/modules/xxx/kernel/drivers/xxx第一个XXX代表了你机器的架构,比如你是4.9-Linux,第二个XXX是你依据你的驱动类型归类的文件夹,比如你的驱动是基于SPI的驱动,那就放在SPI下面。Step2建立驱动map文件depmod -aStep3
2021-10-21 12:09:25
8509
6
原创 玩转NVIDIA Jetson (20)--- jetson 配置国内源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bakjiaruyixianeirong.deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main multiverse restricted universedeb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main mult..
2021-09-29 15:50:10
2908
原创 docker常用命令
docker所有命令集合 attach Attach local standard input, output, and error streams to a running container build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders between .
2021-09-28 23:05:31
224
原创 github上传本地文件夹到新仓库
首先打开github,选择新建仓库填写仓库名字,添加仓库然后打开自己本地要上传的文件夹git initgit add .git commit -m "first commit"git branch -M maingit remote add origin https://github.com/gaosiy/test.gitgit push -u origin main这里注意remote add 是你自己的链接...
2021-09-18 13:46:51
1238
原创 解决jetson Xavier nano没有spidev的问题
在最新的36.2.1版本中,使用ls /dev/发现没有spidev0.0之类的设备,自然也就无法使用spidev的驱动了,之前的版本是默认加载spidev的。不知道这个版本是怎么考虑的。解决办法1modprobe spidev这种方式是手动加载spidev的驱动,但是重启后失效。解决办法2打开module config的文件gedit /etc/modules-load.d/modules.conf添加一行spidev这样每次启动会默认加载。...
2021-09-18 11:05:50
2487
12
原创 C语言动态创建二维数组
在编程中有时需要使用二维数组作为buffer,下面是我写的一个二维数组的demo。这里面涉及到几个内存操作的知识点,一个一个的来讲。1. 创建两个1维数组,用于给二维数组填充值的时候使用。/*2行27列,一维数组长度为27*/#define BUFF_SIZE_ROW 2#define BUFF_SIZE_COL 27int main(){ /*初始化两个原子数据,全1和全2*/ unsigned char data[BUFF_SIZE_COL];
2021-08-30 22:45:02
4428
原创 玩转NVIDIA Jetson(19)--- jetson的40pin外部接口
Jetson平台的所有设备都向外提供了40pin的接口,包含了丰富的常用通信接口,SPI,I2C,UART等。下图是Xavier的40pins的详细信息。下图是nano的40pins详细信息。以上两张图片均来源于国外网站https://www.jetsonhacks.com/下面说说上边两幅图如何应用1.关于GPIO编号。如Xavier图中所示的,pin7是GPIO422,这个GPIO422就是你在写程序的时候输入的GPIO编号信息。比如我可以用以下代码设置GPIO...
2021-08-29 20:46:09
4470
4
原创 玩转NVIDIA Jetson (18)--- nano xavier设备树device tree相关
背景本文介绍一些设备树相关的知识,包括设备树文件在哪,如何修改,如何编译,如何应用等。这些问题在我做设备驱动开发的时候踩了很多坑,找了很多资料。修改设备树文件的两种方式1.在机器上反编译DTB文件直接修改首先找到/boot/目录下系统所使用的dtb文件,具体文件需要去官网查看,我在下文中会列出nano和Xavier的文件名,其他机器可以自行去查找。找到文件后把他拷贝到外边的一个单独目录,建议拷贝两份,一份用于备份,一份做修改。使用dtc命令进行反编译。比如你的DTB文件是A.DTB,
2021-08-29 12:06:14
8613
10
原创 为什么要用设备树device tree
1.什么是设备树这里不会用太多专业名词来解释设备树是什么,如果需要从专业的角度去理解网上有很多相关的书籍和资源供大家参考。这里我用通俗的语言对设备树做一个解释。举个例子,你的设备驱动是一套炒菜的流程,但是具体用哪个锅,哪种火,是天然气还是电磁炉,你需要告诉他,这些东西也就是你机器的硬件信息。2.为什么要用设备树以往驱动的这些硬件信息都是存在一个单独的文件里的,但是你想想,这么多厨师,这么多种菜,显然每一个都准备一个文件来描述,这个会增加Linux内核的冗余度,对内核非常不友好。当一个公司在一
2021-08-29 11:00:48
4848
原创 linux设备驱动开发常用命令(持续更新)
1. 查看所有设备及设备号cat /proc/devices2. kernel log实时显示dmesg -wH3.手动创建设备节点,ad设备名字,c 字符驱动,200主设备号,0次设备号mknod ad c 200 0
2021-08-29 10:42:31
460
2
原创 玩转NVIDIA Jetson AGX Xavier(17)--- 驱动开发之jetson的设备驱动编译
前言通过内核编译设备驱动是做驱动开发的必备技能。这篇文章的内容我废了很大的劲儿,但是估计需要的人不多。NVIDIA给出了一套编译驱动的教程,在下边的链接,但是写的说实话不太好懂。我这里单独出一个。官方教程https://docs.nvidia.com/jetson/l4t/#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/kernel_custom.html#wwpID0EUHA如果后边地址该了,可以参考 ke.
2021-07-16 10:45:27
5952
12
NVIDIA jetson Xavier中文指导手册
2019-03-26
ubuntu12.04下安装freesurfer文件 libXss.so.1.0.0;libjpeg.so.8.0.2
2019-03-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅