主要内容

蓝牙低能量接收器

这个示例演示了如何使用蓝牙协议的通信工具箱™库实现蓝牙®低能耗(BLE)接收器。您既可以使用捕获的信号,也可以使用ADALM-PLUTO Radio实时接收信号。一个适合接收的信号可以通过模拟伴随的例子产生,蓝牙低能发射机(i)两个SDR平台连接到运行两个MATLAB会话的同一主机计算机(ii)两个SDR平台连接到运行不同MATLAB会话的两台计算机。

指的是指导主机-无线电硬件设置(模拟设备通信工具箱支持包ADALM-Pluto金宝app无线电)有关如何配置主机以使用ADALM-PLUTO Radio的支持包的详细信息的文档。金宝app

所需硬件和软件

要使用捕获的信号运行此示例,需要以下软件:

  • 蓝牙协议的通信工具箱库

为了实时接收信号,您还需要ADALM-PLUTO无线电和相应的支持包Add-On:金宝app

有关“通信工具箱支持的SDR平台”的完整列表,请参阅“支持的硬件”一节金宝app软件定义无线电(SDR)发现页面

背景

蓝牙特殊兴趣组(SIG)引入了BLE用于低功率短程通信。蓝牙标准[1)指定了链接图层,包括两个体育MAC层。BLE应用包括移动电话、家庭自动化和物联网(IoT)之间的图像和视频文件传输。

规范的祝福:

  • 传输频率范围: 2.4 - -2.4835 GHz

  • 射频通道: 40

  • 符号率: 1 Msym/s, 2 Msym/s

  • 调制高斯最小移位键控(GMSK)

  • 体育传播模式:(i) LE1M -未编码PHY,数据速率为1mbps (ii) LE2M -未编码PHY,数据速率为2mbps (iii) LE500K -编码PHY,数据速率为500kbps (iv) LE125K -编码PHY,数据速率为125kbps

蓝牙标准[1]指定BLE的所有四种PHY传输方式的空中接口包格式。

  • 序言:由PHY传输模式决定。LE1M模式使用一个由0和1交替组成的8位序列'01010101'。LE2M使用16位的0和1交替序列,'0101…'。LE500K和LE125K模式使用80位零和1序列,通过重复'00111100'十次获得。

  • 访问地址:指定两台BLE设备之间共享的连接地址,32位顺序。

  • 编码指标:用于区分编码模式的2位序列(LE125K和LE500K)。

  • 有效载荷:输入消息位,包括PDU (protocol data unit)和CRC (cyclic redundancy check)。消息的最大长度为2080位。

  • 终止字段:两个3位零向量,用于前向纠错编码。终止域只存在于编码模式(LE500K和LE125K)。

无编码PHY (LE1M和LE2M)模式的包格式如下图所示:

编码PHY (LE500K和LE125K)模式的包格式如下图所示:

检查支持包安装情况金宝app

%检查“蓝牙协议的通信工具箱库”%支金宝app持包是否安装。comm金宝appSupportPackageCheck (“蓝牙”);

示例结构

BLE接收机示例的总体结构描述如下:

  1. 初始化接收器参数

  2. 信号源

  3. 抓取BLE报文

  4. 接收处理

初始化接收器参数

helperBLEReceiverConfig.m脚本初始化接收器参数。你可以改变phyMode参数来解码接收到的BLE波形基于PHY传输模式。phyMode可以是集合中的一个:{'LE1M','LE2M','LE500K','LE125K'}。

phyMode =“LE1M”;bleParam = helperBLEReceiverConfig (phyMode);

信号源

指定信号源为“File”或“ADALM-PLUTO”。

  • 文件:使用comm.BasebandFileReader读取包含先前捕获的无线信号的文件。

  • ADALM-PLUTO:使用sdrrx(模拟设备通信工具箱支持包ADALM-Pluto金宝app无线电)从SDR硬件接收实时信号的系统对象。

如果您指定ADALM-PLUTO作为信号源,示例搜索您的计算机在无线电地址“usb:0”ADALM-PLUTO无线电,并使用它作为信号源。

signalSource =“文件”%默认信号源为“File”
如果比较字符串(signalSource“文件”开关bleParam。模式情况下“LE1M”bbFileName =“bleCapturesLE1M.bb”情况下“LE2M”bbFileName =“bleCapturesLE2M.bb”情况下“LE500K”bbFileName =“bleCapturesLE500K.bb”情况下“LE125K”bbFileName =“bleCapturesLE125K.bb”否则错误(' PHY传输模式无效。有效的条目是LE1M, LE2M, LE500K和LE125K。”);结束sigSrc = comm.BasebandFileReader (bbFileName);sigSrcInfo = info (sigSrc);sigSrc。SamplesPerFrame = sigSrcInfo.NumSamplesInData;bbSampleRate = sigSrc.SampleRate;bleParam。SamplesPerSymbol = bbSampleRate / bleParam.SymbolRate;elseif比较字符串(signalSource“ADALM-PLUTO”%首先检查HSP是否存在如果isempty ((“plutoradio.internal.getRootDir”)错误(消息(“comm_demos:常见:NoSupp金宝apportPackage”,...“ADALM-PLUTO无线电通信工具箱支持包”金宝app,...' < a href = " //www.tatmou.com/hard金宝appware-support/ '...' ADALM-PLUTO Radio .html">ADALM-PLUTO Radi金宝appo Support From Communications Toolbox')));结束bbSampleRate = bleParam。SymbolRate * bleParam.SamplesPerSymbol;sigSrc = sdrrx (“冥王星”,...“RadioID”,“usb: 0”,...“CenterFrequency”2.402 e9,...“BasebandSampleRate”bbSampleRate,...“SamplesPerFrame”1 e7,...“GainSource”,“手动”,...“获得”25岁的...“OutputDataType”,“双”);其他的错误(“无效的信号源。有效的条目是File和ADALM-PLUTO。”);结束%设置频谱查看器spectrumScope = dsp。简介(...“SampleRate”bbSampleRate,...“SpectrumType”,的功率密度,...“SpectralAverages”10...“YLimits”(-130 -30),...“标题”,“接收基带BLE信号频谱”,...“YLabel”,的功率谱密度);

抓取BLE报文

发射的波形被捕获为突发信号dataCaptures = sigSrc ();%显示接收波形的功率谱密度spectrumScope (dataCaptures);

接收处理

对从信号源接收到的基带样本进行处理,解码PDU头信息和原始消息位。下图显示了接收器的处理过程。

  1. 执行自动增益控制(AGC)

  2. 消除直流偏置

  3. 估计并校正载波频率偏移

  4. 用高斯脉冲进行匹配滤波

  5. 时间同步

  6. 实现GMSK解调

  7. LECoded PHYs (LE500K和LE125K)的FEC解码和模式映射

  8. 数据dewhitening

  9. 对解码后的PDU进行CRC校验

  10. 计算包错误率(PER)

%初始化系统对象以进行接收处理agc = comm.AGC (“MaxPowerGain”, 20岁,“DesiredOutputPower”2);freqCompensator = comm.CoarseFrequencyCompensator (“调制”,“OQPSK”,...“SampleRate”bbSampleRate,...“SamplesPerSymbol”2 * bleParam。SamplesPerSymbol,...“FrequencyResolution”, 100);prbDet = comm.PreambleDetector (bleParam.RefSeq,“检测”,“第一”);初始化计数器变量pktCnt = 0;crcCnt = 0;displayFlag = false;如果要打印接收到的数据,则为真%循环解码捕获的BLE样本长度(dataCaptures) > bleParam。MinimumPacketLen%为每次迭代考虑捕获的信号的两帧startIndex = 1;endIndex = min(长度(dataCaptures), 2 * bleParam.FrameLength);rcvSig = dataCaptures (startIndex: endIndex);rcvAGC = agc (rcvSig);%执行自动增益控制rcvDCFree = rcvAGC -均值(rcvAGC);%移除直流偏置rcvFreqComp = freqCompensator (rcvDCFree);估计和补偿载波频率偏移rcvFilt = conv (rcvFreqComp bleParam.h,“相同”);%执行高斯匹配滤波%执行帧定时同步[~, dtMt] = prbDet(rcvFilt);(prbDet) prbDet发布。阈值= max (dtMt);prbIdx = prbDet (rcvFilt);提取消息信息[cfgLLAdv, pktCnt crcCnt remStartIdx] = helperBLEPhyBitRecover (rcvFilt,...prbIdx、pktCnt crcCnt bleParam);%突发捕获的剩余信号dataCaptures = dataCaptures (1 + remStartIdx:结束);%显示已解码的信息如果displayFlag && ~isempty(cfgLLAdv) fprintf('发布PDU类型:%s\n', cfgLLAdv.PDUType);流(“广告地址:% s \ n”, cfgLLAdv.AdvertiserAddress);结束%释放系统对象发布(freqCompensator)发布(prbDet)结束%释放信号源发行版(sigSrc)确定PER值如果pktCnt = 1-(crcCnt/pktCnt);流(“%s模式的包错误率为%f.\n”bleParam.Mode,每);其他的流('\n未检测到BLE包'\n '结束
LE1M模式的包错误率为0.000000。

进一步的探索

同伴的例子蓝牙低能发射机可以用来传输一个符合标准的BLE波形,该波形可以通过本例进行解码。您还可以使用这个示例通过更改两个示例中的信道索引、访问地址和中心频率值来传输数据信道pdu。

故障排除

用于ADALM-PLUTO无线电的SDR硬件和通信工具箱支持包的故障排除的一般提示可以在金宝app常见问题及修复(模拟设备通信工具箱支持包ADALM-Pluto金宝app无线电)

附录

下面的例子使用了这些辅助函数:

helperBLEReceiverConfig.m:配置BLE接收参数*helperBLEPhyBitRecover.m:有效负载位恢复

选定的参考书目

蓝牙特殊兴趣组(SIG)。“蓝牙核心规范”。版本5.2,第6卷。https://www.bluetooth.com

相关的话题