主要内容

端到端蓝牙BR/EDR PHY模拟与射频损伤和校正

这个例子展示了一个端到端模拟,通过使用蓝牙协议的通信工具箱™库来测量不同蓝牙®BR/EDR物理层(PHY)数据包类型的误码率(BER)和数据包误码率(PER)。这些PHY包通过添加无线电前端(RF)损伤和加性高斯白噪声(AWGN)而失真。在实际接收机上对畸变的蓝牙BR/EDR波形进行处理,得到误码率和PER值。仿真结果显示了误码率和PER随能量噪声密度比(Eb/No)的变化曲线。

蓝牙BR/EDR无线电规范

蓝牙(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

检查是否安装了“蓝牙协议的通信工具箱库”支持包。金宝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波形

蓝牙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 =2w.r.t最大振幅值的百分比symbolRate = 1e6;%符号速率创建定时偏移对象timingDelayObj = dsp.VariableFractionalDelay;创建频率偏移对象frequencyDelay = com . phasefrequencyoffset (“SampleRate”symbolRate * sps);

流程Eb/No Points

对于每个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”);持有;网格

图中包含2个轴对象。带有射频损伤的蓝牙的标题BER的坐标轴对象1包含一个类型为line的对象。该对象表示BR。带有射频损伤的蓝牙的标题为PER的坐标轴对象2包含一个类型为line的对象。该对象表示BR。

附录

下面的例子使用了这个helper函数:

这个例子展示了一个完整的端到端生成蓝牙BR/EDR包的过程。通过添加射频损伤和AWGN,生成的蓝牙BR/EDR波形被扭曲。为了得到误码率和PER值,从实际接收机对失真的蓝牙BR/EDR波形进行同步、解调和解码。

选定的参考书目

  • 蓝牙特别兴趣小组(SIG)。核心系统包[BR/EDR控制器卷]。蓝牙核心规格.版本5.1,卷2。www.bluetooth.com/

相关的话题