当前位置: 首页 > news >正文

【LabVIEW FPGA入门】FPGA中的数学运算

        数值控件选板上的大部分数学函数都支持整数或定点数据类型,但是需要请注意,避免使用乘法、除法、倒数、平方根等函数,此类函数比较占用FPGA资源,且如果使用的是定点数据或单精度浮点数据仅适用于FPGA终端。

1.整数运算

支持的数据类型:

  • 8位有符号和无符号整数数值
  • 16位有符号和无符号整数数值
  • 32位有符号和无符号整数数值
  • 64位有符号和无符号整数数值

1.1加减法

        

1.2乘除法

        为了节省FPGA资源,最好不直接用FPGA上乘的除法函数。一般可以用 商与余数 和 按2的幂缩放 。(但是在FPGA里,乘法需要先转成二进制做加法运算,再做乘法,除法也是先转成二进制做减法在做除法)

        除法函数可以用商与余数替代,但是这同样会使用较多FPGA资源。

        乘除法可以用 按2的幂缩放 替代。

        如果想把数据按非整数缩放,比如0.4。那就需要先乘再缩放。

2.二进制运算 

3.定点数运算

        定点数表示用户指定范围和精度内的有理数。定点数的大小在1-64位之间。可配置定点数为带符号或不带符号。

以定点数据类型表示有理数

定点数具有固定个数的整数位和分数位。整数位和分数位分别在二进制点的左、右两侧。由于定点数可指定其确切的位数,故二进制小数点的位置是固定的。

例如,在LabVIEW中,有理数0.5可表示为一个总位数为8、整数位为4的定点数。

有理数对应的定点数
0.50000.1000

在LabVIEW中,同一个有理数也可表示为一个总位数为16、整数位为8的定点数。

有理数对应的定点数
0.500000000.10000000
注:  以定点数表示有理数时,如未指定定点数确切的位数,LabVIEW将调整定点数的位数,尽量避免数据丢失。LabVIEW无法处理大于64位的数字。

 

配置定点数

要将一个数设置为定点表示法,右键单击数据对象,从快捷菜单中选择表示法,改变对象的数据类型。可配置定点数的编码。还可指定定点数是否包括上溢状态,以及数值函数如何处理定点数的上溢和凑整。如要配置一个定点数,右键单击常量、控件,或数值函数,从快捷菜单中选择属性,打开数值属性数值常量属性数值节点属性对话框进行配置。

编码

如要数值的比特数为特定值,需指定定点数的二进制编码方式。

  • 有符号-指定定点数据是否带符号。如选择有符号,则符号位总在表示数据的位字符串的第一位。
  • 无符号-指定定点数据是否有符号。
  • 字长-位字符串的总位数,是LabVIEW表示定点数据时的位数。LabVIEW接受的最大字长为64位。某些终端可能仅支持字长较短的数据。如在终端上打开一个VI而VI包含的定点数大于终端所能接受的字长,则VI出现断线。参考终端的相关文档,确定终端接受的最大字长。
  • 整数字长-指位字符串中LabVIEW用于表示定点数的整数位数,或从最高有效位左侧或右侧的初始位置开始,将二进制小数点移动到最高有效位所需的位数。整数字长的长度可以大于字长,可以为正也可以为负。

例如:

<s, 16, 8>是一个整数位为8的16位有符号数。下图表示一个字长为16、整数字长为8的有符号数。

1字长(16位)
2整数字长(8位)
3符号位
4二进制小数点
长整数或负整数字长

如整数字长大于字长,则LabVIEW不保存超过字长的那部分整数位。下图表示一个字长为8、整数字长为10的数。

1字长(8位)
2整数字长(10位)
3整数位未保存
4二进制小数点

如整数字长为负,LabVIEW将不保存任何整数位,并且也不保存从二进制小数点算起与负数相同的分数位。下图表示一个字长为8、整数字长为-2的数。

1字长(8位)
2字长-整数字长(8位-2位)
3分数位未保存
4二进制小数点

范围

LabVIEW根据用户为定点数指定的编码值计算定点数的范围和delta。

  • 最小值-设置定点数据范围的最小值。
  • 最大值-设置定点数据范围的最大值。
  • Delta-指定范围内数字间的增量。

将光标移动到传递定点数据的连线上时,LabVIEW在即时帮助窗口中以下列格式表示该定点数据的配置情况:

[最小值,最大值]:Delta

例如:

[–4, 4]:1的最小值为–4,最大值为4,delta为1。

定点算术

对指定字长的定点数进行算术运算时,二进制小数点的位置与VI运行之前二进制小数点的位置相同,并无改变。这与浮点数恰好相反,进行浮点数算术运算时,浮点数的二进制小数点或十进制小数点的位置将改变。如算术运算所要求的字长大于定点数的字长,则运算后可能导致数据损失。

LabVIEW将调整数值函数的输出值的字长以尽量避免数据损失。然而,如表示输出值所要求的字长超出了指定的最大范围或LabViEW所允许的64位,则LabVIEW无法避免数据损失。如要配置数值函数的输出设置,右键单击函数,从快捷菜单中选择属性,打开数值节点属性对话框进行配置。

上溢和凑整

对定点数进行算术运算或使用转换为定点数函数将数值数据转换为定点数据时,都可能发生上溢和凑整。通过配置,LabVIEW可避免数值函数输出的定点数发生溢出或凑整。但在某些条件下LabVIEW无法避免溢出或凑整。

例如,将定点值连线数值函数(加、减、乘、平方),LabVIEW将默认为增加输出值的字长以使运算结果得以正常显示。此做法同样适用于浮点值。然而,如避免溢出或凑整所要求的字长超出了LabVIEW可接受的最大字长或用户指定的最大字长,则溢出或凑整可能无法避免。LabVIEW接受的最大字长为64位。

注:  如将一个定点值连接至除函数、倒数函数、平方根函数,因为精度无穷,所以经常会发生凑整状态。

在二进制中无法确切表示的类型周期和值也可能导致溢出或凑整。

溢出

当运算结果在输出类型能表示的值的范围外时,将发生溢出。可为溢出选择下列溢出模式进行处理:

  • 饱和-如输出值大于输出类型可接受范围的最大值,LabVIEW将强制,即对将该值四舍五入至指定的最大值。如值小于可接受范围的最小值,LabVIEW将值强制转换为指定的最小值。
  • 绕回-如输出值在输出类型可接受范围之外,LabVIEW将舍弃输出值的有效位,直到输出值位于输出类型的可接受范围内。该选项要求输出值符合指定的编码方式。如选择该选项便无法指定可接受范围,因为LabVIEW将自动使范围符合编码方式。
注:  通常情况下,饱和模式需要FPGA终端上额外的硬件资源。

将定点数配置为包括上溢状态,确定是否发生上溢。如定点值包括上溢状态,LabVIEW将分配额外的存储空间,用于追踪作为计算结果的定点值是否溢出。将定点数配置为包括上溢状态后,可在定点数控件和常量上显示上溢状态LED。定点值的溢出状态为TRUE时,LED灯亮。也可使用定点溢出?函数确定定点数的上溢状态。定点函数可对定点数字的溢出状态进行操作。

注:  LabVIEW不检查定点数的下溢情况。

使用比较函数比较定点数时,LabVIEW将忽略上溢状态,只比较数值。例如,如使用等于?函数比较上溢状态为TRUE的定点数和数值为1.5,无上溢状态的定点数,LabVIEW将返回TRUE。

如要配置数值函数的输出设置,右键单击函数,从快捷菜单中选择属性,打开数值节点属性对话框进行配置。该对话框用于配置LabVIEW处理溢出和凑整。

凑整

当输入值或运算结果的精度大于输出类型的精度时,将发生凑整。LabVIEW将输入值强制为一个与输出类型精度相同的值。例如,假设输出类型可表示下列连续值st。如运算结果为x,且xst之间,即s<x<t,由于输出类型无法精确表示x,所以需要进行凑整。

可为凑整选择下列凑整模式进行处理:

  • 截断舍入-向下取整到输出类型能表示的最近值。LabVIEW将舍弃值的最低有效位。取整模式的性能最佳,但得到的输出值精度最低。

    例如,如输出值x在连续值st之间,即

    s<x<t

    则LabVIEW将x设为与s相同。
  • 半值向上-取整到输出类型能表示的最近值。如值正位于两个有效值之间,该模式将值取整为两个有效值中较大的一个。LabVIEW在输出值上加上最低有效位的一半,然后截断该值。这种取整模式比阶段模式的输出值更准确,但对性能影响较大。

    例如,如输出值x在连续值st之间,即

    s<x<t

    LabVIEW将x设为等于st二者之中较近的那个值。如x正位于st之间,则LabVIEW将选择使x等于t
  • 奇偶舍入-取整到输出类型能表示的最近值。如取整的值刚好在两个有效值之间,LabVIEW将检查该值中取整后将成为最低有效位的位。如该位为0,该模式将把值取整到两个值中输出类型能表示的较小的值。如该位不为0,该模式将值取整到两个值中较大的值。取整模式对性能的影响最大,但其输出值比截断模式更准确。该模式也将并且中和了进行多次半值向上的取整时可能出现的趋向较大值的倾向。该模式为默认取整模式。

    例如,如输出值x在连续值st之间,即

    s<x<t

    LabVIEW将x设为等于st二者之中较近的那个值。如x正位于st之间,如取整后最小有效位为0时,选择s;如取整后最小有效位不为0时,选择t。如取整后最小有效位不为0时,选择t
注:  取整模式对性能的影响都微乎其微。但是,如在FPGA的终端运行处理溢出的VI,则取整可能会对性能有较大的影响。

 

定点配置对FPGA资源的影响

        在FPGA VI中使用定点数时,为特定函数选择正确的溢出和四舍五入模式非常重要。高吞吐率数学函数和部分数值函数带有配置对话框,可用于模式选择。如能够产生溢出或四舍五入,这些模式将影响FPGA VI所需的FPGA资源量。如不能产生溢出或四舍五入,操作不需要使用额外的FPGA资源。

多数情况下,在函数的配置对话框中勾选匹配至源复选框可避免溢出。如勾选此复选框,LabVIEW将尝试调整输出数据类型的宽度和范围,从而不会产生溢出或四舍五入。但此调整并不适用于所有情况。例如,函数包含除法时会一直产生四舍五入。且某些函数不包含此复选框。

溢出模式的影响

通常溢出模式以下列几种方式影响FPGA资源:

  • 饱和-需要FPGA资源判定输入值是否位于输出类型的范围内并选择返回原始值或饱和值。
  • 截位-所需的FPGA资源少于饱和模式。

四舍五入模式的影响

通常四舍五入模式以下列几种方式影响FPGA资源:

  • 截断舍入-移除位,因此不需要占用FPGA资源。但此模式对于多数数据流将产生最大的平均误差。此模式为整型操作的默认模式。
  • 半值向上(非对称)-添加至输出数据类型的最低有效位。此选项需要一个宽度等于输出数据类型的加法器。
  • 奇进偶舍-所需FPGA资源最多,且在三种舍入模式中生成最长的组合路径。但此模式对于多数数据流可返回统计意义上最正确的结果,因此其为定点数据类型的默认四舍五入模式。
注:  高吞吐率除和高吞吐率倒数函数使用输出值向零取整的四舍五入模式。此模式将输出值四舍五入为数据类型能够表示的最接近的值。如值为整数,LabVIEW进行截断取整。如值为负数,假设至少有一位删除的位不为零,LabVIEW删除最低有效位(LSB)并为剩余的LSB添加符号位。

例如,输出值x位于连续值st之间(s < x < t),如x为正数,LabVIEW设置x等于s。如x为负数,LabVIEW设置x等于t

对于这两个函数,与其它四舍五入模式相比,向零取整使用的FPGA资源最少。不能为这些函数指定不同的四舍五入模式。

如何将定点数缩放到整数的整个范围 

        LabVIEW 中可用于将定点 (FXP)转换 为整数或浮点的 函数有:

  • 定点到整数转换  用于转换整数。
  • 用于转换任何数值数据类型的 定点函数。

 

 

将任意大小的 FXP 缩放为整数

        定点到整数转换可用于将 FXP 数字转换为整数,并且整数的大小将基于 FXP 数字的大小。例如,如果您的 FXP 的字长为 8 位,则会将其转换为 I8,但字长为 9 的 FXP 将转换为 I16。(字和整数字长描述)

        这在某些情况下可能没问题,但是如果我们需要将任何FXP(任何字长)转换为特定大小的整数,例如将任何大小的 FXP 转换为 I16,我们需要将该 FXP 转换为在使用定点到整数转换之前,字长为 16 位:

        1.创建您的初始 FXP 编号,这可以来自 FPGA I/O、常数或控件。 

                如果使用控件或常量,您可以右键单击它,选择“属性”=>“数据类型” 并编辑字长和整数字长。设置 字长 = 4 位,整数字长 = 2 位。

        2.将 FXP 控件(或常数)连接到 定点 转换函数,并将输出配置设置为 16 位。

        3.右键单击 “到定点” 并选择 “属性”=>“输出配置”将编码设置为带符号, 字长 = 16 位整数字长 = 2 位。这将确保输出设置为 16 位有符号整数 (I16),这意味着 I16 数字的整个范围为 -32768 I16 到 +32767 I16,而无符号 16 位整数 (U16) 的范围为 0 到 65535

        4.将定点 转换函数的输出连接到定点到整数转换 函数。其输出将是一个 16 位整数,缩放到正确的范围。

将整数转换回 FXP

要转换回定点数,请反转函数。

        1.将整数连接到 整数到定点 函数,

        将已知的 FXP 值连接到整数到定点转换函数 上的 定点类型输入。可以使用控件或常量,只要具有与初始 FXP 数字相同的属性(字和整数字长度)即可确保其以正确的格式转换回来。或者,将初始 FXP 值直接连接到定点类型 输入。 

        注意:它不是 必需的 输入,但建议连接,以便您更好地控制功能。 

 

        2.整数到定点 转换的输出 将是一个 FXP 数字,其属性与初始 FXP 数字相同。

相关文章:

【LabVIEW FPGA入门】FPGA中的数学运算

数值控件选板上的大部分数学函数都支持整数或定点数据类型&#xff0c;但是需要请注意&#xff0c;避免使用乘法、除法、倒数、平方根等函数&#xff0c;此类函数比较占用FPGA资源&#xff0c;且如果使用的是定点数据或单精度浮点数据仅适用于FPGA终端。 1.整数运算 支持的数…...

华为设备VRRP配置

核心代码&#xff1a; 需要对所有虚拟路由器设置&#xff08;要进入到对应的端口&#xff09; vrrp vrid 38 virtual-ip 192.168.10.254 vrrp vrid 38 priority 120 vrrp vrid 38 track int g0/0/1 reduced 30①mac由vrid生成 ②指定虚拟ip ③虚拟ip作为内部主机的网关&#x…...

2024年艺术发展与文化产业国际会议(ICADCI 2024)

2024年艺术发展与文化产业国际会议(ICADCI 2024) 2024 International Conference on Art Development and Cultural Industry(ICADCI 2024) 数据库&#xff1a;EI,CPCI,CNKI,Google Scholar等 一、【会议简介】 2024年艺术发展与文化产业国际会议(ICADCI 2024)将于丽江这座美丽…...

华为手表开发:WATCH 3 Pro(10)获取心率_java 华为手表获取心跳

华为手表开发:WATCH 3 Pro(10)获取心率_java 华为手表获取心跳 Excerpt 文章浏览阅读1.2k次。鸿蒙开发,获取手表心跳,按钮点击后触发的方法,我们将跳转页面的代码写在这个位置就可以实现点击按钮进行跳转页面的动作。在HTML文件“index.hml”,添加按钮,这里按钮用到是标…...

使用企业订货软件的担忧与考虑|网上APP订货系统

使用企业订货软件的担忧与考虑|网上APP订货系统 网上订货系统担心出现的问题 1&#xff0c;如果在订货系统中定错(多)货物了该怎么办 其实这也是很多人在网购或者是现实中经常会犯的一个错误&#xff0c;但是网上订货平台为大家提供了很多的解决方案&#xff0c;其中对于订单的…...

Java-集合-Collection类

1 需求 2 接口 Interface Collection<E> public interface Collection<E> extends Iterable<E> 2.3 Method Detail int size()boolean isEmpty()boolean contains(Object o)Iterator<E> iterator()Object[] toArray()<T> T[] toArray(T[] a)…...

Linux:/proc/kmsg 与 /proc/sys/kernel/printk_xxx

目录 前言一、/proc/kmsg1、简介2、如何修改内核日志缓冲区3、dmesgklogctl 函数&#xff08;来源于 man 手册&#xff09; 4、扩展阅读 二、 /proc/sys/kernel/printk_xxx三、/dev/kmsg 前言 本篇文章将为大家介绍与 Linux 内核日志相关的一些控制文件&#xff0c;共同学习&am…...

使用 Postman 发送 get 请求的简易教程

在API开发与测试的场景中&#xff0c;Postman 是一种普遍应用的工具&#xff0c;它极大地简化了发送和接收HTTP请求的流程。要发出GET请求&#xff0c;用户只需设定正确的参数并点击发送即可。 如何使用 Postman 发送一个GET请求 创建一个新请求并将类型设为 GET 首先&#…...

【网站项目】基于jsp的拍卖网站设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…...

为什么洗衣机会每天自动上传3.6GB数据?

“为什么我家的LG洗衣机每天都会上传3.6GB的数据&#xff1f;” 一位名为Johnie用户发现他家电设备的异常行为后表示很不理解&#xff0c;随后他把相关信息发布在X平台&#xff0c;很快这篇帖子就收获了超过1700万次的浏览量&#xff0c;并迅速变成一场争议和网络安全battle。…...

word写标书的疑难杂症总结

最近在解决方案工作&#xff0c;与office工具经常打交道&#xff0c;各种问题&#xff0c;在此最下记录&#xff1a; 1.word中文档距离文档顶端有距离调整不了 1.疑难杂症问题1&#xff0c;多个空格都是不能解决 #解决办法&#xff1a;word中--布局-下拉框---“版式”--“垂直…...

2024,会更好嘛?

2023转眼过去&#xff0c;从1月的前端&#xff0c;2月的java&#xff0c;3月的数据库&#xff0c;4月的运维&#xff0c;我尝试了许多技术方向&#xff0c;终究在2023年5月&#xff0c;凭着背的Java面试题&#xff0c;拿到了三四个offer。2023年6月&#xff0c;边玩边整自己的毕…...

Nsis打包Unity Exe文件(通用)

Nsi 脚本 !include "MUI2.nsh"#使用现代UI Unicode true #使用Unicode !define EXENAME "exeName" #定义常量 exe名称 !define SHORTCUT "快捷方式名称" #定义桌面快捷方式的中文名称Name ${EXENAME} #安装程序的title OutFile "${EXENAME…...

【Azure 架构师学习笔记】- Azure Databricks (6) - 配置Unity Catalog

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (5) - Unity Catalog 简介 UC的关键特性 之所以DataBricks要用UC&#xff0c; 很大程度是对安全的管控。从上文可以了解到它的四大特性&#…...

redis7部署集群:包含主从模式、哨兵模式、Cluster集群模式等三种模式

前言&#xff1a; redis部署集群常见的一般有三种模式&#xff1a;主从模式&#xff0c;Sentinel&#xff08;哨兵模式&#xff09;&#xff0c;Redis Cluster&#xff08;高可用Cluster集群&#xff09;&#xff0c;根据不同的需求可自定义选择部署方式。 Redis 主从模式&…...

072:vue+mapbox 点击某图层feature,高亮这部分

第072个 点击查看专栏目录 本示例是介绍如何在vue+mapbox中点击某图层feature,高亮这部分。思路是通过点击,获取点击部分的feature信息,生成一个新的source和layer,如果这个图层不为空,则清除之,相当于点击了别的地方,原有的高亮会删除掉,在别的地方高亮。 直接复制下…...

2024年最新安全且稳定的大数据传输方式

随着大数据时代的兴起&#xff0c;数据传输的速度和效率已经成为企业竞争的关键因素。到了2024年&#xff0c;大数据传输领域迎来了新的趋势和挑战&#xff0c;同时也涌现出了一系列创新的解决方案。本文将深入探讨这些新趋势和解决方案&#xff0c;意在帮助企业更好地迎接大数…...

Docker 数据卷容器

docker在容器中管理数据主要有两种方式&#xff1a; 数据卷&#xff08;Volumes&#xff09;挂载主机目录&#xff08;Bind mounts&#xff09; 而每个容器的数据都是独立的&#xff0c;数据跟随着容器的生命周期。如mysql容器&#xff0c;如果容器被删除了所有的数据都会丢失…...

深度学习记录--梯度检验

数值逼近 为了对梯度进行检验&#xff0c;需要计算近似误差值来接近梯度 对于单边误差和双边误差公式&#xff0c;其中双边误差与真实梯度相差更小&#xff0c;故一般采用双边误差公式 双边误差 公式&#xff1a; 梯度检验(gradient checking) 对于成本函数&#xff0c;求出…...

ERP进出库+办公用品管理系统

系统架构 简介系统架构部分页面结构图UML逻辑图办公用品入出库 简介 本系统适用于ERP企业公司职员关于系统化的申请相关办公用品&#xff0c;提高整体系统整合行&#xff0c;加大上下级之间的联系&#xff0c;规避因人员过多&#xff0c;而浪费人力在简单重复的工作中&#xf…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作&#xff1a;验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化&#xff1a;测试aof和aof持久化机制&#xff0c;确保数据在开启后正确恢复。 事务&#xff1a;检查事务的原子性和回滚机制。 发布订阅&#xff1a;确保消息正确传递。 2、性…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...