SkillAgentSearch skills...

matlab-generate-wlan-waveform

Generate standard-compliant IEEE 802.11 waveforms using MATLAB WLAN Toolbox

Install / Use

npx skills add matlab/matlab-agentic-toolkit --skill matlab-generate-wlan-waveform

Installs into whichever agent you are using.

About this skill
📄

SKILL.md

Installable skill definition

Quality Score

90/100

Supported Platforms

Universal

Tags

Our assessment of matlab-generate-wlan-waveform

matlab-generate-wlan-waveform scores 90/100 on our quality scale, 1432nd of 4,620 Development & Engineering skills we index (top 31%).

Its SKILL.md is 21 KB long, well organised into 29 sections with 8 code examples: a thorough specification that gives an agent plenty to work with.

With 1,098 GitHub stars, it is one of the more widely adopted skills in the catalogue.

Substance
30/30
Structure
20/20
Description
12/15
Adoption
13/20
Freshness
15/15

Maintenance, license and trust

  • The repository was last updated 20 days ago, so matlab-generate-wlan-waveform is actively maintained.
  • No license is declared. By default that means all rights are reserved: you can read it, but reusing or redistributing it is not clearly permitted. Ask the author before building on it commercially.
  • Its trust signals score 88/100, with 1 caution from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.

matlab-generate-wlan-waveform compared with similar skills

All 4 of these similar skills score higher than matlab-generate-wlan-waveform; compare them before choosing.

SkillScoreStarsUpdatedFormat
matlab-generate-wlan-waveform (this skill)by matlab901.1k20d agoSKILL.md
ai-job-searchby MadsLorentzen10045.0k2d agoCLAUDE.md
claude-howtoby luongnv8910041.8k5d agoCLAUDE.md
algorithmic-artby anthropics100177.9k13d agoSKILL.md
pptxby anthropics100177.9k13d agoSKILL.md

Frequently asked questions

How do I install matlab-generate-wlan-waveform?
Run npx skills add matlab/matlab-agentic-toolkit --skill matlab-generate-wlan-waveform. The install tabs above show the steps for each supported agent.
Which AI agents does matlab-generate-wlan-waveform work with?
It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
Is matlab-generate-wlan-waveform safe to use?
It declares no license and scores 88/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
Is matlab-generate-wlan-waveform still maintained?
The repository was last updated 20 days ago, so matlab-generate-wlan-waveform is actively maintained.

name: matlab-generate-wlan-waveform description: > Generate standard-compliant IEEE 802.11 waveforms using MATLAB WLAN Toolbox. Use when creating WLAN waveforms, PPDU packets, or the transmit side of a link-level simulation. Covers all formats: Non-HT (802.11a/g), HT (802.11n), VHT (802.11ac), HE-SU/HE-MU/HE-TB (802.11ax), EHT-MU/EHT-TB (802.11be), UHR-MU/UHR-TB/UHR-ELR (802.11bn). Handles single-user, MU-MIMO, OFDMA, trigger-based uplink, extended range, preamble puncturing, UEQM, and DRU. Use when asked to generate test waveforms, create packets with MAC frames, configure OFDMA resource units, build trigger-based uplink transmissions, target a specific transmit duration, or build multi-packet waveforms. license: https://www.mathworks.com/content/dam/mathworks/license/pmrl/license.md metadata: author: MathWorks version: "1.0"

Generate WLAN Waveforms

Generate standard-compliant IEEE 802.11 waveforms for device testing, link-level simulation, or signal analysis. This skill covers the transmit chain: configure the PHY format, size the payload, generate the time-domain IQ waveform, and plot.

When to Use

  • Generating WLAN/Wi-Fi test waveforms for any 802.11 standard
  • Creating the transmit side of a link-level simulation
  • Building packets with specific MAC frame types (Data, Block Ack, Beacon, etc.)
  • Configuring OFDMA resource unit allocations (HE-MU, EHT-MU, or UHR-MU)
  • Configuring MU-MIMO transmissions (VHT, HE, EHT, UHR)
  • UHR features: UEQM (per-stream MCS), DRU, LDPC2x, ELR (enhanced long range)
  • Targeting a specific packet duration or transmit time

When NOT to Use

  • Channel modeling, receiver processing, EVM/spectral mask — not covered
  • Non-WLAN waveforms (5G NR, LTE, Bluetooth)

UHR (802.11bn) requires R2026a or later. If the user requests a UHR waveform and their release is older, inform them that UHR support was introduced in R2026a and recommend upgrading.

Workflow

Every waveform generation follows this pipeline:

  1. Select format → create the config object (see Format Selection)
  2. Configure PHY → set bandwidth, MCS, spatial streams, antennas
  3. Size the payload → set PSDU/APEP length directly or from a target duration
  4. Create payload bits → random bits or MAC frame via wlanMACFrame
  5. Generate waveform → wlanWaveformGenerator(bits, cfg)
  6. Plot and verify → time-domain magnitude, showAllocation for HE/EHT/UHR configs

Format Selection

| Standard | Marketing | Config Object | Users | |----------|-----------|---------------|-------| | 802.11b | Wi-Fi 1 | wlanNonHTConfig (DSSS) | SU only | | 802.11a/g | Wi-Fi 1/3 | wlanNonHTConfig | SU only | | 802.11n | Wi-Fi 4 | wlanHTConfig | SU only | | 802.11ac | Wi-Fi 5 | wlanVHTConfig | SU or MU-MIMO | | 802.11ax | Wi-Fi 6 | wlanHESUConfig | SU only | | 802.11ax | Wi-Fi 6 | wlanHESUConfig (ExtendedRange) | SU — extended range | | 802.11ax | Wi-Fi 6 | wlanHEMUConfig(allocIdx) | OFDMA and/or MU-MIMO | | 802.11ax | Wi-Fi 6 | wlanHETBConfig | SU uplink (trigger-based) | | 802.11be | Wi-Fi 7 | wlanEHTMUConfig(allocIdx) | OFDMA and/or MU-MIMO / MRU | | 802.11be | Wi-Fi 7 | wlanEHTMUConfig("CBW...") | Non-OFDMA MU-MIMO (full-band RU) | | 802.11be | Wi-Fi 7 | wlanEHTMUConfig("CBW...", EHTDUPMode=true) | SU — DUP mode (MCS 14 only) | | 802.11be | Wi-Fi 7 | wlanEHTTBConfig | SU uplink (trigger-based) | | 802.11bn | Wi-Fi 8 | uhrMUConfig(allocIdx) | OFDMA / MU-MIMO / UEQM (example helpers) | | 802.11bn | Wi-Fi 8 | uhrMUConfig("CBW...") | Non-OFDMA MU-MIMO (example helpers) | | 802.11bn | Wi-Fi 8 | uhrTBConfig | SU uplink / DRU (example helpers) | | 802.11bn | Wi-Fi 8 | uhrELRConfig | SU enhanced long range (example helpers) |

For OFDMA formats (HE-MU, EHT-MU), the constructor takes allocation indices, not RU sizes. See references/he-allocation-indices.md and references/eht-allocation-indices.md.

UHR (802.11bn / Wi-Fi 8) uses example helper files, not built-in toolbox objects. Copy helpers into the script's working folder with setupExample("wlan/UHRParameterizationExample", scriptFolder). UHR supports UEQM (per-stream MCS), DRU, LDPC2x, ELR (enhanced long range), and new MCS values (15-23). Same allocation indices as EHT. See references/uhr-waveform-generation.md.

See Critical Rules for format-specific constraints (allocation index schemes, HT MCS encoding, DSSS properties).

EHT DUP mode duplicates the signal across subchannels for robust coverage. Set at construction: wlanEHTMUConfig("CBW80", EHTDUPMode=true). Constraints: MCS 14 (BPSK-DCM) only, single user, 1 spatial stream, no puncturing, 80/160/320 MHz. EHTDUPMode is read-only after construction.

Duration Targeting

Calculate payload size from target duration. All values are integer microseconds.

| Config | Function | Example | |--------|----------|---------| | wlanNonHTConfig | wlanPSDULength(cfg, 'TxTime', us) | cfg.PSDULength = wlanPSDULength(cfg, 'TxTime', 500); | | wlanHTConfig | wlanPSDULength(cfg, 'TxTime', us) | cfg.PSDULength = wlanPSDULength(cfg, 'TxTime', 1000); | | wlanVHTConfig (SU only) | wlanAPEPLength(cfg, 'TxTime', us) | cfg.APEPLength = wlanAPEPLength(cfg, 'TxTime', 2000); | | wlanHESUConfig | wlanAPEPLength(cfg, 'TxTime', us) | cfg.APEPLength = wlanAPEPLength(cfg, 'TxTime', 3000); | | wlanEHTMUConfig (SU non-OFDMA) | wlanAPEPLength(cfg, 'TxTime', us) | cfg.User{1}.APEPLength = wlanAPEPLength(cfg, 'TxTime', 1000); | | Any MU/OFDMA config | Iterative transmitTime loop | See below — wlanAPEPLength errors on MU/OFDMA |

Duration argument is integer microseconds, not seconds. Pass 2000, not 2e-3.

MU Duration Targeting (iterative)

For any MU config (homogeneous users — same MCS, RU size, and spatial streams):

targetDuration = 1e-3; apepLen = 2000; % initial guess
for iter = 1:10
    for u = 1:numUsers, cfg.User{u}.APEPLength = apepLen; end
    txTime = transmitTime(cfg);
    if abs(txTime - targetDuration)/targetDuration < 0.01, break; end
    apepLen = round(apepLen * targetDuration / txTime);
end

Heterogeneous users (different MCS/RU/STS): Lowest-capacity user sets duration. Set per-user APEPLength based on traffic demand; use transmitTime(cfg).

PSDU Length Access

The way to get PSDU length varies by format. Using the wrong pattern throws errors.

| Config | How to get PSDU length | Notes | |--------|----------------------|-------| | wlanNonHTConfig | cfg.PSDULength | Settable property | | wlanHTConfig | cfg.PSDULength | Settable property | | wlanVHTConfig | cfg.PSDULength | Read-only property (derived from APEPLength). Vector for MU. | | wlanHESUConfig | getPSDULength(cfg) | Method call. Not a property. | | wlanHEMUConfig | getPSDULength(cfg) | Method call. Returns vector (one per user). | | wlanHETBConfig | getPSDULength(cfg) | Method call. Same as HE-SU/HE-MU. | | wlanEHTMUConfig | psduLength(cfg) | Different method name from HE. Returns vector. | | wlanEHTTBConfig | psduLength(cfg) | Same method name as EHT-MU. |

getPSDULength and psduLength are not interchangeable. HE uses getPSDULength. EHT uses psduLength.

Key Functions

| Function | Purpose | |----------|---------| | wlanWaveformGenerator(bits, cfg) | Generate time-domain IQ waveform | | wlanSampleRate(cfg) | Get sample rate for the configuration — always use this | | wlanHETBConfig | Configure HE trigger-based uplink (single STA) | | wlanEHTTBConfig | Configure EHT trigger-based uplink (single STA) | | wlanMACFrame(payload, cfgMAC) | Generate MAC frame bits (see references/mac-frame-properties.md) | | wlanAPEPLength(cfg, 'TxTime', us) | APEP length for target duration (VHT-SU, HE-SU, EHT-MU single-user) | | wlanPSDULength(cfg, 'TxTime', us) | PSDU length for target duration (NonHT/HT) | | transmitTime(cfg) or transmitTime(cfg, 'microseconds') | Get transmit time — use unit argument instead of * 1e6 | | showAllocation(cfg) or showAllocation(cfg, ax) | Plot RU allocation — pass axes handle to embed in tiledlayout | | ruInfo(cfg) | Query RU sizes, indices, user counts |

If you need to verify property names, check valid values for a config object, or look up parameters not covered in this skill, consult the online documentation links in references/documentation-links.md.

Patterns

Single-User Waveform with Target Duration

cfg = wlanVHTConfig;
cfg.ChannelBandwidth = 'CBW80';
cfg.MCS = 9;
cfg.NumTransmitAntennas = 4;
cfg.NumSpaceTimeStreams = 4;
cfg.SpatialMapping = 'Fourier';

% Size payload for 2 ms transmit time
cfg.APEPLength = wlanAPEPLength(cfg, 'TxTime', 2000);

% Generate waveform: 3 packets, 20 us idle
psduBits = randi([0 1], cfg.PSDULength * 8, 1);
waveform = wlanWaveformGenerator(psduBits, cfg, ...
    'NumPackets', 3, 'IdleTime', 20e-6);

fs = wlanSampleRate(cfg);

DSSS (802.11b) Waveform

cfg = wlanNonHTConfig;
cfg.Modulation = 'DSSS';
cfg.DataRate = '11Mbps';   % '1Mbps', '2Mbps', '5.5Mbps', or '11Mbps'
cfg.PSDULength = 1000;

psduBits = randi([0 1], cfg.PSDULength * 8, 1);
waveform = wlanWaveformGenerator(psduBits, cfg);
fs = wlanSampleRate(cfg);  % 11 MHz (chip rate)

HE-MU OFDMA Waveform

For OFDMA, the constructor takes allocation indices per 20 MHz subchannel. Read references/he-allocation-indices.md for the full index-to-RU mapping.

% 80 MHz, four 242-tone RUs (index 192 = one 242-tone RU per subchannel)
cfg = wlanHEMUConfig([192 192 192 192]);
cfg.NumTransmitAntennas = 4;

% Configure per-user parameters
for u = 1:4
    cfg.User{u}.MCS = u + 6;               % MCS 7, 8, 9, 10
    cfg.User{u}.NumSpaceTimeStreams = 1;
    cfg.User{u}.APEPLength = 4000;
    cfg.User{u}.ChannelCoding = 'LDPC';
end

% Use Fourier spatial mapping when NumSTS < NumTransmitAntennas per RU
for r = 1:numel(cfg.RU)
    cfg.RU{r}.SpatialMapping = 'Fourier';
end

% Generate PSDU bits per user
psduLen = getPSDULength(cfg);
txData = cell(1, numel(psduLen));
for u = 1:numel(psduLen)
    txData{u} = randi([0 1], psduLen(u) * 8, 1);
end

waveform = wlanWaveformGenerator(txData, cfg);
showAllocation(cfg);

Common HE allocation indices (per 20 MHz subchannel):

| Index | RU Layout | Users | |-------|-----------|-------| | 0 | Nine 26-tone | 9 | | 96 | Two 106-tone | 2 | | 112 | Four 52-tone | 4 | | 192 | One 242-tone | 1 | | 193 | One 242-tone | 2 (MU-MIMO) | | 200 | One 484-tone (40 MHz pair) | 1 | | 208 | One 996-tone (80 MHz quad) | 1 |

For 40 MHz, provide 2 indices. For 80 MHz, provide 4. For 160 MHz, provide 8.

EHT-MU OFDMA Waveform (with MRU)

EHT allocation indices support Multi-Resource Units (MRU) — non-contiguous tone blocks assigned to a single user. Read references/eht-allocation-indices.md for the full mapping.

% 80 MHz: 484+242 MRU on subchannels 1-3, 106+26+106 on subchannel 4
% Index 120 = 484+242 MRU (1 MU-MIMO user), 29/28 = continuation, 25 = 106+26+106
cfg = wlanEHTMUConfig([120 29 28 25]);
cfg.NumTransmitAntennas = 2;

% Set APEPLength appropriate to RU size (26-tone RUs have low throughput)
apepPerUser = [2000, 500, 100, 500]; % MRU, 106-tone, 26-tone, 106-tone
mcsPerUser  = [7, 4, 2, 4];
for u = 1:numel(cfg.User)
    cfg.User{u}.APEPLength = apepPerUser(u);
    cfg.User{u}.MCS = mcsPerUser(u);
    cfg.User{u}.NumSpaceTimeStreams = 1;
    cfg.User{u}.ChannelCoding = 'LDPC';
end

for r = 1:numel(cfg.RU)
    cfg.RU{r}.SpatialMapping = 'Fourier';
end

% EHT uses psduLength(), NOT getPSDULength()
psduLens = psduLength(cfg);
txData = cell(1, numel(psduLens));
for u = 1:numel(psduLens)
    txData{u} = randi([0 1], psduLens(u) * 8, 1);
end

waveform = w

Truncated for display — read the full file on GitHub.

Related Skills

View on GitHub
GitHub Stars1.1k
CategoryDevelopment
Updated20d ago
Forks134

Languages

MATLAB

Trust signals

88/100

From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.

1 medium