【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

相关文章

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

prometheus如何使用pushgateway监控网路丢包

《prometheus如何使用pushgateway监控网路丢包》:本文主要介绍prometheus如何使用pushgateway监控网路丢包问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录监控网路丢包脚本数据图表总结监控网路丢包脚本[root@gtcq-gt-monitor-prome

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解