这个例子展示了一个端到端仿真,通过使用蓝牙协议的通信工具箱™库,测量不同蓝牙®BR/EDR物理层(PHY)包类型的误码率(BER)和包误码率(PER)。这些PHY包通过添加射频前端(RF)损伤和加性高斯白噪声(AWGN)而失真。在实际接收机上对失真的蓝牙BR/EDR波形进行处理,得到误码率和PER值。仿真结果显示了误码率和PER随能量噪声密度比(Eb/No)变化的曲线。
蓝牙是一种短距离无线个人区域网络(WPAN)技术,在2.4 GHz至2.485 GHz的频率范围内运行于全球未经许可的工业、科学和医疗(ISM)频段。在蓝牙技术中,数据被分成包。每个数据包在79个指定的蓝牙通道中传输。每个通道的带宽为1mhz。蓝牙采用跳频扩频(FHSS)方案,通过使用发射机和接收机已知的伪随机序列在多个频率信道之间切换载波。
蓝牙标准指定了这些PHY模式:
基本速率(BR) -强制模式,使用高斯频移键控(GFSK)调制,数据速率为1mbps。
增强数据速率(EDR)可选模式,使用相移键控(PSK)调制与这两种变体:
EDR2M:使用pi/4-DQPSK,数据速率为2mbps
EDR3M:采用8-DPSK,数据速率为3mbps
这种端到端蓝牙BR/EDR PHY仿真决定了一个有射频损伤和AWGN的蓝牙数据包的误码率和PER性能。每个包是在一个环路上生成的向量等于能量噪声密度比(Eb/No)的长度bluetoothWaveformGenerator
通过配置bluetoothWaveformConfig
对象。
为了积累错误率统计数据,产生的波形在通过接收机之前会受到射频损伤和AWGN的影响。
这些射频损伤被用来扭曲数据包:
直流偏置
载波频率偏移量
静态时间偏移
时间漂移
在生成的蓝牙BR/EDR波形中加入高斯白噪声。通过实际的蓝牙接收器处理失真和噪声波形,执行以下操作:
消除直流偏置
检测信号突发
执行匹配滤波
估计并纠正时间偏差
估计并校正载波频率偏差
解调BR / EDR波形
执行前向纠错(FEC)解码
执行数据dewhitening
执行header error check (HEC)和cyclic redundancy check (CRC)
输出解码位和基于解码低地址段(LAP)、HEC和CRC的解码包统计信息
这个框图说明了每个蓝牙BR/EDR PHY包的处理步骤。
为了确定误码率和PER,比较恢复的输出位和传输的数据位。
检查是否安装了“蓝牙协议通信工具箱库”支持包。金宝app
comm金宝appSupportPackageCheck (“蓝牙”);
% Eb/No in dBEbNo = 2:2:14;%在每个Eb/No点上模拟的最大误码数maxNumErrs = 100;%每个Eb/No点累积的最大比特数maxNumBits = 1 e6;%每个Eb/No点考虑的最大数据包数maxNumPkts = 1000;
在本例中,选择maxnumerrors、maxNumBits和maxNumPkts的值用于短时间的模拟。
蓝牙BR/EDR波形是通过使用bluetoothWaveformConfig
对象。配置属性bluetoothWaveformConfig
按您的要求制作。在本例中,配置了PHY传输模式、蓝牙包类型和每个符号的样本数量。
phyMode =“品牌”;PHY传输方式bluetoothPacket =FHS的;%蓝牙报文的类型,该值可以是:{'ID',%“空”,“调查”,‘FHS’,‘HV1’,‘HV2’,‘HV3’,‘DV’,‘EV3’,%’EV4’,‘EV5’,‘AUX1’,‘DM3’,‘DM1’,‘《’,‘DM5’,‘DH3’,%’DH5’,‘2-DH1’,‘2-DH3’,‘2-DH5’,‘2-DH1’,‘2-DH3’,%’2-DH5’,‘2-EV3’,‘2-EV5’,‘3-EV3’,‘3-EV5}sps = 8;%每个符号的采样值必须大于1
设置频率、时间和直流偏移参数来扭曲蓝牙BR/EDR波形。
frequencyOffset =6000;%在赫兹timingOffset =0.5;%在样本中小于1微秒timingDrift =2;百万分之一dcOffset =2;百分比w.r.t最大振幅值symbolRate = 1 e6;%符号率创建定时偏移对象timingDelayObj = dsp.VariableFractionalDelay;%创建频率偏移对象frequencyDelay = comm.PhaseFrequencyOffset (“SampleRate”symbolRate * sps);
对于每个Eb/No点,数据包通过以下步骤生成和处理:
生成随机比特
生成蓝牙BR/EDR波形
通过AWGN通道传递产生的波形
添加频率偏移
添加定时偏移
加直流偏置
将失真的波形通过实际的接收机接收
计算误码率和PER
1 = 0(1、长度(EbNo));% 1的结果每= 0(1、长度(EbNo));% /结果bitsPerByte = 8;%每字节的位数%根据报文设置码率如果任何(strcmp (bluetoothPacket, {FHS的,“DM1”,“DM3”,“DM5”,“HV2”,“DV”,“EV4”})) codeRate = 2/3;elseif比较字符串(bluetoothPacket“HV1”) codeRate = 1/3;其他的codeRate = 1;结束%根据PHY传输模式设置每个符号的位数bitsPerSymbol = 1+ (strcmp(phyMode,“EDR2M”)) * (1 + (strcmp (phyMode,“EDR3M”)) * 2;%从EbNo值获取信噪比snr = EbNo + 10*log10(codeRate) + 10*log10(bitsPerSymbol) - 10*log10(sps);%创建蓝牙BR/EDR波形配置对象txCfg = bluetoothWaveformConfig (“模式”phyMode,“PacketType”bluetoothPacket,...“SamplesPerSymbol”, sps);如果比较字符串(bluetoothPacket“DM1”) txCfg。PayloadLength = 17;% DM1报文的最大长度,单位为字节结束dataLen = getPayloadLength (txCfg);%有效负载长度获得PHY性能rxCfg = getPhyConfigProperties (txCfg);为iSnr = 1:长度(snr) rng默认的%初始化错误计算参数errorCalc = comm.ErrorRate;berVec = 0 (3,1);pktCount = 0;%检测到的蓝牙包数计数器loopCount = 0;%每个信噪比对应的报文数计数器pktErr = 0;而((berVec(2) < maxNumErrs) && (berVec(3) < maxNumBits) && (loopCount < maxNumPkts)) txBits = randi([0 1],dataLen*bitsPerByte,1);%数据位生成txWaveform = bluetoothWaveformGenerator (txBits txCfg);增加频率偏移frequencyDelay。FrequencyOffset = FrequencyOffset;transWaveformCFO = frequencyDelay (txWaveform);添加定时延迟timingDriftRate = (e-6 timingDrift * 1) / (txWaveform) *长度(sps);定时漂移率timingDriftVal = timingDriftRate *(0:1:(长度(txWaveform) 1)) ';%的时间漂移timingDelay = (timingOffset * sps) + timingDriftVal;%静态定时偏移和定时漂移transWaveformTimingCFO = timingDelayObj (transWaveformCFO timingDelay);添加直流偏置dcValue = (dcOffset / 100) *马克斯(transWaveformTimingCFO);tximpaired波形= transWaveformTimingCFO + dcValue;%增加情况下txNoisyWaveform = awgn (txImpairedWaveform,信噪比(iSnr),“测量”);%接收模块[rxBits, decodedInfo pktStatus]...= helperBluetoothPracticalReceiver (txNoisyWaveform rxCfg);numOfSignals =长度(pktStatus);pktCount = pktCount + numOfSignals;loopCount = loopCount + 1;%误码率和PER计算L1 =长度(txBits);L2 =长度(rxBits);L = min (L1, L2);如果(~isempty(L)) berVec = errorCalc(txBits(1:L),rxBits(1:L));结束pktErr = pktErr +总和(~ pktStatus);结束%误码率和PER的平均值每(iSnr) = pktErr / pktCount;数量(iSnr) = berVec (1);如果((ber (iSnr) = = 0) & &(每(iSnr) = = 1)的误码率(iSnr) = 0.5;%包错误率为1时,考虑平均误码率为0.5结束如果~任何(strcmp (bluetoothPacket, {“ID”,“零”,“投票”})) disp ([“模式”phyMode”、“...'模拟Eb/No = 'num2str (EbNo (iSnr)),“数据库””、“...”得到的误码率,“num2str (ber (iSnr)),'获得的PER: ',...num2str(每个(iSnr))));其他的disp ([“模式”phyMode”、“...'模拟Eb/No = 'num2str (EbNo (iSnr)),“数据库””、“...“获得每:”num2str(每(iSnr))));结束结束
BR模式,模拟了Eb /不= 2 dB,获得数量:0.23611获得:0.875 BR模式,模拟Eb /不= 4 dB,获得数量:0.084028获得:0.89474 BR模式,模拟Eb /不= 6 dB,获得数量:0.063492获得:0.86667 BR模式,模拟Eb /不= 8分贝,获得数量:0.025获得:0.77419模式BR,模拟Eb/No = 10 dB时,获得BER:0.0083333获得PER: 0.38824模式BR,模拟Eb/No = 12 dB时,获得BER:0.0019597获得PER: 0.13699模式BR,模拟Eb/No = 14 dB时,获得BER:0.00025304获得PER: 0.022267
本节给出所考虑的PHY模式下,相对于输入Eb/No范围的误码率和PER结果。
数字如果任何(strcmp (bluetoothPacket, {“ID”,“零”,“投票”})) numofplot = 1;%仅绘图PER其他的numOfPlots = 2;绘制BER和PER图次要情节(numOfPlots 1 1), semilogy (EbNo,方方面面。“- r *”);包含(“Eb /不(dB)”);ylabel (“方方面面”);传奇(phyMode);标题(“带有射频损伤的蓝牙BER”);持有在;网格在;结束次要情节(numOfPlots 1 numOfPlots) semilogy (EbNo,每。“- k *”);包含(“Eb /不(dB)”);ylabel (“每”);传奇(phyMode);标题(“带有射频损伤的蓝牙的PER”);持有在;网格在;
示例中使用了这个helper函数:
helperBluetoothPracticalReceiver.m:检测、同步和解码接收的蓝牙BR/EDR波形。
这个例子展示了一个完整的端到端的过程来生成一个蓝牙BR/EDR包。产生的蓝牙BR/EDR波形由于增加了射频损伤和AWGN而失真。为了得到误码率和PER值,对失真的蓝牙BR/EDR波形进行同步、解调和解码。
蓝牙特殊兴趣组(SIG)。核心系统包[BR/EDR控制器卷]。蓝牙核心规范.5.1版,第2卷。www.bluetooth.com/