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-waveformInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
Development & EngineeringSupported Platforms
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.
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.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| matlab-generate-wlan-waveform (this skill)by matlab | 90 | 1.1k | 20d ago | SKILL.md |
| ai-job-searchby MadsLorentzen | 100 | 45.0k | 2d ago | CLAUDE.md |
| claude-howtoby luongnv89 | 100 | 41.8k | 5d ago | CLAUDE.md |
| algorithmic-artby anthropics | 100 | 177.9k | 13d ago | SKILL.md |
| pptxby anthropics | 100 | 177.9k | 13d ago | SKILL.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.
Skill content
View source on GitHubname: 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:
- Select format → create the config object (see Format Selection)
- Configure PHY → set bandwidth, MCS, spatial streams, antennas
- Size the payload → set PSDU/APEP length directly or from a target duration
- Create payload bits → random bits or MAC frame via
wlanMACFrame - Generate waveform →
wlanWaveformGenerator(bits, cfg) - Plot and verify → time-domain magnitude,
showAllocationfor 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
ai-job-search
45.0kThe job search that runs on your machine. AI job application framework built on Claude Code: evaluate postings, tailor CVs, write cover letters, prep interviews. Fork it and own it.
claude-howto
41.8kA visual, example-driven guide to Claude Code — from basic concepts to advanced agents, with copy-paste templates that bring immediate value.
algorithmic-art
177.9kCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems.
pptx
177.9kUse this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an em…
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
