蓝牙发射机在MATLAB代码

25日视图(30天)
Akpabio Ekpewoh
Akpabio Ekpewoh 2021年7月6日
评论道: Akpabio Ekpewoh2021年7月6日
我试图使用蓝牙勒 //www.tatmou.com/help/comm/ug/bluetooth-low-energy-receiver.html。 当我试图解码的数据保存在一个.bb文件创建的发射机,我得到一个不正确的操作。
似乎运行好,直到我得到的代码调用的一部分:
[cfgLLAdv, pktCnt crcCnt remStartIdx] = helperBLEPhyBitRecover (rcvFilt,
prbIdx、pktCnt crcCnt bleParam);
的功能,有一个函数,它决定了PDU长度。
PDULenInBytes = comm.internal.utilities.bi2deRightMSB (PDULenField ', 2);
PDULenInBytes我得到一个不正确的值。价值远远高于PDU的实际长度。一旦发生这种情况的下一行代码也失败,因为dewhitenedBits的大小小于PDU的大小。
我有附加的输出响应波形和发射机和接收机的代码。
%发射机代码:
%传输频率:2.402 -
%射频通道: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;
elseif channelIdx = = 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,' Waveform for Channel Index = ', 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 (“DesiredOutputPower”“MaxPowerGain”, 20日,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)
% %
1评论
Akpabio Ekpewoh
Akpabio Ekpewoh 2021年7月6日
%创建一个蓝牙发射机
%射频通道: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)
% %

登录置评。

答案(0)

类别

找到更多的在测试和测量帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!