【LoRa】CAD的工作原理以及使用

2024-09-01 06:44
文章标签 使用 工作 lora 原理 cad

本文主要是介绍【LoRa】CAD的工作原理以及使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1 CAD介绍
    • 1.1 CAD工作原理
    • 1.2 与CAD有关的中断
  • 2 CAD的使用
    • 2.1 CAD总耗时
    • 2.2 CAD均衡配置
    • 2.3 最优配置速查表
  • 3 CAD的应用
    • 3.1 CAD项目使用
    • 3.2 CAD扩展应用CSMA
  • 4 参考文献

1 CAD介绍

本章介绍一下LoRa芯片的CAD功能、原理以及如何使用。由于第一代SX127x的CAD使用与以后的芯片有所不同,本章介绍不适用SX127x。首先,我将datasheet中对CAD的介绍贴图在这里,如下图。
CAD介绍
其意思我大致解释一下。

  1. 从LoRa芯片第二代以后,即SX1261/SX1262/1268/LLCC68/SX1280/SX1281/LR1110/LR1120/LR1121,CAD不仅可以检测LoRa preamble,还可以检测LoRa packet,而以前老的芯片SX1272/SX1276/SX1278只能检测LoRa preamble。
  2. 在CAD模式,radio芯片将会扫描LoRa信号,扫描时间是在代码中定义的N个symbol1 时间。在此时间段内,如果检测到LoRa信号,将会产生CAD Detected IRQ中断。
  3. 可选择配置的symbol个数为1、2、4、8、16,这个参数的选择与SF和BW2 有关。

1.1 CAD工作原理

CAD执行过程是扫描空中信号,然后按照配置的SF和BW进行信号解析,将相关的信号峰值与噪声相比:如果比值超过peak-to-noise ratio (PNR) 的门限,CAD将认为有LoRa信号存在。
注意此处所说的PNR是指cadDetPeak值,这是代码中需要设置的一个参数。

1.2 与CAD有关的中断

与CAD相关的中断有两个:CadDone和CadDetected。打开CAD,不管有没有扫描到LoRa信号,一定会产生CadDone中断。但若检测到LoRa信号,则会同时产生CadDetected中断。下图是datasheet中的解释。
CAD中断
在代码中,CadDone和CadDetected中断的处理过程是嵌套的,示例代码如下:

if( ( irq_regs & SYSTEM_IRQ_CAD_DONE ) == SYSTEM_IRQ_CAD_DONE )
{HAL_DBG_TRACE_INFO( "CAD done\n" );if( ( irq_regs & SYSTEM_IRQ_CAD_DETECTED ) == SYSTEM_IRQ_CAD_DETECTED ){HAL_DBG_TRACE_INFO( "Channel activity detected\n" );on_cad_done_detected( );}else{HAL_DBG_TRACE_INFO( "No channel activity detected\n" );on_cad_done_undetected( );}
}

2 CAD的使用

CAD执行过程是在没有MCU干预下完成的,可分为两个步骤:

  • Reception:开始CAD,在使用者设定的symbol时间窗口内扫描。
  • Correlation:这个是处理过程,会占用少于1个symbol的时间。这个过程会决定有没有CadDetected中断产生。

2.1 CAD总耗时

由上可知,CAD总的耗时包括CAD开窗时间和CAD处理时间,下图为具体耗时计算公式,并举例说明。
CAD耗时

2.2 CAD均衡配置

影响CAD功能的参数主要有两个:Window Duration和Peak-to-Noise Threshold(cadDetMin默认设置为10,不建议更改)。

  • Window Duration:这个参数可以通过symbol number来配置,它决定了CAD开窗时间,增大可以增加CAD的可靠性,但增大时长也意味着增加功耗。另外,改变symbol number时,只要SF和BW不变,不用重调cadDetPeak的值。如下图增加symbol个数后所产生的影响。
    CAD开窗时间
  • Peak-to-Noise Threshold:指cadDetPeak值,这个参数决定了CAD判断LoRa信号的灵敏性,cadDetPeak值过小会造成false detect,过大会丢包,如下图测试结果,所以这个值也是需要综合考虑选取的。
    cadDetPeak

2.3 最优配置速查表

为了可以快速的配置合适的参数,Semtech做了一些实验验证,总结得出一些表格,这样大家在使用时可以快速查表使用。表格非包含全部情况,如果没有要使用的参数,也可以根据现有参数推断出一个合理的值。
下图为使用SX128x的CAD配置,推荐使用4 symbols,cadDetMin等于10不用改动,表中提供了当使用不同SF和BW时,选择cadDetPeak的值。
SX128x CAD配置表
下边两张表格为SX126x使用BW125KHz时,最优配置。
SX126x CAD 表1
SX126x CAD表2
下边两张表格为SX126x使用BW500KHz时,最优配置。
SX126x CAD表3
SX126x CAD表4

3 CAD的应用

3.1 CAD项目使用

在此直接举个例子说明一下在项目中如何使用CAD功能,CAD一般应用在低功耗唤醒的逻辑中。
现有一个节点,配置参数为SF=7,BW=125KHz,cadSymbolNum=2,每休眠2s执行一次CAD监听。
根据公式Tsymbol = 2SF / BW, 计算单个symbol的时间为1.024ms。
根据公式CAD Duration[s] = (cadSymbolNum + (2*SF + 3) / 32) * Tsymbol,计算CAD开窗时间是2.592ms。
发送端需要配置的preamble长度所耗时间要大于接收端sleep周期+2倍的CAD开窗时间: Tpreamble > (2s + 2 * 2.592ms) = 2005.184ms
则我们需要设定发送端preamble长度为 Npreamble=2000,Tpreamble=( Npreamble + 4.5) * Tsymbol = (2000 + 4.5) * 1.024ms = 2052.608ms > 2005.184ms,以此来保证每次都可以将接收端从sleep模式唤醒。
在此我解释一下上边计算Tpreamble时,为什么要加4.5个symbol。由下图物理层规定可知,preamble还包含sync word和frequency sync两部分,所以要加4.5个symbol。
LoRa的preamble结构

3.2 CAD扩展应用CSMA

CSMA(Carrier Sense)是一种无线通信技术,注意此技术不是radio自带功能,而是纯应用层使用逻辑,其作用是无线发射机在发包之前先侦听无线环境,检测信道是否空闲,是否有其他信号干扰。提到信道检测,大家可能会想到使用读取信号RSSI(Receive Signal Strength Indication)技术来做,但对于LoRa而言,也是LoRa与FSK技术的主要不同点之一,LoRa信号允许在环境噪声水平以下传输,而使用RSSI技术检测不到环境噪声以下的信号,但CAD技术可以读取radio灵敏度3dB范围内的LoRa信号。也就是说即使LoRa信号在环境噪声以下,也可以被检测到。
由此,我们可以把CAD+RSSI两种技术组合使用,起名为CSMA。其运行机制是在进行CAD的时间内,此时radio为RX状态,同时使用寄存器读取当前信道RSSI值。然后,根据这两种功能的读取结果去判断当前信号是否有其他信号干扰。当然,在实际应用中,需要过滤RSSI的值,因为RSSI是瞬时能量值,波动较大,需要读很多次,然后掐头去尾求取平均值使用比较稳妥。下图为在使用CSMA系统时的一些介绍。
CSMA

4 参考文献

关于CAD功能,在此推荐一些参考文档,这些文档都是来自Semtech官网的Application Note,想了解更多CAD的可免费下载阅览。
AN1200-77-SX1280_CAD-V1_0.pdf
SX126X CAD performance evaluation V2.1.pdf
AN1200.21 SX127x Reading channel RSSI during a CAD.pdf
关于SX127x的低功耗设计的文章中也有讲到CAD的使用,文档为AN1200.17_LoraLowEnergyDesign_STD.pdf


  1. 单个symbol的计算公式是Tsymbol = 2SF / BW,单位秒。 ↩︎

  2. BW,bandwidth,带宽。 ↩︎

这篇关于【LoRa】CAD的工作原理以及使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126231

相关文章

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

Spring Boot3虚拟线程的使用步骤详解

《SpringBoot3虚拟线程的使用步骤详解》虚拟线程是Java19中引入的一个新特性,旨在通过简化线程管理来提升应用程序的并发性能,:本文主要介绍SpringBoot3虚拟线程的使用步骤,... 目录问题根源分析解决方案验证验证实验实验1:未启用keep-alive实验2:启用keep-alive扩展建

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子