BT-2の蓝牙技术原理のBT协议の蓝牙核心协议の无线射频和基带

2023-05-16

蓝牙技术原理のBT协议の蓝牙核心协议の无线射频和基带

  • 0. 脑图
  • 1. 蓝牙射频
    • 1.1 射频信道
    • 1.2 射频规范
  • 2. 链路控制器和基带
    • 2.1 物理链路
    • 2.2 分组
    • 2.3 蓝牙编址
    • 2.4 数据加噪
    • 2.5 蓝牙时钟
    • 2.6 逻辑信道
    • 2.7 信道控制
    • 2.8 跳频序列选择
    • 2.9 蓝牙安全性

0. 脑图

本节介绍的是蓝牙无线射频,链路控制器及其所控制的基带功能。
在这里插入图片描述
以上是本节的知识结构脑图,比较繁杂。

1. 蓝牙射频

在这里插入图片描述

1.1 射频信道

蓝牙工作在2.4GHz ISM频段上,许多国家在这个频带范围是2400~2483.5MHz。蓝牙采用跳频扩谱技术主动的避免工作频段受干扰(微波炉的工作频率也是2.4GHz)。

蓝牙收发机是跳频扩展频谱(FHSS)的无线系统,在m个1MHz带宽的信道上运行。由于国家规定不同,m=79或23。下图为各国的ISM频段使用情况:
在这里插入图片描述
信道由在79或23个射频信道上跳变的伪随机跳变序列来变现。该序列在同一个Piconet中唯一,且其相位由主单元的蓝牙时钟决定。

信道被分为许多时隙,每个时隙长度625微妙,且每个时隙对应一个跳频射频的跳频。连续跳频对应不同的射频跳频。跳频速率为1600跳/秒。时隙编号范围为 0 : 2 27 − 1 0 : 2^{27} -1 0:2271,大概一天循环一次。

时分双工(TDD)策略用于主单元和从单元交替传输,主单元偶时隙发送,从单元奇时隙发送。

时隙也可以最多拓展为5个单时隙的长度,此时采用的调频频率应该是分组开始传输的时隙的跳频频率。

【注意:这个图只是一个形象化,根据后面的章节可以看出,多时隙发送时全部在奇时隙发送,这样才能保证主单元总是在偶数时隙发送,从单元总是在奇数时隙发送。】

1.2 射频规范

  • 发射机功率
    发射机功率分为三个等级:一级功率100mW(20dBm);二级功率2.5mW(4dBm);三级功率1mW(0dBm);
    对于的传输距离为:100m, 10m, 1m。
  • 调制特性
    采用带宽时间为 B T = 0.5 BT=0.5 BT=0.5的高斯频移键控(GFSK),调制指数为0.28~0.35。符号时间的范围应该大于±20ppm。
  • 伪发射
    不太理解书中伪发射的意思,我理解是调频频率按照伪随机跳频序列选择在信道上发射。
    伪发射包括带内和带外两种,由在单一频率上跳变的发射机的跳变频率来衡量。所有合成器需要改变接受时隙和发送时隙之间的频率,通常保持相同的发送频率。
  • 无线频率容差
    发送的初中心频率精确度必须是 F c Fc Fc ± 75 H z ±75Hz ±75Hz。对于单时隙的分组频率偏移为 ± 75 H z ±75Hz ±75Hz,3或5时隙的分组频率偏移为 ± 40 H z ±40Hz ±40Hz
    下图为蓝牙无线规范的关键操作参数:

2. 链路控制器和基带

在这里插入图片描述

2.1 物理链路

  • SCO链路
    同步面向连接链路:SCO链路是piconet中主单元与从单元之间点对点的链路,主单元通过使用规则间隔的保留时隙运行SCO链路。SCO链路传输对时间比较敏感的通信,如:语音;最多只支持3条SCO链路,不支持重传。
  • ACL链路
    异步无连接链路:ACL链路是Piconet中的主单元和所有从单元之间的点到多点链路。在非保留时隙上,主单元以时隙为单位,建立到任何单元的ACL链路,包括已经处于SCO连接的从单元。ACL链路用于数据传输,并且支持分组重传。

SCO链路的优先级比ACL链路的优先级高,故为了优先建立SCO链路,ACL链路中必须承载SCO连接控制信息。

2.2 分组

在一个蓝牙Piconet中数据以分组的形式传输。
在这里插入图片描述


  1. 分组通用格式
    在这里插入图片描述
    分组具有以下几种不同的类型:
    (1)仅含识别码:比如在呼叫和查询过程,识别码单独作为信令消息。
    (2)含识别码+分组头
    (3)含识别码+分组头+有效荷载
    分组在传送期间没有跳频发生,并且在频率保持期间至多有一个分组发送。空间中的传送从LSB开始逐步到MSB。

更具体的结构图: 在这里插入图片描述
结构图引用:https://www.chomptech.com/3971.html


  1. 分组的三个部分
    (1)识别码
       分组中识别码主要用于时钟同步,DC补偿平衡和身份识别,可以过滤掉从其他Piconet中接收到的传送。同一个Piconet中发送的所有分组有相同的信道识别码(识别码的一种)。识别码也可以用于呼叫和查询过程,此时识别码单独作为信令消息。
    【DC补偿序列推测应该是频率偏移量,待确定】
  • 识别码的组成及其作用
    典型的识别码由头(4bits),同步字组成(64bits),有时包括尾(4bits)。
    在这里插入图片描述

  • 识别码的分类
    识别码分为:信道识别码( CAC ),设备识别码( DAC )和查询识别码( IAC )。其中查询识别码又分为 通用查询识别码(GIAC), 专用查询识别码( DIAC )。

    (2)分组头(分组的头字段)
       分组的头字段中包含链路控制数据,帮助中间接入控制。头字段为了降低开销,包括HEC在内仅包含18为的信息,它采用前向纠错编码FEC,在特殊情况下,头字段每一个比特在序列中发送三次,即利用1/3比例前向纠错编码提高发送的可靠性,经过1/3比例FEC后变为54位的代码字段。

  • 分组头组成及其作用:
    在这里插入图片描述

关于FLOW解释中提到的流控制:
蓝牙建议使用FIFO(先进先出)队列来实现ACL和SCO链接的发送和接收,链接管理器负责填充这些队列,而链接控制器负责自动清空队列。接收FIFO
队列已满时则使用流控制来避免分组丢失和拥塞。如果不能接收到数据,接收者的链接控制器发送一个STOP指令,并插入到返回的分组头(Header)中,
并且FLOW位置1。当发送者接收到STOP指示,就冻结它的FIFO队列停止发送。如果接收器已准备好,发送一个GO分组给发送方重新恢复数据传输,
FLOW位置0。
原文链接:https://blog.csdn.net/dyufei/article/details/5844861

(3)有效荷载
   有效荷载中有两种字段应区分开来:(同步)语音段和(异步)数据段。具体见下图:
在这里插入图片描述
有效荷载主体为用户信息,他代表有效流通量。

  • 数据段的有效荷载头
    只有数据段带有有效荷载头。有效荷载头长度为1Byte或者2Byte。第一和第二段(类)的分组有效荷载头为1B,第三个和第四个段的有效荷载头为2B。下图为其格式和组成部分作用。

这里的*段指的是分组的类别。下文还有总结。
第一段:链路控制分组:ID,NULL,POLL,FHS.
第二段:单时隙分组
第三段:三时隙分组
第四段:五时隙分组

  • 这里应该注意,有效荷载头中的流控制并没有实时性要求,最后正确接收的有效荷载头决定了FLOW的状态。实时的流控制由链路管理器在分组的层次上通过设置分组头中的FLOW比特来完成。
    在这里插入图片描述
    蓝牙数据分组格式总结:
    在这里插入图片描述
  1. 分组类型
  • 通用分组类型: 链路控制分组

  • ACL分组类型
    ACL 分组表示为DM1,DM3,DM5, DH1,DH3,DH5,其中
    “DM”:表示荷载利用2/3率FEC编码的中速编码;
    “DH”:表示载荷利用无FEC编码的高速数据。
    “1,3,5”:表示分组占有的时隙数。

    DM分组的载荷部分 和 DV分组的ACL部分 是由其本身的ACL分组头和包含2位的循环冗余检测(CRC)的载荷构成的。

  • SCO分组类型
    SCO分组具有一个时隙长,表示HV1 ,HV2 ,HV3。其中,
    “HV”:表示高质量声音;
    “1”:是1/3 率FEC,设备每2个时隙发送一个单时隙分组;
    “2”:是2/3率FEC,设备每4个时隙发送一个单时隙分组;
    “3”:是无FEC,设备每6个时隙发送一个单时隙分组。

    除此之外,还有一个DV分组,混合了2/3率FEC编码的ACL 和 无FEC编码的SCO,数据是单时隙分组。设备每2个时隙发送1个DV分组。

2.3 蓝牙编址

在这里插入图片描述

(1) 蓝牙设备地址(BD_ADDR)
48位,由三部分组成:低地址段24位(LAP),高地址段16位(UAP)和未定义地址段8位(NAP)。
在这里插入图片描述
(2) 活动成员地址(AM_ADDR)
在Piconet中,主设备会给每一个活动的从单元分配一个唯一的AM_ADDR来区分从单元。

  • 当从单元解除连接或者进入休眠状态,从单元将失去AM_ADDR。
  • 当从单元被激活时,AM_ADDR由主单元对从单元进行分配而得。在连接状态时,AM_ADDR包含在 FHS有效净荷中(FHS头本身携带全零的 AM_ADDR),同时FHS 的BB_PDU中也包含了主单元的地址和时钟信息。在休眠状态时,AM_ADR包含在解除休眠消息中。

FHS:专用控制分组,包含蓝牙设备地址和发端时钟信息。

(3) 休眠成员地址(PM_ADDR)

处于休眠模式的从单元可以通过其BD_ADDR或通过休眠成员地址(PM_ADDR)识别。PM_ADDR是一个用于区分休眠从单元的8位成员地址。

  • 只有当从单元处于休眠状态时,PM_ADDR才有效。
  • 如果从单元被激活,将被分配一个AM_ADDR,同时将丢失PM_ADDR。
    PM_ADDR是在从单元休眠时分配的。休眠从单元保留全零PM_AD,而要解除休眠只用它们的BD_ADDR。

(4) 访问请求地址(AR_ADDR)

访问请求地址(AR_ADDR)用于休眠从单元在访问窗口内确定从-主时隙。在这半个时隙中,它被允许发送访问请求消息。当从单元进入休眠模式时,AR_ADDR分配给从单元,而且,只有从单元处于休眠模式时,AR_ADDR才有效。同时,AR_ADDR不必是唯一的,不同的从单元可以共享一个AR_ADDR。

2.4 数据加噪

在传输前,分组头和有效净荷都要使用数据加密字加噪,目的是使具有较高冗余模式的数据随机化,并减少分组的直流偏移。

  • 发送端,在FEC编码之前执行加扰过程。
  • 接收端,解噪过程在FEC解码后完成。

2.5 蓝牙时钟

在这里插入图片描述
微微网信道中的定时和跳频由主单元的蓝牙时钟决定。当一个微微网已经确立,主单元将时钟传送给从单元。
每个从单元在它的本地时钟上增加一个时钟偏移,可以和主单元时钟保持同步。因为时钟是自由运转的,所以偏移必须有规律的更新。

蓝牙时钟的功能是确定在什么时候设备能否发送,或在什么时候监听传送,以什么频率和什么类型发送或监听分组。从单元利用主单元蓝牙时钟值来完成的微微网通信。

时钟决定临界周期并触发蓝牙收发机的事件。在蓝牙系统中有四个周期很重要:312.5 us,625 1s,1.25 1s,1.28s。这些周期分别与定时器比特位的 C L K 0 CLK_{0} CLK0 C L K 1 CLK_{1} CLK1 C L K 2 CLK_{2} CLK2 C L K 12 CLK_{12} CLK12 对应。

CLKN:本地时钟:
CLKE:预计时钟,扫描寻呼过程中用到;
C LK :设备实际运行的时钟频率。
CLKE、CLK 由 CLKN 加上一个偏移量得到的。
在这里插入图片描述

2.6 逻辑信道

在这里插入图片描述
(1)链路控制器控制信道(Link Control, LC)
   LC控制信道映射在分组头中,此信道携带底层链路控制信息,如:ARQ,流控和有效荷载特性。

(2)链路管理器控制信道(Link Manage, LM)
   LM控制信道携带控制信息,在主单元和从单元的链路管理器之间进行交换。LM信道特别用于在保护DM分组。在L_CH码的有效荷载头中,LM信道用 11 表示。

(3)异步用户/等时数据信道(User Asynchronization/Isochronous , UA/UI)
   UA信道携带 L2CAP透明异步用户数据。这个数据可以用一个或多个基带分组传送。

   对于分段消息,起始分组使用值为10的L_CH有效载荷头,后续的分组使用值为01的L_CH有效载荷头。
如果没有分段,所有的分组使用L2CAP起始码为10。

   等时数据信道有高层正确定时的起始分组支持。在基带层,L_CH码的使用与UA信道相同。

(4)同步用户信道(User Synchronization, US)
   US信道携带透明同步用户数据,此信道在SCO链路上传送。

LC信道映射到分组头,其他信道映射到有效载荷。US信道仅能映射到SCO分组。所有其它信道都映射到ACL分组,或SCO DV分组。如果涉及到较高优先权的信息,则LM,UA和UI信道可以中断US信道。

2.7 信道控制

在这里插入图片描述

(1)状态描述
上图中描述了蓝牙设备的操作状态。从待机状态到连接状态,中间需要经过查询和呼叫状态,这两种状态是两种不同的情况,但在潜在主单元和潜在从单元中是互补的。其中,子状态用于向Piconet 增加新的从单元的过渡状态。要从一个状态转移到另一个状态,需要用到链路管理命令或者链路控制器的内部信令。

  • 在查询状态,设备在其范围之内搜索其他设备的标识,其他设备必须处于查询扫描状态,随时监听和响应查询;

  • 在呼叫状态,设备以主单元的身份请求其他设备加入微微网,其他设备必须处于呼叫扫描状态,随时监听和响应呼叫。如果已知设备的标识,设备可以越过查询状态。当某个设备是微微网的成员时,它仍然执行查询和呼叫状态,以便其他设备加入到本微微网或其他微微网中。当有其他微微网加入时,会产生一个散射网。

(2)微微网操作

  • 呼叫操作

    1. 作用:设备利用呼叫功能邀请其他设备加入微微网。
    2. 参数:呼叫设备每隔312.5us 选择一个新的频率点发送一次呼叫。在呼叫扫描期间,当一个设备监听发送的呼叫时,每隔 1.28s 选择一个新的监听频率点。
    3. 过程:在呼叫过程中,采用跳频序列。为产生这个序列,呼叫设备和被呼叫设备采用了 被呼叫设备 的28比特LSB地址,在BD_ADDR中所描述的地址LAP段和部分UAP,作为他们分别的地址输入。对每一个设备,他的呼叫序列早已经定义好了,在2.4GHz的频段上可允许的79个信道(或23个信道)上,呼叫序列是由32个(或16个)均匀的频率组成。呼叫的周期可以是32跳(或16跳)。
    4. 条件:在呼叫过程中,每一个基于呼呼叫序列的频率点的传送和每一个响应都需要在其前面加上设备识别码(DAC), DAC是利用呼叫设备地址的LAP产生的。
  • 查询操作

    1. 作用:设备利用查询功能搜寻范围内的其他设备。
    2. 参数:查询设备每隔312.5us 选择一个新的频率点发送一次查询信息。被查询设备每隔1.28s 选择一个新监听频率点执行查询操作。
    3. 过程:在查询过程中,采用查询跳频序列。为产生这个序列,查询设备和被查询设备采用了28比特LSB的“查询地址”,作为他们各自的FSM地址输入,此查询地址又称为通用查询识别码(GIAC)。对每一个设备,他的查询序列早已经定义好的周期序列,在2.4GHz的频段上可允许的79个信道(或23个信道)上,查询序列是由32个(或16个)均匀的频率组成。查询的周期可以是32跳(或16跳)。
    4. 条件:在查询过程中,每一个基于查询序列的频率点的传送和每一个响应都需要在其前面加上查询识别码(IAC), 共64个查询识别码(包括GIAC)被放入预留的64个LAP中(???),设备地址的LAP不可以与这些预留的LAP相同

(3)蓝牙设备的操作状态
   蓝牙设备的操作状态有连接状态,查询状态和呼叫状态。设备处于连接状态时,有四种操作模式:Active,Sniff,Hold,Park。

  • 连接状态:时钟和地址都来自主单元,识别码为CAC,与主单元的DAC一致。
  • 查询状态:时钟是本地时钟(CLKN),地址为GIAC,识别码为GIAC或者DIAC。
  • 呼叫状态:时钟和地址都为被呼叫的设备的时钟和地址,识别码为被呼叫设备的设备识别码DAC。

蓝牙时钟和微微网主单元的蓝牙设备地址(BD. ADDR)完全可以确定微微网中的跳频序列和信道相位。由于主单元和从单元之间的通信只能在微微网内发生,因此徽徽网中的每一个从单元都必须知道主单元的时钟和 BD.ADDR。如果一个主单元要邀请一个潜在的从单元加入,它必须知道此从单元的时钟和地址。在查询过程中,设备之间交换地址和时钟信息,主单元收集从单元的操作信息。在呼叫过程中,主单元向从单元发送自己的操作信息。设备的操作信息包括地址BD.ADDR和时钟值,将以跳频序列(FHS)基带分组形式发送。

在查询状态,设备在其范围之内搜索其他设备的标识,其他设备必须处于查询扫描状态,随时监听和响应查询;
在呼叫状态,设备以主单元的身份请求其他设备加入微微网,其他设备必须处于呼叫扫描状态,随时监听和响应呼叫。
上面说的呼叫状态的时钟和地址使用被呼叫设备的,那么被呼叫设备也就是 潜在从单元 了。

过程预演:(待完善)
主设备发起查询,从设备查询扫描。主设备通过查询获得从设备的地址和时钟以及DAC。
主设备想要以主单元的身份邀请从设备加入Piconet中,故对查询到的从设备发起呼叫,主设备使用寻呼发起一个主—从设备连接,通过在不同的跳频点上重复发送从设备DAC来扑捉从设备。从设备在寻呼扫描状态被唤醒,接收寻呼。呼叫使用的时钟和地址均为从设备的,识别码为从设备DAC。寻呼扫描状态下的设备扫描窗口Twindowpage scan内监听自己的DAC。
小结:
(1)在查询过程中,设备之|间交换地址和时钟信息,主单元收集从单元的操作信息。
(2)在呼叫过程中,主单元向从单元发送自己的操作信息。
设备的操作信息包括地址BD.ADDR和时钟值,将以跳频序列(FHS)基带分组形式发送。

在这里插入图片描述
3.1 连接状态
处于连接状态时,主单元的时钟成为Piconet中定时事件的调整器,主单元的LAP用于产生识别码。这里要注意,主从单元的发送每隔626us交替一次,主单元偶时隙,从单元奇时隙。但是多时隙的发送限制为奇数时隙(1,3,5),从而必须保证主单元总是在偶数时隙开始发送,从单元发送在奇时隙开始。

连接状态以主单元发送的轮训(POLL)分组为起点,检查主单元的定时和信道跳频的切换,从单元可以用任意类型的分组响应。若从单元未收到POLL分组,或者主单元未收到响应分组,主从单元将返回呼叫或者呼叫扫描子状态。

  • 活动模式
    在活动模式中,蓝牙从单元积极加入信道。活动从单元监听主从时隙的分组,保持与信道同步。

  • 呼吸模式
    减少从单元监听周期的职责。主单元开始传输的某个指定从单元的时隙数减小,即主单元智能在特定的时隙开始传输,这就是被称为呼吸时隙的规则间隔 T s n i f f T_{sniff} Tsniff。从单元必须在每个呼吸周期在偏移 D s n i f f D_{sniff} Dsniff时隙监听。要进入呼吸模式,主单元通过LM响应发出呼吸命令,此信息包含呼吸间隔 T s n i f f T_{sniff} Tsniff 和偏移 D s n i f f D_{sniff} Dsniff

  • 保持模式
    在连接状态下,指向ACL链路的从单元可以被置为保持模式,这表明从单元暂时不能支持信道上的ACL分组(仍支持SCO链路)。在Hold模式下,从单元可将容量空出来用于其他事件,如扫描,呼叫和加入另一个微微网。它也可以进入低功耗睡眠模式。注意!此模式下,从单元保留它的活动成员的地址(AM_ADDR)。

  • 待机模式
    当从单元不需加入Piconet信道,但仍希望与信道保持同步时,可进入休眠模式。此时,从单元放弃活动成员地址AM_ADDR,并接受两个新地址用于休眠模式:
    (1)休眠成员地址(PM_ADDR):此地址能区分不同的休眠从单元,用于在主单元解除休眠进程中。
    (2)访问请求地址(AR_ADDR):也可以使用此地址解除休眠,被从单元用于初始化从单元解除休眠进程。

3.2 查询状态
查询状态是由主单元和从单元执行几个查询子状态组成的:
主单元执行查询状态,从单元执行查询扫描状态和查询响应状态。

更具体的说:
主单元发送查询分组,从单元在查询扫描状态时接受此分组,随后从单元进入查询响应状态并向主单元传输他们的基本信息。
在需要的时候,可以通过呼叫过程同其中任意一个建立联系。

3.3 呼叫状态
设备呼叫的目的是邀请被呼叫设备加入微微网,主单元就是呼叫设备。呼叫设备使用呼叫设备的地址BD_ADDR和时钟估计值发送它的呼叫,呼叫状态包括几个在主单元和从单元之间执行的子状态:主单元执行的呼叫子状态和主单元响应子状态,从单元执行的呼叫扫描子状态和从单元响应子状态。

更具体的说:
主单元发送呼叫蓝牙单元地址,由处于呼叫扫描子状态的从单元接收,呼叫传送仅仅包含从单元的DAC,此基带分组称为从单元ID分组。
在它的呼叫响应中,从单元也发送从单元ID分组,主要目的是通知主单元它已经收到呼叫。
最后,主单元进入主单元响应子状态,在此期间主单元向从单元发送它的基本元素(时钟,地址,识别码)和从单元的AM_ADDR,允许从单元参加微微网的通信。
这些基本元素和AM_ADDR在 FHS分组中传送。从单元利用一个从单元ID分组响应,并且进入连接状态,准备开始微微网通信。

2.8 跳频序列选择

在这里插入图片描述
(1)跳频序列
总共存在10累跳频序列,其中79跳 和 23跳 系统各有 5 类。括号内表示23跳系统的参数。

  • 呼叫跳频序列:包括32 (16) 个不同唤醒频率,均匀分布在79(23)MHz上,周期长度为32(16);
  • 呼叫应答序列:覆盖32(16)个不同的与当前呼叫跳频序列一 一对应的响应频率。主单元和从单元可以使用不同的规则以获得相同的序列。
  • 查询序列:包括32 (16) 个不同唤醒频率,均匀分布在79(23)MHz上,周期长度为32(16);
  • 查询响应序列:覆盖32(16)个不同的与当前查询跳频序列一 一对应的响应频率。
  • 信道跳频序列:具有较长周期,一段时间内跳频图案不出现重复并且频点均匀分布在79(23)MHz范围内。

(2)选择方案

从输入到特定的跳频序列映射在频率选择模块中完成。频率选择模块(FSM)包括了选择下一个使用频率的过程。

2.9 蓝牙安全性

在链路层使用四种不同的实体来保证安全,每个用户具有唯一的公共地址,两个字和一个随机数。

  • 随机数发生器
  • 字管理
    字类型
    字产生和初始化
  • 加密
  • 鉴权
    这部分比较复杂,用到的时候再去补充!

参考资料:
《蓝牙技术》 严紫健
《蓝牙技术原理与协议》 刘刚
博客:https://blog.csdn.net/xubin341719/article/details/38303881

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BT-2の蓝牙技术原理のBT协议の蓝牙核心协议の无线射频和基带 的相关文章

  • Ubuntu cron 定时执行任务

    cron xff0c 是一个Linux定时执行工具 xff0c 可以在无需人工干预的情况下运行作业 1 关于crontab 在Ubuntu server 下 xff0c cron是被默认安装并启动的 通过 etc crontab文件 xff
  • Linux服务器上监控网络带宽的18个常用命令

    本文介绍了一些可以用来监控网络使用情况的Linux命令行工具 这些工具可以监控通过网络接口传输的数据 xff0c 并测量目前哪些数据所传输的速度 入站流量和出站流量分开来显示 一些命令可以显示单个进程所使用的带宽 这样一来 xff0c 用户
  • Linux系统使用iftop查看带宽占用情况

    Linux系统下如果服务器带宽跑满了 xff0c 查看跟哪个ip通信占用带宽比较多 xff0c 可以通过iftop命令进行查询 xff0c 使用方法如下 xff1a 1 安装方法 软件官网地址 xff1a http www ex parro
  • linux基础命令

    1 curl amp wget 使用curl或wget命令 xff0c 不用离开终端就可以下载文件 如你用curl xff0c 键入curl O后面跟一个文件路径 wget则不需要任何选项 下载的文件在当前目录 代码如下 curl O we
  • find_in_set

    1 in查询相当于多个or条件的叠加 xff0c 例如 xff1a select from user where user id in 1 2 3 等效于 select from user where user id 61 1 or use
  • 集成Cortex-M0内核-- Integration and Implementation Manual手册学习

    根据使用场景 xff0c 配置并集成一个Cortex M0的内核 xff0c 暂时不涉及的实现的部分 目录 阅读手册 Chapter1 Introduction 1 1 About the processor 1 2 About integ
  • 在NVIDIA NX 配置OpenCV多版本冲突和解决的总结

    Nvidia Jetson NX 环境 直接刷JetPack5 1的镜像 xff0c 会得到如下环境 Ubuntu20 04cuda11 4TensorRT8 4cudnn8 4opencv4 5 4 而且这些源一般是从nv xxxx等源下
  • 一款入门级的飞控CC3D(一)

    很多在校的朋友想自己动手做一款旋翼无人机 xff0c 但是零件采购下来要花费不少大洋 xff0c 装配完成后又需要进行软件硬件调试 所以很多想做极客的梦就扼杀在摇篮里 本期我将开始更新一款入门级的飞控CC3D 首先 xff0c 放上CC3D
  • 朱刘算法(Directed Minimum Spanning Tree/Directed MST/Minimum Arborescence/Optimum Branchings)

    概念 最小树形图 xff1a 有向图所分离出的有向生成树 亦称为最小树形图 xff0c 其应满足以下条件 xff1a 1 恰好有一个入度为0的点 xff0c 称为根结点 2 其他结点的入度均为1 3 可以从根结点到达其他结点 既然要找最小生
  • 仿真复现文章推荐

    以下学长推荐的文章 xff1a 人脸识别 xff1a SphereFace Deep Hypersphere Embedding for Face Recognition 手势姿态 xff1a OpenPose 3D人脸建模 xff1a L
  • 查看GPU显存 使用率

    watch n 0 2 nvidia smi 主要关注GPU Util Memory Usage 0 2表示每隔0 2秒刷新一次终端的显示结果 上面的表格中 xff1a 第一栏的Fan xff1a N A是风扇转速 xff0c 从0到100
  • scipy.ndimage.zoom

    最近邻 选择离它所映射到的位置最近的输入像素的灰度值为插值结果 最临近插值 3X3 的256级灰度图 xff0c 也就是高为3个象素 xff0c 宽也是3个象素的图像 xff0c 每个象素的取值可以是 0 xff0d 255 xff0c 代
  • torch.manual_seed()

    torch manual seed args seed 为CPU设置种子用于生成随机数 xff0c 以使得结果是确定的 if args cuda torch cuda manual seed args seed 为当前GPU设置随机种子 x
  • python torch.optim.SGD

    torch optim sgd学习参数 torch入门笔记14 Torch中optim的sgd Stochastic gradient descent 方法的实现细节 pytorch中使用torch optim优化神经网络以及优化器的选择
  • python zero_grad()

    有两种方式直接把模型的参数梯度设成0 xff1a model span class hljs preprocessor zero span grad optimizer span class hljs preprocessor zero s
  • torch.topk

    torch kthvalue input k dim 61 None keepdim 61 False out 61 None gt Tensor LongTensor k xff1a 第k个最小元素 返回第k个最小元素 input k d
  • torch.normal()

    torch normal means std out 61 None 返回一个张量 xff0c 包含从给定参数means std的离散正态分布中抽取随机数 均值means是一个张量 xff0c 包含每个输出元素相关的正态分布的均值 std是
  • 台式机ubuntu18.04 x86_64 简单ROS版本安装及其他库编译

    本教程是用于只安装ros melodic ros base的情况下 xff0c 为了避免安装opencv3 2 xff0c 而只保留一个opencv3 4 10 xff0c 而一步步安装rqt xff0c cv bridge xff0c r
  • ubuntu 当前文件夹 文件个数

    ls l grep 34 34 wc l

随机推荐

  • python [:,::-1]

    In span class hljs number 33 span t 61 np array span class hljs string 1 2 3 4 5 6 7 8 9 span In span class hljs number
  • numpy.floor

    numpy floor x out 61 None where 61 True casting 61 39 same kind 39 order 61 39 K 39 dtype 61 None subok 61 True signatur
  • Perfdog玩转内存泄漏

    背景交代 最近QC同学在跑游戏的过程中发现玩的时间久了游戏会发生闪退 xff0c 经过和开发人员讨论后又搜集了一些信息 xff0c 最后排除了功能性bug的原因 一 判断是否是内存泄露 拿到真机 xff0c USB连接 xff0c 杀掉多余
  • LCD1602知识详解(很详尽的)

    1602液晶知识详解 xff1a 1 1602液晶基础 VSS xff1a 电源地信号引脚 xff1b VDD xff1a 电源信号引脚 xff1b VEE xff1a 液晶对比度调节引脚 xff0c 接0 5V以调节液晶的显示对比度 xf
  • 如何学习嵌入式软件

    什么是嵌入式 xff1f 嵌入式分为广义和狭义两种 广义的嵌入式就是片上系统 system on a chip xff0c 包括单片机 PSOC NIOS Microblaze等 而狭义的嵌入式就是ARM9 cortex A8等特定的跑操作
  • Raspberry Pi 4B 通过 MAVROS 实现从地面站远程连接飞控板

    Raspberry Pi 4B 通过 MAVROS 实现从地面站远程连接飞控板 0x00 为 RPi 刷写系统0x01 启动 Ubuntu0x02 使用 SSH 连接至 RPi0x03 更换软件源0x04 安装桌面环境 xff08 可选 x
  • LeetCode-T97-交错字符串(interleaving-string)

    题目 原题链接 题目描述 xff1a 给定三个字符串 s1 s2 s3 验证 s3 是否是由 s1 和 s2 交错组成的 样例 case1 输入 s1 61 aabcc s2 61 dbbca s3 61 aadbbcbcac 输出 tru
  • LeetCode-T167-两数之和 II - 输入有序数组(two-sum-ii-input-array-is-sorted)

    题目 原题链接 题目描述 xff1a 给定一个已按照升序排列 的有序数组 xff0c 找到两个数使得它们相加之和等于目标数 函数应该返回这两个下标值 index1 和 index2 xff0c 其中 index1 必须小于 index2 说
  • LeetCode-T95-不同的二叉搜索树 II(unique-binary-search-trees-ii)

    题目 题目链接 题目描述 给定一个整数 n xff0c 生成所有由 1 n 为节点所组成的 二叉搜索树 样例 case1 输入 xff1a 3 输出 xff1a 1 null 3 2 3 2 null 1 3 1 null null 2 2
  • 主从机时间同步

    安装 服务器和客户端都安装 sudo apt get install ntpsudo apt get install ntpdate 服务器端 配置文件设置 运行sudo vim etc ntp conf在文件末尾加入如下几行代码 rest
  • 判断两条线段是否相交(三种算法)

    转载于 xff1a http blog csdn net rickliuxiao article details 6259322 算法1 xff1a cpp view plain copy alg 1 struct Point double
  • 朱、刘算法:求最小树形图权值个人理解+个人详解【最小树形图模板】

    什么是最小树形图 xff1f 相信大家如果会过来看这篇文章 xff0c 想必也应该对最小生成树有所了解的 xff0c 最小生成树求的是无向图的一颗生成树的最小权值 我们的最小树形图就是来解决一个有向图的一颗生成树的最小权值 xff0c 对于
  • Floyd最小环算法

    问题描述 xff1a 给你一张无向图 xff0c 定义环为从i出发到达j然后从j返回i并且所有点都只经过一次 xff08 最少为3个点 xff09 xff0c 求所有环当中经过路径最小的环 算法描述 xff1a 首先容易想到的是暴力来枚举环
  • O(1)快速乘

    求两个数相乘超过long long取摸的快速运算O 1 inline long long multi long long x long long y long long mod long long tmp 61 x y long long
  • Android开发简单的2048游戏

    作为一名android渣渣第一次用android写了个简单的小游戏还是模仿网上的视频写的 xff0c xff0c 哎 xff0c xff0c 视频教程链接 写在前面 xff1a 这里我用的IDE是eclipse xff0c 所以对与 And
  • 如何使用github上的开源项目

    以提交的一次开源代码为例 xff0c 教会你步入开源的世界 1 首先登陆到https github com平台上注册一个自己的账号 xff0c 这个过程就不演示了 2 xff0c 然后在左上部分输入一个开源项目的名字 选择的是jvalida
  • 填坑记1-nrf52840出现error flash download failed -cortex-M4错误的解决办法-清风电子开发板

    填坑类型 xff1a nrf52840出现error flash download failed cortex M4错误 使用板子 xff1a 清风电子开发板 问题描述 keil4出错 xff0c keil5不出错 意思是其他keil5工程
  • BLE-2の蓝牙4.0协议栈のLL层 Scaning 和 initiating状态的区别

    PDU类型 3 4 Scanning状态 3 4 1 scanWindow和scanInterval Scanning状态扫描 接收广播数据的状态 xff0c 该状态的扫描行为是由scanWindow和scanInterval两个参数决定的
  • 蓝牙八卦:蓝牙、Wi-Fi、ZigBee几种无线技术的对比

    蓝牙 Wi Fi ZigBee几种无线技术的对比 1 概述2 ZigBee引领物联网设备大步向前3 WiFi后浪拍前浪4 蓝牙全新升级 xff0c 深入日常应用 这阶段在学习BLE xff08 低功耗蓝牙 xff09 xff0c 于是乎就想
  • BT-2の蓝牙技术原理のBT协议の蓝牙核心协议の无线射频和基带

    蓝牙技术原理 BT协议 蓝牙核心协议 无线射频和基带 0 脑图1 蓝牙射频1 1 射频信道1 2 射频规范 2 链路控制器和基带2 1 物理链路2 2 分组2 3 蓝牙编址2 4 数据加噪2 5 蓝牙时钟2 6 逻辑信道2 7 信道控制2