主要内容

图像传输和接收使用WLAN工具箱和PlutoSDR之一

这个例子展示了如何发送和接收无线局域网数据包在单一PlutoSDR设备,使用通信工具箱™ADALM-PLUTO广播支持包和WLAN的工具箱™。金宝app一个图像文件编码和挤进WLAN传输数据包,并随后在接收解码。

所需的硬件和软件

要运行这个示例,您需要以下软件:

你还需要以下特别提款权设备和相应的支持包插件:金宝app

完整列表的通信工具箱支持SDR平台,是指支持硬件部分金宝app软件定义无线电(SDR)发现页面

介绍

您可以使用WLAN工具箱生成标准兼容MAC帧和波形。这些可以upconverted基带波形射频传输使用特别提款权PlutoSDR等硬件。的PlutoSDR重复波形发射机功能允许一个波形传输接收到空气和特别提款权使用相同的硬件。接收到的波形捕获和downsampled使用PlutoSDR并解码恢复基带传输信息,如下图所示。

这个例子和部分图像文件导入多个MAC服务数据单元(MSDUs)。每个MSDU传递给wlanMACFrame函数创建一个MAC协议数据单元(MPDU)。这个函数也消耗wlanMACFrameConfig对象作为输入,它可以用来MPDUs通过顺序号码SequenceNumber财产。MPDUs被传递到PHY层作为PHY层服务数据单元(PSDUs)。每个PSDU数据打包成单个NonHT,™(802.111使用WLAN工具箱]WLAN包。这个例子创建了一个无线局域网使用的基带波形wlanWaveformGenerator函数。这个函数使用多个PSDUs和流程每个形成一系列PLCP协议数据单元(PPDUs)。多个PPDUs upconverted和射频波形通过空气发送使用PlutoSDR如下列图所示。

这个例子然后使用同一个PlutoSDR抓住了传播波形。射频传输解调的基带和收到MPDUs解码使用wlanMPDUDecode函数。提取的MSDUs命令使用SequenceNumber财产的恢复MAC帧配置对象。接收到的信息比特的多个MSDUs结合恢复传输图像。接收方处理见下图。

示例设置

在你运行这个例子之前,执行以下步骤:

  1. 配置您的主机与ADALM-PLUTO广播的支持包。金宝app看到开始寻求帮助。

  2. 确保安装WLAN工具箱。你必须有一个WLAN工具箱许可运行这个示例。

当您运行这个示例中,该脚本所做的第一件事就是检查WLAN工具箱。

%检查WLAN工具箱安装,有一个有效的%的许可证如果isempty(版本(“无线局域网”))%检查WLAN工具箱安装错误(“请安装WLAN工具箱运行这个例子。);elseif~许可证(“测试”,“WLAN_System_Toolbox”)%检查存在一个有效的许可证错误(的一个有效的许可证WLAN工具箱需要运行这个例子。);结束

然后脚本配置的范围和数据将显示整个例子。

%设置处理图像的阴谋如果~ (“imFig”,“var”)| | ~ ishandle (imFig) imFig =图;imFig。NumberTitle =“关闭”;imFig。Name =“形象策划”;imFig。可见=“关闭”;其他的clf (imFig);%清晰的图imFig。可见=“关闭”;结束%设置频谱查看器spectrumScope = dsp.SpectrumAnalyzer (“SpectrumType”,的功率密度,“SpectralAverages”10“YLimits”(-130 -50),“标题”,收到了基带WLAN信号频谱的,“YLabel”,的功率谱密度,“位置”,(69 376 800 450));%设置的星座图查看器平衡的WLAN符号星座= comm.ConstellationDiagram (“标题”,“平衡的WLAN符号”,“ShowReferenceConstellation”假的,“位置”,(878 376 460 460));

一个特别提款权发射机系统使用对象PlutoSDR SDR硬件基带传输数据。

%初始化特别提款权设备deviceNameSDR =“冥王星”;%设置特别提款权设备无线电= sdrdev (deviceNameSDR);特别提款权%创建设备对象

以下部分解释的设计和架构这个例子中,你可以看到执行的代码。

发射机的设计

WLAN发射机的总体结构可以描述如下:

  1. 导入一个图像文件,并把它转换成十进制流字节。

  2. 使用WLAN工具箱,生成一个基带信号无线局域网802.11包数据流分成多个数据包。

  3. 准备使用特别提款权硬件传输的基带信号。

  4. 基带数据发送到SDR硬件upsampling和连续传输所需的中心频率。

发射机增益参数用于损害接收到的波形的质量,您可以更改该参数来减少传输质量,和损害的信号。这些建议值,取决于你的天线配置,您可能需要调整这些值。建议值是:

  1. 为增加增益设置为0(0分贝)

  2. 默认的增益设置为-10(-10分贝)

  3. 为降低增益设置为-20(-20分贝)

txGain = -10;

准备图像文件

从图像文件中读取数据的例子中,尺度传播,并将它转换成十进制流字节。图像的缩放降低图像的质量减少二进制数据流的大小。

传输图像的大小直接影响无线局域网数据包的数量,需要传输的图像数据。比例因子用于图像的原始大小。WLAN生成的数据包传输的数量取决于以下几点:

  1. 时设置的图像缩放导入图像文件。

  2. 数据的长度进行分组。这是指定的msduLength变量。

  3. MCS传输包的价值。

比例因子的结合规模是0.2,MSDU长度msduLength2304年如下所示,需要11 WLAN无线数据包的传输。增加比例因子或减少MSDU长度将导致更多的数据包的传输。

%的输入图像文件并转换为二进制流fileTx =“peppers.png”;%图像文件的名字fData = imread (fileTx);%从文件读取图像数据规模= 0.2;%图像比例因子origSize =大小(fData);%原始输入图像大小scaledSize = max(地板(规模。* origSize (1:2)), 1);%计算新的图像大小heightIx = min(圆(((1:scaledSize(1)) -0.5)。/规模+ 0.5),origSize (1));widthIx = min(圆(((1:scaledSize(2)) -0.5)。/规模+ 0.5),origSize (2));fData = fData (heightIx、widthIx:);%调整图像imsize =大小(fData);%存储新图像大小txImage = fData (:);

这个例子显示传输的图像文件。成功接收和解码图像文件时,该示例显示图像。

%情节传输图像图(imFig);imFig。可见=“上”;次要情节(211);imshow (fData);标题(“传播形象”);次要情节(212);标题(“收到形象将出现在这里……”);集(gca),“可见”,“关闭”);甘氨胆酸组(findall (,“类型”,“文本”),“可见”,“上”);暂停(1);%停下来情节Tx的形象

片段传输数据

创建的例子使用了数据流从输入图像文件txImage。数据流被分割成更小的传输单位(MSDUs)的大小msduLength。创建了MPDU为每个传输单位使用wlanMACFrame函数。每次调用这个函数创建一个对应于给定MPDU MSDU和框架配置对象。框架配置对象可以使用创建wlanMACFrameConfig可用于配置MPDU的序列号。所有MPDUs然后按顺序传递到物理层传输。

在这个例子中,msduLength字段设置为2304字节。这是为了确保最大MSDU大小中指定的标准(1)不超过。数据在过去MPDU附加零,这是为了让所有MPDUs相同的大小。

msduLength = 2304;% MSDU长度字节numMSDUs =装天花板(长度(txImage) / msduLength);padZeros = msduLength-mod(长度(txImage), msduLength);txData = [txImage;0 (padZeros 1)];txDataBits =双(重塑(de2bi (txData 8)”[], 1));%将输入数据流分成碎片bitsPerOctet = 8;data = 0 (0,1);印第安纳州= 0:numMSDUs-1%提取图像数据为每个MPDU(八位字节)frameBody = txData(印第安纳州* msduLength + 1: msduLength *(印第安纳州+ 1):);%创建MAC帧配置对象和配置序列号cfgMAC = wlanMACFrameConfig (“FrameType”,“数据”,“SequenceNumber”印第安纳州);%生成MPDU[mpdu, lengthMPDU] = wlanMACFrame (frameBody cfgMAC);% MPDU字节转换为比特流psdu =重塑(de2bi (hex2dec (mpdu), 8)”, [], 1);%连接PSDUs波形生成data =[数据;psdu];% #好< AGROW >结束

生成IEEE 802.11基带WLAN的信号

non-HT波形合成使用wlanWaveformGeneratornon-HT格式配置对象。使用创建的对象wlanNonHTConfig函数。对象包含的属性配置。在这个例子中一个对象配置为20 MHz带宽,传输天线和64 qam率2/3 (MCS 6)。

nonHTcfg = wlanNonHTConfig;%创建包配置nonHTcfg。MCS = 6;%调制:64 qam率:2/3nonHTcfg。NumTransmitAntennas = 1;%的发送天线数量chanBW = nonHTcfg.ChannelBandwidth;nonHTcfg。PSDULength = lengthMPDU;%设置PSDU长度% sdrTransmitter使用| transmitRepeat |传输功能%的基带WLAN在一个循环中波形PlutoSDR DDR内存。%传输射频信号采样过量和传播30 MHz。的% 802.11信号传输通道5,这对应于一个中心% 2.432 GHz的频率定义节15.4.4.3 [1]。sdrTransmitter = sdrtx (deviceNameSDR);%发射机性能sdrTransmitter。RadioID =“usb: 0”;%重新取样传输波形30 MHzfs = wlanSampleRate (nonHTcfg);%在MHz传输采样率osf = 1.5;%过采样因子sdrTransmitter。BasebandSampleRate = f * osf;sdrTransmitter。CenterFrequency = 2.432 e9;% 5频道sdrTransmitter。ShowAdvancedProperties = true;sdrTransmitter。获得= txGain;%初始化每个数据包的扰频器与一个随机整数scramblerInitialization =兰迪([127]numMSDUs 1);%生成基带NonHT数据包由空闲时间txWaveform = wlanWaveformGenerator(数据、nonHTcfg“NumPackets”numMSDUs,“IdleTime”,20 e-6,“ScramblerInitialization”,scramblerInitialization);%重新取样传输波形txWaveform =重新取样(txWaveform fs * osf, fs);流(“\ nGenerating WLAN传输波形:\ n”)%规模标准化信号避免射频的饱和阶段powerScaleFactor = 0.8;txWaveform = txWaveform。* (1 / max (abs (txWaveform)) * powerScaleFactor);%射频传输波形sdrTransmitter.transmitRepeat (txWaveform);

重复使用特别提款权硬件传输

transmitRepeat函数传输基带WLAN包与PlutoSDR空闲时间,和硬件信号样本存储在内存中。例子然后传输波形不断在空中,直到发布传播对象的方法。消息显示在命令窗口确认传输已经开始成功。

接收机的设计

WLAN接收机的一般结构可以描述如下:

  1. WLAN传输信号的捕获多个数据包使用特别提款权硬件。

  2. 检测包

  3. 粗糙的载波频率偏移估计和修正

  4. 好时机建立同步。L-STF, L-LTF L-SIG样品提供了良好时机允许调整数据包检测L-STF的开始或结束

  5. 载波频率偏移估计和修正

  6. 进行信道估计的使用L-LTF接收信号

  7. 检测数据包的格式

  8. 解码L-SIG场恢复MCS价值和数据部分的长度

  9. 解码数据字段获得在每个数据包的传输数据

  10. 解码收到PSDU并检查如果帧校验序列(FCS) PSDU传递。

  11. 解码MSDUs基于顺序SequenceNumber财产的恢复MAC帧配置对象。

  12. 把解码MSDUs传播形成了接收数据包的形象

这个例子中情节的功率谱密度(PSD)捕获的波形,显示了平衡的数据符号的可视化,接收到的图像。

接收方设置

控制sdrReceiver使用属性中定义的sdrReceiver对象。接收机的采样率是30 MHz,也就是20 MHz基带采样率的1.5倍。

一个特别提款权接收机系统使用对象PlutoSDR接受特别提款权硬件基带数据。

sdrReceiver = sdrrx (deviceNameSDR);sdrReceiver。RadioID =“usb: 0”;sdrReceiver。BasebandSampleRate = sdrTransmitter.BasebandSampleRate;sdrReceiver。CenterFrequency = sdrTransmitter.CenterFrequency;sdrReceiver。GainSource =“手动”;sdrReceiver。获得= 10;sdrReceiver。OutputDataType =“双”;%配置捕获长度相当于两倍的长度%传输信号,这是为了确保PSDUs为了接收。%在接待重复MAC碎片移除。captureLength = 2 *长度(txWaveform);spectrumScope。SampleRate = sdrReceiver.BasebandSampleRate;指数在PSDU %获得所需的字段indLSTF = wlanFieldIndices (nonHTcfg,“L-STF”);indLLTF = wlanFieldIndices (nonHTcfg,“L-LTF”);indLSIG = wlanFieldIndices (nonHTcfg,“L-SIG”);Ns = indLSIG (2) -indLSIG (1) + 1;%的样本数量在一个OFDM符号

捕获接收数据包

使用PlutoSDR传播波形捕获。

流(“\ nStarting新的射频捕获。\ n”)burstCaptures =捕获(sdrReceiver captureLength,“样本”);

接收处理

例子使用while循环捕获和解码数据包。WLAN波形不断传输空气在一个循环中,第一个包被sdrReceiver是不能保证是第一个数据包传输。这意味着包可能是解码序列。使接收到的数据包重组以正确的顺序,他们的序列号必须确定。每个包的解码PSDU比特的传递wlanMPDUDecode函数。这个函数解码MPDU和输出MSDU以及恢复的MAC帧配置对象wlanMACFrameConfig。的SequenceNumber属性在恢复MAC帧配置对象可用于排序的MSDUs传播序列。while循环完成接收处理当复制帧检测,最后删除接收机处理期间。对于丢失帧退化图像的质量。

WLAN包已成功解码时,发现序列号在命令窗口中显示为每个收到包。平衡的数据符号星座显示为每个收到包。

%接收的波形显示功率谱密度spectrumScope (burstCaptures);% Downsample接收到的信号rxWaveform =重新取样(burstCaptures fs, fs * osf);rxWaveformLen =大小(rxWaveform, 1);searchOffset = 0;%抵消从开始的波形样本%最低包长度是10 OFDM符号lstfLen =双(indLSTF (2));% L-STF的样本数量minPktLen = lstfLen * 5;pktInd = 1;sr = wlanSampleRate (nonHTcfg);%采样率fineTimingOffset = [];packetSeq = [];displayFlag = 0;%国旗显示解码信息%进行维生素与计算evmCalculator = comm.EVM (“AveragingDimensions”(1 2 3));evmCalculator。MaximumEVMOutputPort = true;%接收处理(searchOffset + minPktLen) < = rxWaveformLen%包检测pktOffset = wlanPacketDetect (rxWaveform chanBW searchOffset, 0.8);%调整包抵消pktOffset = searchOffset + pktOffset;如果isempty (pktOffset) | | (pktOffset +双(indLSIG (2)) > rxWaveformLen)如果pktInd = = 1 disp (“* *没有包发现* *”);结束打破;结束%提取non-HT字段和执行粗频率偏移校正%时间允许可靠的象征nonHT = rxWaveform (pktOffset + (indLSTF (1): indLSIG (2)),:);coarseFreqOffset = wlanCoarseCFOEstimate (nonHT chanBW);nonHT = frequencyOffset (fs, nonHT -coarseFreqOffset);%符号定时同步fineTimingOffset = wlanSymbolTimingEstimate (nonHT chanBW);%调整包抵消pktOffset = pktOffset + fineTimingOffset;%的时间同步完成:包检测和同步%提取non-HT序言场同步和之后%执行频率校正如果(pktOffset < 0) | | ((pktOffset + minPktLen) > rxWaveformLen) searchOffset = pktOffset + 1.5 * lstfLen;继续;结束流(“\ nPacket——% d发现指数% d \ n '、pktInd pktOffset + 1);%提取前7 OFDM符号的检测和数据格式% L-SIG解码nonHT = rxWaveform (pktOffset + (1:7 * Ns):);nonHT = frequencyOffset (fs, nonHT -coarseFreqOffset);%对同步和执行好频率偏移校正%粗校正序言字段lltf = nonHT (indLLTF (1): indLLTF (2):);%提取L-LTFfineFreqOffset = wlanFineCFOEstimate (lltf chanBW);nonHT = frequencyOffset (fs, nonHT -fineFreqOffset);cfoCorrection = coarseFreqOffset + fineFreqOffset;%总首席财务官%使用L-LTF信道估计lltf = nonHT (indLLTF (1): indLLTF (2):);demodLLTF = wlanLLTFDemodulate (lltf chanBW);chanEstLLTF = wlanLLTFChannelEstimate (demodLLTF chanBW);%噪声估计noiseVarNonHT = helperNoiseEstimate (demodLLTF);%数据包格式检测使用3立即OFDM符号% L-LTF后格式= wlanFormatDetect (nonHT (indLLTF (2) + (1:3 * Ns):),chanEstLLTF、noiseVarNonHT chanBW);disp ([' '格式“格式检测”]);如果~ strcmp(格式,“Non-HT”)流(”除了Non-HT格式已经检测到\ n”);searchOffset = pktOffset + 1.5 * lstfLen;继续;结束%恢复L-SIG字段位[recLSIGBits, failCheck] = wlanLSIGRecover (nonHT (indLSIG (1): indLSIG (2):),chanEstLLTF、noiseVarNonHT chanBW);如果failCheck流(“L-SIG检查失败\ n”);searchOffset = pktOffset + 1.5 * lstfLen;继续;其他的流(“L-SIG检查通过\ n”);结束基于解码L-SIG %检索包参数[lsigMCS, lsigLen rxSamples] = helperInterpretLSIG (recLSIGBits sr);如果(rxSamples + pktOffset) > (rxWaveform) disp(长度“* *没有足够的样本来解码包* *的);打破;结束% CFO校正应用于整个包rxWaveform (pktOffset + (1: rxSamples):) = frequencyOffset (rxWaveform (pktOffset + (1: rxSamples):), fs, -cfoCorrection);%创建一个接收Non-HT配置对象rxNonHTcfg = wlanNonHTConfig;rxNonHTcfg。MCS = lsigMCS;rxNonHTcfg。PSDULength = lsigLen;%得到PPDU中的数据字段索引indNonHTData = wlanFieldIndices (rxNonHTcfg,“NonHT-Data”);%恢复PSDU位使用数据包传输参数和通道%的估计L-LTF[rxPSDU, eqSym] = wlanNonHTDataRecover (rxWaveform (pktOffset +(indNonHTData (1): indNonHTData (2)),:),chanEstLLTF、noiseVarNonHT rxNonHTcfg);星座(重塑(eqSym [], 1));%当前的星座暂停(0);%让星座重画释放(星座);%发布之前的星座图refSym = wlanClosestReferenceSymbol (eqSym rxNonHTcfg);[evm.RMS,维生素。峰]= evmCalculator (refSym eqSym);% MPDU和提取MSDU解码[cfgMACRx msduList {pktInd},状态]= wlanMPDUDecode (rxPSDU rxNonHTcfg);% #好< * SAGROW >如果比较字符串(状态,“成功”)disp (MAC FCS检查通过的);%存储排序信息packetSeq (pktInd) = cfgMACRx.SequenceNumber;% MSDU转换为二进制数据流rxBit {pktInd} =重塑(de2bi (hex2dec (cell2mat (msduList {pktInd})), 8)”, [], 1);其他的%解码失败如果比较字符串(状态,“FCSFailed”)% FCS失败disp (“MAC FCS检查失败”);其他的% FCS通过但遇到其他解码失败disp (MAC FCS检查通过的);结束%因为没有重发建模在这个例子中,我们将%提取图像数据从MPDU (MSDU)和序列号,%即使FCS检查失败。%去除页眉和FCS。提取MSDU。macHeaderBitsLength = 24 * bitsPerOctet;fcsBitsLength = 4 * bitsPerOctet;msduList {pktInd} = rxPSDU (macHeaderBitsLength + 1: end-fcsBitsLength);%提取和存储序号sequenceNumStartIndex = 23 * bitsPerOctet + 1;sequenceNumEndIndex = 25 * bitsPerOctet - 4;packetSeq (pktInd) = bi2de (rxPSDU (sequenceNumStartIndex: sequenceNumEndIndex) ');% MSDU二进制数据流双(msduList rxBit {pktInd} = {pktInd});结束%显示解码信息如果displayFlag流('估计首席财务官:% 5.1 f赫兹\ n \ n”,cfoCorrection);% #好< UNRCH >disp (“解码L-SIG内容:”);流(“MCS: % d \ n”,lsigMCS);流(“长度:% d \ n”,lsigLen);流(包的样品数量:% d \ n \ n ',rxSamples);流(“维生素:\ n”);流('维生素与峰:% 0.3 f % %维生素与RMS: % 0.3 f % % \ n \ n ',evm.Peak evm.RMS);流(“解码MAC顺序控制字段内容:\ n”);流(“序列号:% d \ n”packetSeq (pktInd));结束%更新搜索索引searchOffset = pktOffset +双(indNonHTData (2));pktInd = pktInd + 1;%完成处理当检测到重复的包。的%恢复数据包括从复制帧比特如果长度(独特(packetSeq)) <长度(packetSeq)打破结束结束%释放sdrTransmitter和sdrReceiver对象的状态释放(sdrTransmitter);释放(sdrReceiver);

重建图像

从收到MAC帧图像重建。

如果~ (isempty (fineTimingOffset) | | isempty (pktOffset)) & &(numMSDUs = =(元素个数(packetSeq) 1))%去除重复了MAC的片段rxBitMatrix = cell2mat (rxBit);rxData = rxBitMatrix(1:结束,1:元素个数(packetSeq) 1);startSeq =找到(packetSeq = = 0);rxData = circshift (rxData, [0 - (startSeq (1) 1)));%为MAC片段%执行比特误码率(BER)计算bitErrorRate = comm.ErrorRate;呃= bitErrorRate(双(rxData (:)),txDataBits(1:长度(重塑(rxData [], 1))));流(' \ nBit错误率(BER): \ n”);流(的误比特率(BER) = % 0.5 f。\ n ',犯错(1));流(“有些错误的数量= % d。\ n”犯错(2));流(的传输比特数= % d。\ n \ n '长度(txDataBits));%从接收的数据重建图像流(“\ nConstructing形象从接收的数据。\ n”);decdata = bi2de(重塑(rxData(1:长度(txImage) * bitsPerOctet), 8日,[])');receivedImage = uint8(重塑(decdata imsize));%情节收到图片如果存在(“imFig”,“var”)& & ishandle (imFig)%如果Tx图是开放的图(imFig);次要情节(212);其他的图;次要情节(212);结束imshow (receivedImage);标题(sprintf (收到图片的));结束

尝试的东西

你可以修改sdrTransmittertxGain获得观察维生素和误码率的差异后信号的接收和处理。你也应该能够看到任何错误显示,收到图片。试着改变比例因子规模到0.5。这应该提高接收到的图像的质量产生更多的传输比特。这也应该增加PPDUs传播的数量。

故障排除

一般的技巧特别提款权故障诊断硬件和通信工具箱支持包ADALM-PLUTO广播中可以找到金宝app常见问题和修复

选定的参考书目

  1. -2020年IEEE Std 802.11™。IEEE标准信息技术——之间的通信和信息交换系统-本地和市区网络特定需求-第11部分:无线局域网介质访问控制(MAC)和物理层规范(体育)。