主要内容

基于AWGN的蓝牙LE误码率仿真

本示例展示了如何使用Bluetooth®工具箱使用端到端物理层模拟来测量Bluetooth®低能量(LE)的不同模式的误码率(BER)。

简介

在本例中,使用端到端仿真来确定蓝牙LE在加性高斯白噪声(AWGN)信道下的比特能量与噪声密度比(Eb/No)值范围内的误码率性能。在每个Eb/No点,多个蓝牙LE包通过无其他无线电前端(RF)损害的噪声通道传输。假设完全同步,使用理想的接收机来恢复数据位。将这些恢复的数据位与传输的数据位进行比较,以确定误码率。为蓝牙LE规范支持的四种PHY传输吞吐量模式生成误码率曲线[万博1manbetx2]如下:

  • 数据速率为1mbps的非编码PHY (LE1M)

  • 数据速率为2mbps (LE2M)的非编码PHY

  • 数据速率为500kbps的编码PHY (LE500K)

  • 数据速率为125kbps的编码PHY (LE125K)

下图总结了每个包的模拟。

初始化仿真参数

EbNo = -2:2:8;% Eb/没有dB范围SPS = 4;每个符号的样本百分比dataLen = 2080;%数据长度(以比特为单位)simMode = {“LE1M”“LE2M”“LE500K”“LE125K”};

每个Eb/No点的测试包数由两个参数控制:

  1. maxNumErrors为每个Eb/No点模拟的最大误码数。当比特误码数达到该限值时,在此Eb/No点的模拟完成。

  2. maxNumPackets为每个Eb/No点模拟的最大数据包数,如果没有达到误码限制,则限制模拟的长度。

选择的数字maxNumErrors而且maxNumPackets在这个例子中将导致一个很短的模拟。为了获得统计上有意义的结果,我们建议增加这些数字。

maxNumErrors = 100;Eb/No点最大误码数maxNumPackets = 10;每个Eb/No点的最大包数

模拟每个Eb/No点

本例还演示了如何使用parfor循环可以用来代替循环时,模拟每个Eb/No点,以加快模拟。parfor的一部分并行计算工具箱,对每个Eb/No点并行执行处理,以减少总仿真时间。要使用并行计算来提高速度,请注释掉'for'语句并取消下面的'parfor'语句的注释。如果没有安装并行计算工具箱™,'parfor'将默认为正常的'for'语句。

numMode =数字(simMode);%模式数ber = 0 (numMode,length(EbNo));预分配用于存储误码率结果iMode = 1:numMode phyMode = simMode{iMode};%根据模式设置信噪比(SNR)点对于编码PHY (LE500K和LE125K),包括码率因子在信噪比计算中使用1/2速率FEC编码器。如果任何(strcmp (phyMode, {“LE1M”“LE2M”})) snrVec = EbNo - 10*log10(sps);其他的codeRate = 1/2;snrVec = EbNo + 10*log10(codeRate) - 10*log10(sps);结束使用'parfor'来加快模拟速度iSnr = 1:长度(snrVec)使用'for'来调试模拟每次迭代设置随机子流索引,以确保每个子流的索引迭代使用一组可重复的随机数流= RandStream(“combRecursive”“种子”, 0);流。子流= iSnr;RandStream.setGlobalStream(流);创建一个错误率实例errorRate = com . errorRate (“样本”“自定义”“CustomSamples”1: (dataLen-1));%循环模拟多个数据包数字errs = 0;numPkt = 1;%发送的报文索引numErrs < maxNumErrors && numPkt < maxNumPackets%生成蓝牙LE波形txBits = randi([0 1],dataLen,1,“int8”);数据位生成百分比channelIndex = randi([0 39],1,1);每个包的随机通道索引值如果channelIndex < = 36%数据通道的随机访问地址在理想情况下,此访问地址值应满足中指定的要求蓝牙规范第2.1.2节,Part-B, Vol-6。accessAddress = [1 0 0 0 1 1 1 0 1 1 0 0 1 ....0 0 1 1 0 1 1 1 1 1 0 1 1 0 1 1 0 1 0 1 0 1 1 0]';其他的定期发布通道的默认访问地址accessAddress = [0 1 1 0 1 0 1 1 0 1 1 1 1 1 1 0 0 ....1 0 0 0 1 1 1 1 0 0 0 1]';结束tx波形= bleWaveformGenerator(txBits,“模式”phyMode,...“SamplesPerSymbol”sps,...“ChannelIndex”channelIndex,...“AccessAddress”, accessAddress);将传输的波形通过AWGN通道rx波形= awgn(tx波形,snrVec(iSnr));使用理想接收器恢复数据位rxBits = bleIdealReceiver(rx波形,“模式”phyMode,...“SamplesPerSymbol”sps,...“ChannelIndex”, channelIndex);确定误码率errors = errorRate(txBits,rxBits);ber(iMode,iSnr) = errors(1);numErrs =错误(2);numPkt = numPkt + 1;结束disp ([“模式”phyMode”、“...'模拟Eb/No = 'num2str (EbNo (iSnr)),“数据库””、“...的数量:, num2str (ber(将iSnr))))结束结束
LE1M模式,模拟了Eb /不= 2 dB,数量:0.22222 LE1M模式,模拟Eb /不= 0分贝,数量:0.14622 LE1M模式,模拟了Eb /不= 2 dB,数量:0.087542 LE1M模式,模拟Eb /不= 4 dB,数量:0.024531 LE1M模式,模拟Eb /不= 6 dB,数量:0.0080167 LE1M模式,模拟Eb /不= 8分贝,数量:0.00010689 LE2M模式,模拟了Eb /不= 2 dB,数量:0.23377 LE2M模式,模拟Eb /不= 0分贝,数量:0.16306 LE2M模式,模拟了Eb /不= 2 dB,数量:0.074074 LE2M模式,模拟Eb /不= 4 dB,误码率:0.022126 LE2M模式,模拟Eb /不= 6 dB,数量:0.0063733 LE2M模式,模拟Eb /不= 8分贝,数量:0.00053444 LE500K模式,模拟了Eb /不= 2 dB,数量:0.37326 LE500K模式,模拟Eb /不= 0分贝,数量:0.27946 LE500K模式,模拟了Eb /不= 2 dB,数量:0.12266 LE500K模式,模拟Eb /不= 4 dB,数量:0.032708 LE500K模式,模拟Eb /不= 6 dB,数量:0.0017637 LE500K模式,模拟Eb /不= 8分贝,数量:0 LE125K模式,模拟Eb/No = -2 dB, BER:0.30736模式LE125K,模拟Eb/No = 0 dB, BER:0.065897模式LE125K,模拟Eb/No = 2 dB, BER:0.0013361模式LE125K,模拟Eb/No = 4 dB, BER:0模式LE125K,模拟Eb/No = 6 dB, BER:0模式LE125K,模拟Eb/No = 8 dB, BER:0

绘制BER vs Eb/No结果

标记=牛*年代”;颜色=“bmcr”;dataStr = {0 (numMode,1)};图;iMode = 1:numMode符号(EbNo,ber(iMode,:).',[“- - -”标记(将)颜色(将)]);持有;dataStr(iMode) = simMode(iMode);结束网格;包含(“Eb /不(dB)”);ylabel (“方方面面”);传奇(dataStr);标题(带AWGN信道的蓝牙LE误码率);

进一步的探索

每个Eb/No点测试的包数由maxNumErrors而且maxNumPackets参数。对于统计上有意义的结果,这些值应该大于本例中给出的值。下图是通过长时间运行示例而创建的maxNumErrors = 1e3maxNumPackets = 1e4,适用于所有四种模式。

总结

这个例子模拟了一个AWGN信道上的蓝牙LE物理层链路。它展示了如何生成蓝牙LE波形,解调和解码位使用一个理想的接收器和计算误码率。

选定的参考书目

  1. 蓝牙技术官方网站|蓝牙技术官方网站,2021年11月22日访问。https://www.bluetooth.com

  2. 蓝牙核心规范第6卷,5.3版核心系统包[低能量控制器体积]。

另请参阅

功能