function plotDMGWaveform(x,cfgDMG,varargin)
%plotDMGWaveform Displays a DMG waveform with the fields highlighted
%
% plotDMGWaveform(X,CFGDMG) displays the magnitude of a DMG waveform X
% and a configuration CFGDMG. Individual fields are highlighted.
%
% X is a complex column vector containing the waveform. The waveform is
% assumed to begin at the first element of the vector.
%
% CFGDMG is a DMG format configuration object.
%
% plotDMGWaveform(X,CFGDMG,TITLE) optionally plots the waveform with a
% custom title. TITLE is a character array.
% Copyright 2016-2019 The MathWorks, Inc.
narginchk(2,3);
if nargin>2
titlestr = varargin{1};
else
titlestr = 'Waveform with Highlighted Fields';
end
sr = wlanSampleRate(cfgDMG);
txTime = (numel(x)/sr)*1e6; % Duration to plot in microseconds
tick = (1/sr)*1e6; % Microseconds per sample
hf = figure;
hp = plot(0:tick:txTime-tick,abs(x(1:round(txTime*sr*1e-6),:)));
cy = ylim(gca);
ylim(gca,[cy(1) cy(2)+1]);
ylabel('Magnitude (V)');
xlabel('Time (microseconds)');
title(titlestr);
dmgPlotFieldColored(cfgDMG,hf,hp,0); % 5 us offset for plot
end
% Overlays field names on a plot
function dmgPlotFieldColored(cfg,hf,hp,varargin)
narginchk(3,4);
offset = 0;
if nargin>3
offset = varargin{1};
end
% Field durations in Microseconds
Fs = wlanSampleRate(cfg);
ind = wlanFieldIndices(cfg);
Tstf = double((ind.DMGSTF(2)-ind.DMGSTF(1))+1)/Fs*1e6;
Tce = double((ind.DMGCE(2)-ind.DMGCE(1))+1)/Fs*1e6;
Theader = double((ind.DMGHeader(2)-ind.DMGHeader(1))+1)/Fs*1e6;
Tdata = double((ind.DMGData(2)-ind.DMGData(1))+1)/Fs*1e6;
Tagc = double((ind.DMGAGC(2)-ind.DMGAGC(1))+1)/Fs*1e6;
Tagcsf = double((ind.DMGAGCSubfields(1,2)-ind.DMGAGCSubfields(1,1))+1)/Fs*1e6;
Ttrn = double((ind.DMGTRN(2)-ind.DMGTRN(1))+1)/Fs*1e6;
Ttrnsf = double((ind.DMGTRNSubfields(1,2)-ind.DMGTRNSubfields(1,1))+1)/Fs*1e6;
N = cfg.TrainingLength/4;
figure(hf);
ax = gca;
hold(ax,'on');
legendTxt = [];
lh = [];
% Set first color to use for plotting
ListColors = colorcube(64);
colidx = 39; % Start within the color map
xlimits = xlim(ax);
Tcum = 0;
if offset<Tstf
% STF
legendTxt = [legendTxt {'STF'}];
plotLine(Tstf);
if Tstf>=xlimits(2)
return
end
end
Tcum = Tstf;
if offset<(Tstf+Tce)
% CE
legendTxt = [legendTxt {'CE'}];
plotLine(Tce);
if (Tcum+Tce)>=xlimits(2)
return
end
end
Tcum = double(ind.DMGCE(2))/Fs*1e6;
if offset<(Tcum+Theader)
% Header
legendTxt = [legendTxt {'Header'}];
plotLine(Theader);
if (Tcum+Theader)>=xlimits(2)
return
end
end
Tcum = double(ind.DMGHeader(2))/Fs*1e6;
if offset<(Tcum+Tdata)
% Data
legendTxt = [legendTxt {'Data'}];
plotLine(Tdata);
if (Tcum+Tdata)>=xlimits(2)
return
end
end
Tcum = double(ind.DMGData(2))/Fs*1e6;
if offset<(Tcum+Tagc)
% AGC
for i = 1:N*4
if (Tcum+i*Tagcsf)>=xlimits(2)
return
end
legendTxt = [legendTxt {['AGC-SF' num2str(i)]}]; %#ok<AGROW>
plotLine(Tagcsf);
Tcum = double(ind.DMGAGCSubfields(i,2))/Fs*1e6;
end
end
if offset<(Tcum+Ttrn)
% TRN
for i = 1:N*5
if mod(i-1,5)==0
% TRN-CE
if (Tcum+Tce)>=xlimits(2)
return
end
legendTxt = [legendTxt {'TRN-CE'}]; %#ok<AGROW>
plotLine(Tce);
trnCEIdx = mod(i-1,5)+(i-1)/5+1;
Tcum = double(ind.DMGTRNCE(trnCEIdx,2))/Fs*1e6;
else
% TRN-SF
if (Tcum+Ttrnsf)>=xlimits(2)
return
end
trnSFIdx = mod(i-1,5)+floor((i-1)/5)*4;
legendTxt = [legendTxt {['TRN-SF' num2str(trnSFIdx)]}]; %#ok<AGROW>
plotLine(Ttrnsf);
Tcum = double(ind.DMGTRNSubfields(trnSFIdx,2))/Fs*1e6;
end
end
end
hold(ax,'off');
xlim([offset xlimits(2)]);
legend(lh,legendTxt,'location','best')
delete(hp) % Remove original waveform from plot
function plotLine(Tfield)
% Get portion of waveform for current field and replot it with desired
% color
a = get(ax,'children');
replotIdx = (a(end).XData>=Tcum)&(a(end).XData<(Tcum+Tfield));
col = ListColors(mod(colidx,size(ListColors,1))+1,:); % Get color
hl = plot(a(end).XData(replotIdx),a(end).YData(replotIdx),'Color',col);
colidx = colidx+1; % Increment color index for next field
lh = [lh hl]; % Store handle for legend
% Plot field boundary line
plot(ax,[Tcum+Tfield Tcum+Tfield],ylim(gca),'k:');
end
end
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
一、前言 本示例说明如何使用WLAN工具箱和相控阵系统工具箱对带有相控阵的IEEE 802.11ad DMG波形进行波束成形。 二、介绍 IEEE 802.11ad 定义了工作在 60 GHz 的定向千兆位 (DMG) 传输格式。为了克服在 60 GHz 下遇到的大路径损耗,IEEE 802.11ad 标准旨在支持定向波束成形。通过使用相控天线阵列,您可以应用天线权重矢量 (AWV) 将天线方向图聚焦在所需方向。每个数据包在所有阵列元素上传输,但 AWV 对每个元素应用相移以控制传输。通过将可选的训练字段附加到DMG数据包,并在发射器或接收器上测试不同的AWV,可以提高通信链路的质量。这个过程称为光束细化。 DMG 数据包由以下字段组成: 1. STF - 用于同步的短训练场。 2. CE - 通道估计字段,用于通道估计。 3. 标头 - 接收方解码以确定传输参数的信令字段。 4. 数据 - 数据字段,承载用户数据负载。 5. AGC 子场 - 可选的自动增益控制 (AGC) 子场,用于光束细化。 6. 训练子字段 - 可选的训练子字段,用于光束细化。 STF 和 CE 字段构成前导码
资源推荐
资源详情
资源评论
收起资源包目录
使用波束成形生成 802.11ad 波形.rar (4个子文件)
使用波束成形生成 802.11ad 波形
DMGFields.png 43KB
DMGWaveformGenerationWithBeamformingExample.mlx 42KB
plotDMGWaveform.m 4KB
plotArrayResponse.m 701B
共 4 条
- 1
资源评论
- Notunfortunate2024-03-12资源内容详细全面,与描述一致,对我很有用,有一定的使用价值。
- CSI小菜鸟2024-04-25感谢资源主的分享,很值得参考学习,资源价值较高,支持!
珞瑜·
- 粉丝: 12w+
- 资源: 500
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功