此示例显示了通过使用用于蓝牙的通信工具箱™库来测量不同蓝牙®Br/ EDR物理层(PHY)分组类型的误码率(BER)和数据包错误率(PER)的端到端模拟®协议。这些PHY数据包通过添加无线电前端(RF)损伤和添加剂白色高斯噪声(AWGN)而扭曲。在实用的接收器处处理扭曲的蓝牙BR / EDR波形以获取BER和每个值。所获得的仿真结果显示了BER的曲线和每个能量 - 噪声密度比(EB / NO)的函数。
蓝牙是一种短距离无线个人区域网络(WPAN)技术,在2.4 GHz至2.485 GHz的频率范围内运行于全球未经许可的工业、科学和医疗(ISM)频段。在蓝牙技术中,数据被分成包。每个数据包在79个指定的蓝牙通道中传输。每个通道的带宽为1mhz。蓝牙采用跳频扩频(FHSS)方案,通过使用发射机和接收机已知的伪随机序列在多个频率信道之间切换载波。
蓝牙标准指定这些PHY模式:
基本速率(BR) -强制模式,使用高斯频移键控(GFSK)调制,数据速率为1 Mbps。
增强数据速率(EDR) -可选模式,使用相移键控(PSK)调制与这两种变体:
EDR2M:使用pi/4-DQPSK,数据速率为2mbps
EDR3M:使用8-DPSK,数据速率为3 Mbps
这种端到端蓝牙BR/EDR PHY仿真决定了一个有射频损伤和AWGN的蓝牙数据包的误码率和PER性能。每个包是在一个环路上生成的向量等于能量噪声密度比(Eb/No)的长度BluetoothwaveFormGenerator.
通过配置bluetoothWaveformConfig
对象。
为了累积错误率统计,在通过接收器之前,使用RF损伤和AWGN改变生成的波形。
这些RF损伤用于扭曲数据包:
直流偏置
载波频率偏移量
静态定时偏移
时间漂移
在生成的蓝牙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 ='BR';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波形。
频率OFFSET =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));%BER结果每= 0(1、长度(EbNo));% /结果bitsPerByte = 8;%每字节的位数%根据报文设置码率如果任何(strcmp (bluetoothPacket, {FHS的那“DM1”那“DM3”那“DM5”那“HV2”那'dv'那“EV4”}))分数= 2/3;elseif比较字符串(bluetoothPacket“HV1”) codeRate = 1/3;别的分数= 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;每个SNR值下数据包数量%计数器pktErr = 0;而((berVec(2) < maxNumErrs) && (berVec(3) < maxNumBits) && (loopCount < maxNumPkts)) txBits = randi([0 1],dataLen*bitsPerByte,1);%数据位生成txwaveform =蓝牙WaveFormGenerator(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;%adgn.txNoisyWaveform = awgn (txImpairedWaveform,信噪比(iSnr),“测量”);%接收模块[rxBits, decodedInfo pktStatus]...= HelperBluetoothPracticalReceiver(TXNoisyWaveForm,RXCFG);numofsignals =长度(pktstatus);pktcount = pktcount + numofsignals;loopcount = loopcount + 1;%BER和每个计算l1 =长度(txbits);l2 =长度(rxbits);l = min(l1,l2);如果(〜isempty(l))bervec = errercalc(txbits(1:l),rxbits(1:l));结尾pkterr = pkterr + sum(〜pktstatus);结尾%ber和per的%平均值每(iSnr) = pktErr / pktCount;数量(iSnr) = berVec (1);如果((BER(ISNR)== 0)&&(每(ISNR)== 1))BER(ISNR)= 0.5;%包错误率为1时,考虑平均误码率为0.5结尾如果~任何(strcmp (bluetoothPacket, {'ID'那“零”那“投票”})) disp ([“模式”phyMode”、“...'模拟Eb/No = 'num2str (EbNo (iSnr)),“数据库””、“...'获得BER:',num2str(BER(ISNR)),'每次获得:'那...num2str(每个(iSnr))));别的disp ([“模式”phyMode”、“...'模拟Eb/No = 'num2str (EbNo (iSnr)),“数据库””、“...“获得每:”num2str(每(iSnr))));结尾结尾
模拟EB / NO = 2 dB的模式BR:0.23611通过:0.875模式BR,模拟EB / NO = 4 dB,获得的BER:0.084028:0.89474模式BR,模拟EB / NO = 6DB,获得的BER:0.063492:0.86667模式BR,模拟EB / NO = 8 dB,获得的BER:0.025,每次:0.77419模式BR,为EB / NO = 10 dB模拟,获得的BER:0.0083333(每):0.38824模拟EB / NO = 12 dB的模式BR,获得的BER:0.0019597(如下):0.13699模式BR,用于EB / NO = 14 dB,获得的BER:0.022267获得:0.022267
本节介绍BER和每个结果对于所考虑的PHY模式的输入EB / NO范围。
数字,如果任何(strcmp (bluetoothPacket, {'ID'那“零”那“投票”})) numofplot = 1;%仅绘图PER别的numofplots = 2;绘制BER和PER图次要情节(numOfPlots 1 1), semilogy (EbNo,方方面面。'-r *');Xlabel('EB / NO(DB)');ylabel ('BER');传奇(phyMode);标题(“带有射频损伤的蓝牙BER”);持有在;网格在;结尾子图(NumOfplots,1,NumOfplots),半径(eBno,per。',“- k *”);Xlabel('EB / NO(DB)');ylabel (“每”);传奇(phyMode);标题('每个蓝牙带有RF损伤');持有在;网格在;
示例中使用了这个helper函数:
HelperbluetoothPracticalReceiver.m.:检测,同步和解码接收的蓝牙BR / EDR波形。
这个例子展示了一个完整的端到端的过程来生成一个蓝牙BR/EDR包。产生的蓝牙BR/EDR波形由于增加了射频损伤和AWGN而失真。为了得到误码率和PER值,对失真的蓝牙BR/EDR波形进行同步、解调和解码。
蓝牙特殊兴趣组(SIG)。“核心系统包[BR / EDR控制器音量]”。蓝牙核心规范.5.1版,第2卷。www.bluetooth.com/