%创建一个蓝牙发射机
%射频通道:40
%符号率:1 msym / s
%调制:GFSK
%传输模式:LE1M即未编码的PHY 1 mbps的数据速率
%序言:01010101或10101010依赖于第一个值的访问
%的地址
%访问地址:32位字段
%载荷最大值是2080(包括每个包的一部分)
% % BLE发射机
clc;
phyMode =“LE1M”;
comm金宝appSupportPackageCheck (“蓝牙”);%检查MATLAB蓝牙系统
symbolRate = 1 e6;
channelBW = 2 e6;
%配置广告频道PDU
cfgLLAdv = bleLLAdvertisingChannelPDUConfig;
cfgLLAdv。PDUType =广告显示的;
cfgLLAdv。AdvertisingData =“0123456789六边形abcdef”;
cfgLLAdv。AdvertiserAddress =“1234567890 ab”;
%生成消息,塞进消息碎片
messageBits = bleLLAdvertisingChannelPDU (cfgLLAdv);
(地位、价值)= bleLLAdvertisingChannelPDUDecode (messageBits);%循环存在这里经过八位字节的数据输入
%用于可视化
numIter = 1;
sps = 8;每个符号%样本
accessAddLen = 32;%访问地址的长度
accessAddHex =“8 e89bed6”;在十六进制%访问地址值
accessAddBin = de2bi (hex2dec (accessAddHex) accessAddLen) ';在二进制%访问地址
%建立可视化
%创建一个频谱分析仪对象
specAn = dsp.SpectrumAnalyzer (“SpectrumType”,的功率密度);
specAn。SampleRate = symbolRate * sps;
%范围对象创建一个固定时间
timeScope = timeScope (“SampleRate”,symbolRate * sps,“TimeSpanSource”,“汽车”,…
“ShowLegend”,真正的);
rng默认的;%控制repetiton
为numIdx = 1: numIter
channelIdx =兰迪([37 39],1,1);
% channelIdx = 37;%频道索引值的范围(0,39)
%生成波形
txWaveform = bleWaveformGenerator (messageBits,…
“模式”phyMode,…
“SamplesPerSymbol”sps,…
“ChannelIndex”channelIdx,…
“AccessAddress”,accessAddBin);
% txWaveform = awgn (txWaveform 20“测量”);
%初始化参数所需的信号源
如果channelIdx = = 37
txCenterFrequency = 2.402 e9;
elseifchannelIdx = = 38
txCenterFrequency = 2.426 e9;
其他的
txCenterFrequency = 2.480 e9;
结束
txFrameLength =长度(txWaveform);
txNumberOfFrames = 1;% 1 e4
txFrontEndSampleRate = symbolRate * sps;
% specAn。FrequencyOffset = channelBW * channelIdx;
specAn。Title = (“谱”phyMode,对通道的波形指数= 'num2str (channelIdx)];
channelIdx;
抽搐
而toc < 0.5%的范围为0.5秒
specAn (txWaveform);
结束
%绘制生成的波形
timeScope。Title = (“祝福”phyMode,对通道的波形指数= 'num2str (channelIdx)];
timeScope (txWaveform);
结束
sigSink = comm.BasebandFileWriter (“CenterFrequency”txCenterFrequency,…
“文件名”,“bleCaptures.bb”,…
“SampleRate”,txFrontEndSampleRate);
sigSink (txWaveform);%写作基带文件“bleCaptures.bb”
%基本上是.bb因为我可以保存数据
发行版(sigSink)
constDiagram = comm.ConstellationDiagram (“SamplesPerSymbol”sps,…
“SymbolsToDisplaySource”,“属性”,“SymbolsToDisplay”,100);
constDiagram (txWaveform)
% %结束
%接收
% % BLE接收机
负载“港口心电图1[屏蔽2020 10厘米]2020.09.30.17.01.31.716.mat”
clc;
phyMode =“LE1M”;
bleParam = helperBLEReceiverConfig (phyMode);
bbFileName =“bleCaptures.bb”;
sigSrc = comm.BasebandFileReader (bbFileName);
sigSrcInfo = info (sigSrc);
sigSrc。SamplesPerFrame = sigSrcInfo.NumSamplesInData;
bbSampleRate = sigSrc.SampleRate;
bleParam。SamplesPerSymbol = bbSampleRate / bleParam.SymbolRate;
%查看接收信号
spectrumScope = dsp.SpectrumAnalyzer (…
“SampleRate”bbSampleRate,…
“SpectrumType”,的功率密度,…
“SpectralAverages”10…
“YLimits”(-130 -10),…
“标题”,收到了基带BLE信号频谱的,…
“YLabel”,的功率谱密度);
dataCaptures = sigSrc ();
%接收的波形显示功率谱密度
spectrumScope (dataCaptures);
agc = comm.AGC (“MaxPowerGain”,20岁,“DesiredOutputPower”2);
freqCompensator = comm.CoarseFrequencyCompensator (“调制”,“OQPSK”,…
“SampleRate”bbSampleRate,…
“SamplesPerSymbol”2 * bleParam.SamplesPerSymbol…
“FrequencyResolution”,100);
prbDet = comm.PreambleDetector (bleParam.RefSeq,“检测”,“第一”);
长度(dataCaptures)
bleParam.MinimumPacketLen;
pktCnt = 0;
crcCnt = 0;
displayFlag = true;%假;%真实如果接收的数据是被打印出来
%,而长度(dataCaptures) > bleParam.MinimumPacketLen
%考虑两个帧捕获信号的每一次迭代
startIndex = 1;
endIndex = min(长度(dataCaptures), 2 * bleParam.FrameLength);
rcvSig = dataCaptures (startIndex: endIndex);
rcvAGC = agc (rcvSig);%执行自动增益控制
rcvDCFree = rcvAGC -意味着(rcvAGC);%消除直流偏置
rcvFreqComp = freqCompensator (rcvDCFree);%估计和补偿载波频率偏移量
rcvFilt = conv (rcvFreqComp bleParam.h,“相同”);%执行高斯匹配滤波
%执行帧定时同步
[~,dtMt] = prbDet (rcvFilt);
发行版(prbDet)
prbDet。阈值= max (dtMt);
prbIdx = prbDet (rcvFilt);
prbIdx;
%提取消息信息
[cfgLLAdv, pktCnt crcCnt remStartIdx] = helperBLEPhyBitRecover (rcvFilt,…
prbIdx、pktCnt crcCnt bleParam);
%在爆炸中剩余的信号捕获
dataCaptures = dataCaptures (1 + remStartIdx:结束);
%显示解码信息
如果displayFlag & & ~ isempty (cfgLLAdv)
disp (“我们在这里”)
流(“广告PDU类型:% s \ n”,cfgLLAdv.PDUType);
流(“广告地址:% s \ n”,cfgLLAdv.AdvertiserAddress);
结束
%释放系统对象
发行版(freqCompensator)
发行版(prbDet)
%结束
%释放信号源
发行版(sigSrc)
% %