这个例子展示了一个端到端模拟,通过使用蓝牙协议的通信工具箱™库来测量不同蓝牙®BR/EDR物理层(PHY)数据包类型的误码率(BER)和数据包误码率(PER)。这些PHY包通过添加无线电前端(RF)损伤和加性高斯白噪声(AWGN)而失真。在实际接收机上对畸变的蓝牙BR/EDR波形进行处理,得到误码率和PER值。仿真结果显示了误码率和PER随能量噪声密度比(Eb/No)的变化曲线。
蓝牙(Bluetooth)是一种短距离无线个人区域网络(WPAN)技术,工作在全球未授权的ISM (industrial, scientific, and medical)频段,频率范围为2.4 GHz ~ 2.485 GHz。在蓝牙技术中,数据被划分为数据包。每个数据包在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 (forward error correction)解码
执行数据去美白
执行报头错误检查(HEC)和循环冗余检查(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 = 1e6;每个Eb/No点考虑的最大包数maxNumPkts = 1000;
在本例中,maxNumErrs、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;% (Hz)timingOffset =0.5;在样品中,小于1微秒timingDrift =2;%百万分之一dcOffset =2;w.r.t最大振幅值的百分比symbolRate = 1e6;%符号速率创建定时偏移对象timingDelayObj = dsp.VariableFractionalDelay;创建频率偏移对象frequencyDelay = com . phasefrequencyoffset (“SampleRate”symbolRate * sps);
对于每个Eb/No点,通过以下步骤生成和处理数据包:
生成随机位
生成蓝牙BR/EDR波形
通过AWGN通道传递生成的波形
添加频率偏移
添加定时偏移量
添加直流偏置
通过失真的波形通过实际接收机
计算BER和PER
ber = 0(1,长度(EbNo));误码率结果per = 0(1,长度(EbNo));% PER结果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值中获取信噪比信噪比= 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:信噪比rng默认的初始化错误计算参数errorCalc = com . 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);数据位生成百分比tx波形=蓝牙波形发生器(txBits,txCfg);%添加频率偏移frequencyDelay。FrequencyOffset = FrequencyOffset;transWaveformCFO = frequencyDelay(tx波形);%添加定时延迟timingDriftRate = (timingDrift*1e-6)/(length(tx波形)*sps);定时漂移率timingDriftVal = timingDriftRate*(0:1:(length(tx波形)-1))';%时序漂移timingDelay = (timinggoffset *sps)+timingDriftVal;%静态定时偏移和定时漂移transWaveformTimingCFO = timingDelayObj(transWaveformCFO,timingDelay);%添加直流偏置dcValue = (dcOffset/100)*max(transWaveformTimingCFO);tximpaired波形= transWaveformTimingCFO + dcValue;添加AWGNtxnoisy波形= awgn(tximpaired波形,snr(iSnr),“测量”);接收模块[rxBits, decodedInfo pktStatus]...= helperBluetoothPracticalReceiver (txNoisyWaveform rxCfg);nummofsignals =长度(pktStatus);pktCount = pktCount+ nummofsignals;loopCount = loopCount+1;% BER和PER计算L1 =长度(txBits);L2 = length(rxBits);L = min(L1,L2);如果(~isempty(L)) berVec = errorCalc(txBits(1:L),rxBits(1:L));结束pktErr = pktErr+sum(~pktStatus);结束误码率和PER的平均值per(iSnr) = pktErr/pktCount;ber(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)),“数据库””、“...'获得的PER: 'num2str(每(iSnr))));结束结束
模式BR,模拟Eb/No = 2 dB,得到的误码率:0.23611得到PER: 0.875模式BR,模拟Eb/No = 4 dB,得到的误码率:0.084028得到PER: 0.89474模式BR,模拟Eb/No = 6 dB,得到的误码率:0.063492得到PER: 0.86667模式BR,模拟Eb/No = 8 dB,得到的误码率:0.025得到PER: 0.77419模式BR,模拟Eb/No = 10 dB,得到的误码率:0.0083333得到PER: 0.38824模式BR,模拟Eb/No = 12 dB,得到的误码率:0.0019597得到PER:0.13699模式BR,模拟Eb/No = 14 dB,得到BER:0.00025304,得到PER: 0.022267
本节给出了考虑的PHY模式下,相对于输入Eb/No范围的误码率和PER结果。
数字如果任何(strcmp (bluetoothPacket, {“ID”,“零”,“投票”})) numOfPlots = 1;仅限PER的百分比其他的numOfPlots = 2;绘制BER和PER次要情节(numOfPlots 1 1), semilogy (EbNo,方方面面。“- r *”);包含(“Eb /不(dB)”);ylabel (“方方面面”);传奇(phyMode);标题(带射频损伤的蓝牙误码率);持有在;网格在;结束次要情节(numOfPlots 1 numOfPlots) semilogy (EbNo,每。“- k *”);包含(“Eb /不(dB)”);ylabel (“每”);传奇(phyMode);标题(“有射频损伤的蓝牙PER”);持有在;网格在;
下面的例子使用了这个helper函数:
helperBluetoothPracticalReceiver.m:对接收到的蓝牙BR/EDR波形进行检测、同步和解码。
这个例子展示了一个完整的端到端生成蓝牙BR/EDR包的过程。通过添加射频损伤和AWGN,生成的蓝牙BR/EDR波形被扭曲。为了得到误码率和PER值,从实际接收机对失真的蓝牙BR/EDR波形进行同步、解调和解码。
蓝牙特别兴趣小组(SIG)。核心系统包[BR/EDR控制器卷]。蓝牙核心规格.版本5.1,卷2。www.bluetooth.com/