104 lines
3.0 KiB
Matlab
104 lines
3.0 KiB
Matlab
addpath("from_matlab_example");
|
|
|
|
rxFrame1 = trace1.iq(:);
|
|
rxFrame2 = trace2.iq(:);
|
|
rxFrame3 = trace3.iq(:);
|
|
rxFrame4 = trace4.iq(:);
|
|
|
|
beaconFrames1 = extractBeaconFrames(rxFrame1);
|
|
beaconFrames2 = extractBeaconFrames(rxFrame2);
|
|
beaconFrames3 = extractBeaconFrames(rxFrame3);
|
|
beaconFrames4 = extractBeaconFrames(rxFrame4);
|
|
|
|
cfgMAC = beaconFrames1(1).MAC_Config;
|
|
mgmt = cfgMAC.ManagementConfig;
|
|
|
|
disp(mgmt)
|
|
properties(mgmt)
|
|
|
|
printBeaconTable(beaconFrames1);
|
|
printBeaconTable(beaconFrames2);
|
|
printBeaconTable(beaconFrames3);
|
|
printBeaconTable(beaconFrames4);
|
|
|
|
function beaconFrames = extractBeaconFrames(rxFrame)
|
|
beaconFrames = struct( ...
|
|
"SSID", {}, ...
|
|
"BSSID", {}, ...
|
|
"Offset", {}, ...
|
|
"MAC_Config", {}, ...
|
|
"Bits", {}, ...
|
|
"SNR_dB", {} ...
|
|
);
|
|
|
|
channel_bandwidth = "CBW20"; % 20MHz
|
|
|
|
searchOffset = 0;
|
|
index = 1;
|
|
|
|
while searchOffset < length(rxFrame)
|
|
oldOffset = searchOffset;
|
|
[bitsData, decParams, searchOffset, res] = recoverOFDMBits(rxFrame, searchOffset);
|
|
|
|
if searchOffset <= oldOffset
|
|
searchOffset = oldOffset + 1;
|
|
end
|
|
|
|
if isempty(bitsData)
|
|
continue;
|
|
end
|
|
|
|
[cfgMAC, ~, decodeStatus] = wlanMPDUDecode(bitsData, SuppressWarnings=true);
|
|
|
|
if ~decodeStatus && matches(cfgMAC.FrameType, "Beacon")
|
|
if isempty(cfgMAC.ManagementConfig.SSID)
|
|
ssid = "Hidden";
|
|
else
|
|
ssid = string(cfgMAC.ManagementConfig.SSID);
|
|
end
|
|
|
|
if isfield(res, "PacketOffset")
|
|
beaconFrames(index).Offset = res.PacketOffset;
|
|
else
|
|
beaconFrames(index).Offset = oldOffset;
|
|
end
|
|
|
|
if isfield(res, "LLTFSNR")
|
|
beaconFrames(index).SNR_dB = res.LLTFSNR;
|
|
else
|
|
beaconFrames(index).SNR_dB = NaN;
|
|
end
|
|
|
|
beaconFrames(index).SSID = ssid;
|
|
beaconFrames(index).BSSID = string(cfgMAC.Address3);
|
|
beaconFrames(index).MAC_Config = cfgMAC;
|
|
beaconFrames(index).Bits = bitsData;
|
|
|
|
index = index + 1;
|
|
end
|
|
end
|
|
end
|
|
|
|
function printBeaconTable(beaconFrames)
|
|
fprintf("\n");
|
|
fprintf("%-20s %-18s %-10s %-8s %-8s %-8s %-12s %-8s %-20s\n", ...
|
|
"SSID", "BSSID", "Interval", "B. ch.", "Op. ch.", "SNR", "Vendor", "Std.", "Rates");
|
|
|
|
for i = 1:numel(beaconFrames)
|
|
ssid = string(beaconFrames(i).SSID);
|
|
bssid = string(beaconFrames(i).BSSID);
|
|
interval = string(beaconFrames(i).MAC_Config.ManagementConfig.BeaconInterval);
|
|
snr = sprintf("%.1f", beaconFrames(i).SNR_dB);
|
|
|
|
bch = "-";
|
|
opch = "-";
|
|
vendor = "-";
|
|
std = "-";
|
|
rates = "-";
|
|
|
|
fprintf("%-20s %-18s %-10s %-8s %-8s %-8s %-12s %-8s %-20s\n", ...
|
|
ssid, bssid, interval, bch, opch, snr, vendor, std, rates);
|
|
end
|
|
|
|
fprintf("\n");
|
|
end |