Contenuto principale

Update Code for VHT Reception

If your code contains legacy functions for very high-throughput (VHT) reception, you can replace them with functions that support separate reception operations. (since R2026a)

Differences Between the Legacy and Replacement Functions

Updating the legacy functions requires you to configure additional specifications for the replacement functions.

  • The wlanVHTSIGARecover function's first input is a time-domain signal that contains the very high-throughput signal A (VHT-SIG-A) field of a VHT transmission. The function performs demodulation, pilot error tracking, equalization, and data bit recovery in one call. The replacement functions wlanVHTDemodulate, wlanVHTTrackPilotError, wlanVHTEqualize, and wlanVHTSIGABitRecover handle the four steps separately. When you use the first three replacement functions, you must specify the field input as "VHT-SIG-A".

  • The wlanVHTLTFDemodulate function's first input is a time-domain signal that contains the very high-throughput long training field (VHT-LTF) of a VHT transmission. The first input of its replacement, wlanVHTDemodulate, is a time-domain signal that can correspond to any field of a VHT transmission. The additional input field specifies the field that the function demodulates.

  • The wlanVHTSIGBRecover function's first input is a time-domain signal that contains the very high-throughput signal B (VHT-SIG-B) field of a VHT transmission. The function performs demodulation, pilot error tracking, equalization, and data bit recovery in one call. The replacement functions wlanVHTDemodulate, wlanVHTTrackPilotError, wlanVHTEqualize, and wlanVHTSIGBBitRecover handle the four steps separately. When you use the first three replacement functions, you must specify the field input as "VHT-SIG-B".

  • The wlanVHTDataRecover function's first input is a time-domain signal that contains the data field of a VHT transmission. The function performs demodulation, pilot error tracking, equalization, and data bit recovery in one call. The replacement functions wlanVHTDemodulate, wlanVHTTrackPilotError, wlanVHTEqualize, and wlanVHTDataBitRecover handle the four steps separately. When you use the first three replacement functions, you must specify the field input as "VHT-Data".

Examples of Code Updates

Here are some examples that show how to update legacy code. These examples assume you have:

  • Created a wlanVHTConfig object called cfg

  • Used the wlanWaveformGenerator function to create a time-domain waveform called tx with cfg and data bits bits

  • Obtained appropriate channel and noise estimates, called chEst and noiseEst respectively

Function to Be ReplacedLegacy CodeUpdated Code
wlanVHTSIGARecover
field = "VHT-SIG-A";
ind = wlanFieldIndices(cfg,field);
tx = tx(ind(1):ind(2),:);
[rxBits,failCRC,sym,cpe] = wlanVHTSIGARecover(tx,chEst,noiseEst,cfg);
field = "VHT-SIG-A";
ind = wlanFieldIndices(cfg,field);
tx = tx(ind(1):ind(2),:);
demodSIGA = wlanVHTDemodulate(tx,field,cfg);
[trackedSym,cpe,ae] = wlanVHTTrackPilotError(demodSIGA,chEst,cfg,field);
[sym,csi] = wlanVHTEqualize(trackedSym,chEst,noiseEst,cfg,field);
[rxBits,failCRC] = wlanVHTSIGABitRecover(sym,noiseEst,csi);
wlanVHTLTFDemodulate
field = "VHT-LTF";
ind = wlanFieldIndices(cfg,field);
tx = tx(ind(1):ind(2),:);
sym = wlanVHTLTFDemodulate(tx,cfg);
field = "VHT-LTF";
ind = wlanFieldIndices(cfg,field);
tx = tx(ind(1):ind(2),:);
sym = wlanVHTDemodulate(rx,field,cfg);
wlanVHTSIGBRecover (single user)
field = "VHT-SIG-B";
ind = wlanFieldIndices(cfg,field);
tx = tx(ind(1):ind(2),:);
[rxBits,sym,cpe] = wlanVHTSIGBRecover(tx,chEst,noiseEst,cfg);
field = "VHT-SIG-B";
ind = wlanFieldIndices(cfg,field);
tx = tx(ind(1):ind(2),:);
demodSIGB = wlanVHTDemodulate(tx,field,cfg);
[trackedSym,cpe,ae] = wlanVHTTrackPilotError(demodSIGB,chEst,cfg,field);
[sym,csi] = wlanVHTEqualize(trackedSym,chEst,noiseEst,cfg,field);
rxBits = wlanVHTSIGBBitRecover(sym,noiseEst,csi,cfg);
wlanVHTDataRecover (single user)
field = "VHT-Data";
ind = wlanFieldIndices(cfg,field);
tx = tx(ind(1):ind(2),:);
[rxBits,vhtsigbCRC,sym,cpe,ae] = wlanVHTDataRecover(tx,chEst,noiseEst,cfg);
field = "VHT-Data";
ind = wlanFieldIndices(cfg,field);
tx = tx(ind(1):ind(2),:);
demodData = wlanVHTDemodulate(tx,field,cfg);
[trackedSym,cpe,ae] = wlanVHTTrackPilotError(demodData,chEst,cfg,field);
[sym,csi] = wlanVHTEqualize(trackedSym,chEst,noiseEst,cfg,field);
[rxBits,vhtsigbCRC] = wlanVHTDataBitRecover(sym,noiseEst,csi,cfg,LDPCDecodingMethod="bp");
wlanVHTSIGBRecover (multi-user)
field = "VHT-SIG-B";
ind = wlanFieldIndices(cfg,field);
tx = tx(ind(1):ind(2),:);
[rxBits,sym,cpe] = wlanVHTSIGBRecover(tx,chEst,noiseEst,cfg,userIdx,numSTS);
field = "VHT-SIG-B";
ind = wlanFieldIndices(cfg,field);
tx = tx(ind(1):ind(2),:);
demodSIGB = wlanVHTDemodulate(tx,field,cfg);
[trackedSym,cpe,ae] = wlanVHTTrackPilotError(demodSIGB,chEst,cfg,field);
cfg.NumSpaceTimeStreams = numSTS;
[sym,csi] = wlanVHTEqualize(trackedSym,chEst,noiseEst,cfg,field,userIdx);
rxBits = wlanVHTSIGBBitRecover(sym,noiseEst,csi,cfg);
wlanVHTDataRecover (multi-user)
field = "VHT-Data";
ind = wlanFieldIndices(cfg,field);
tx = tx(ind(1):ind(2),:);
[rxBits,vhtsigbCRC,sym,cpe,ae] = wlanVHTDataRecover(tx,chEst,noiseEst,cfg,userIdx,numSTS);
field = "VHT-Data";
ind = wlanFieldIndices(cfg,field);
tx = tx(ind(1):ind(2),:);
demodData = wlanVHTDemodulate(tx,field,cfg);
[trackedSym,cpe,ae] = wlanVHTTrackPilotError(demodData,chEst,cfg,field);
cfg.NumSpaceTimeStreams = numSTS;
[sym,csi] = wlanVHTEqualize(trackedSym,chEst,noiseEst,cfg,field,userIdx);
[rxBits,vhtsigbCRC] = wlanVHTDataBitRecover(sym,noiseEst,csi,cfg,LDPCDecodingMethod="bp");

See Also

| | | | |