主要内容

Explore 400 MHz 6G Waveform Using USRP X410

Since R2025a

This example shows how to generate, transmit, capture, and analyze a large-bandwidth 6G candidate waveform. It uses an NI™ USRP™ X410 software-defined radio (SDR) to transmit the waveform and capture it. The example then measures the error vector magnitude (EVM) of the captured waveform.

Radio sending and receiving a 6G waveform with Wireless Testbench

Set Waveform Parameters

This example models a pre-6G Orthogonal Frequency Division Multiplexing (OFDM) or Discrete Fourier Transform spread OFDM (DFT-s-OFDM) waveform with control over the bandwidth and subcarrier spacing. In the uplink of a 5G NR waveform, DFT-s-OFDM spreads symbols in the frequency domain to reduce the peak to average power ratio (PAPR) compared to OFDM.

Start by setting these parameters for the waveform:

bandwidth = 400; % MHz -- X410 max analog bandwidth is 400 MHz
subcarrierSpacing = 1920; % kHz
waveform = "OFDM"; % Waveform modulation

Create a carrier configuration. Calculate the required number of resource blocks (NSizeGrid) given the bandwidth.

carrier = pre6GCarrierConfig;
carrier.SubcarrierSpacing = subcarrierSpacing;
channelBandwidth = bandwidth*1e6; % Bandwidth of RBs and guard carriers in Hz
carrier.NSizeGrid = floor((channelBandwidth/(carrier.SubcarrierSpacing*1e3))/12); % 12 subcarriers per RB

Specify the number of subframes to generate.

numSubframes = 1;
numSlots2Generate = numSubframes*carrier.SlotsPerSubframe;
disp("Generating "+numSlots2Generate+" slots")
Generating 128 slots

Configure a physical downlink shared channel (PDSCH) for full resource block (RB) allocation and enable the phase tracking reference signal (PT-RS).

pdsch = pre6GPDSCHConfig;
pdsch.PRBSet = 0:(carrier.NSizeGrid-1);
pdsch.Modulation = "256QAM";
pdsch.EnablePTRS = true;

Generate Waveform

Create a waveform containing a PDSCH transmission, demodulation reference signal (DM-RS), and PT-RS. The example applies transform precoding if you set waveform to "DFT-s-OFDM". The DM-RS is not transform precoded.

[txWaveform,ofdmInfo] = hpre6GPDSCHWaveform(carrier,pdsch,numSubframes,WaveformModulation=waveform);

Plot the resultant spectrum of the waveform that is to be transmitted.

txSA = spectrumAnalyzer;
txSA.SampleRate = ofdmInfo.SampleRate;
txSA.Title = "Generated 6G Candidate Waveform";
txSA(txWaveform)

Configure SDR Parameters

This example uses a USRP X410 SDR to continuously transmit the 6G candidate waveform and subsequently capture the transmitted waveform. Use the Radio Setup (Wireless Testbench) wizard to connect and set up your radio for use with Wireless Testbench™.

Update the dropdown menu with your saved radio setup configuration names by clicking Update. Then select the radio to use with this example.

savedRadioConfigurations = radioConfigurations;
options = cellstr({savedRadioConfigurations.Name});
deviceName = options(1) ;

Specify the carrier frequency to transmit and receive the waveform on. The valid carrier frequency range for the USRP X410 is between 1 MHz and 8 GHz.

carrierFrequency = 3.25; % GHz

Set gain as the gain for both the transmit and receive ports. If your captured waveform appears to be just noise, try lowering your gain in case the captured waveform is clipped.

gain = 45;

Specify your transmit and capture ports. In this example, the transmit and capture ports have a loopback cable with a 30 dB attenuator attached to it.

txAntennaOpts = hTransmitAntennas(deviceName);
txAntenna = txAntennaOpts(1);

rxAntennaOpts = hCaptureAntennas(deviceName);
rxAntenna = rxAntennaOpts(1);

Set the capture time as twice the length of the number of subframes that were generated to ensure that all the subframes are continuously captured.

captureTime = (milliseconds(1)*numSubframes)*2;

Transmit and Receive Waveform

Create a basebandTransceiver (Wireless Testbench) object and configure it with your transmit and capture parameters set in the Configure SDR Parameters section.

if ~exist("sdrObj","var")
    sdrObj = basebandTransceiver(deviceName);
    sdrObj.CaptureDataType = class(txWaveform);
end

Set the sample rate of the hardware as the sample rate calculated by the hpre6GOFDMModulate function. The hpre6GOFDMModulate function calculates the sample rate from the number of FFT points and the subcarier spacing. The function determines the number of FFT points based on a maximum occupancy of 85%, and the number of FFT points must be an integer power of 2.

sdrObj.SampleRate = ofdmInfo.SampleRate;

% Transmit parameters
sdrObj.TransmitAntennas = txAntenna;
sdrObj.TransmitRadioGain = gain;
sdrObj.TransmitCenterFrequency = carrierFrequency*1e9;

% Receive parameters
sdrObj.CaptureAntennas = rxAntenna;
sdrObj.CaptureRadioGain = gain;
sdrObj.CaptureCenterFrequency = sdrObj.TransmitCenterFrequency;

transmit(sdrObj,txWaveform,"continuous")
Loading bitstream to FPGA...
Loading bitstream to FPGA is now complete.
rxWaveform = capture(sdrObj,captureTime);

Plot the spectrum of the captured waveform. The waveform in the plot below was captured with a loopback cable and a 30 dB attenuator.

rxSA = spectrumAnalyzer;
rxSA.SampleRate = ofdmInfo.SampleRate;
rxSA.Title = "Received 6G Candidate Waveform";
rxSA(rxWaveform)

Stop the waveform transmission so that you can modify parameters such as the transmit and capture antennas or sample rate.

stopTransmission(sdrObj)

Measure EVM

Use the hpre6GMeasurePDSCHEVM function to analyze the waveform. In this example, the function:

  • Synchronizes the received waveform

  • Demodulates the received waveform

  • Estimates the channel

  • Equalizes the PDSCH symbols

  • Recovers transform deprecoded symbols if necessary

  • Estimates and compensates the common phase error (CPE)

  • Computes the PDSCH EVM

Additionally, the hpre6GMeasurePDSCHEVM function outputs the RMS and peak EVM statistics on a per slot basis and provides figures of the RMS and peak EVM on a per subcarrier and per symbol basis.

evmInfo = hpre6GPDSCHEVM(rxWaveform,carrier,pdsch,numSubframes);
Slot 0 PDSCH EVM, RMS: 2.255% Peak: 6.828%
Slot 1 PDSCH EVM, RMS: 2.298% Peak: 7.182%
Slot 2 PDSCH EVM, RMS: 2.180% Peak: 5.987%
Slot 3 PDSCH EVM, RMS: 2.193% Peak: 6.850%
Slot 4 PDSCH EVM, RMS: 2.197% Peak: 6.075%
Slot 5 PDSCH EVM, RMS: 2.225% Peak: 6.318%
Slot 6 PDSCH EVM, RMS: 2.204% Peak: 6.195%
Slot 7 PDSCH EVM, RMS: 2.154% Peak: 5.850%
Slot 8 PDSCH EVM, RMS: 2.254% Peak: 6.556%
Slot 9 PDSCH EVM, RMS: 2.282% Peak: 7.101%
Slot 10 PDSCH EVM, RMS: 2.176% Peak: 6.522%
Slot 11 PDSCH EVM, RMS: 2.204% Peak: 5.646%
Slot 12 PDSCH EVM, RMS: 2.202% Peak: 6.456%
Slot 13 PDSCH EVM, RMS: 2.102% Peak: 6.589%
Slot 14 PDSCH EVM, RMS: 2.218% Peak: 6.943%
Slot 15 PDSCH EVM, RMS: 2.236% Peak: 6.832%
Slot 16 PDSCH EVM, RMS: 2.130% Peak: 7.113%
Slot 17 PDSCH EVM, RMS: 2.183% Peak: 6.767%
Slot 18 PDSCH EVM, RMS: 2.185% Peak: 6.358%
Slot 19 PDSCH EVM, RMS: 2.230% Peak: 6.411%
Slot 20 PDSCH EVM, RMS: 2.336% Peak: 7.818%
Slot 21 PDSCH EVM, RMS: 2.185% Peak: 5.676%
Slot 22 PDSCH EVM, RMS: 2.190% Peak: 6.046%
Slot 23 PDSCH EVM, RMS: 2.277% Peak: 6.384%
Slot 24 PDSCH EVM, RMS: 2.249% Peak: 6.684%
Slot 25 PDSCH EVM, RMS: 2.154% Peak: 6.252%
Slot 26 PDSCH EVM, RMS: 2.172% Peak: 7.116%
Slot 27 PDSCH EVM, RMS: 2.203% Peak: 7.072%
Slot 28 PDSCH EVM, RMS: 2.265% Peak: 6.665%
Slot 29 PDSCH EVM, RMS: 2.179% Peak: 6.071%
Slot 30 PDSCH EVM, RMS: 2.258% Peak: 6.872%
Slot 31 PDSCH EVM, RMS: 2.220% Peak: 6.363%
Slot 32 PDSCH EVM, RMS: 2.194% Peak: 6.153%
Slot 33 PDSCH EVM, RMS: 2.168% Peak: 7.333%
Slot 34 PDSCH EVM, RMS: 2.215% Peak: 6.571%
Slot 35 PDSCH EVM, RMS: 2.231% Peak: 6.686%
Slot 36 PDSCH EVM, RMS: 2.234% Peak: 6.954%
Slot 37 PDSCH EVM, RMS: 2.201% Peak: 6.403%
Slot 38 PDSCH EVM, RMS: 2.251% Peak: 6.783%
Slot 39 PDSCH EVM, RMS: 2.217% Peak: 6.421%
Slot 40 PDSCH EVM, RMS: 2.178% Peak: 6.765%
Slot 41 PDSCH EVM, RMS: 2.162% Peak: 5.804%
Slot 42 PDSCH EVM, RMS: 2.242% Peak: 6.623%
Slot 43 PDSCH EVM, RMS: 2.161% Peak: 5.891%
Slot 44 PDSCH EVM, RMS: 2.205% Peak: 5.715%
Slot 45 PDSCH EVM, RMS: 2.250% Peak: 6.899%
Slot 46 PDSCH EVM, RMS: 2.168% Peak: 6.298%
Slot 47 PDSCH EVM, RMS: 2.230% Peak: 6.959%
Slot 48 PDSCH EVM, RMS: 2.179% Peak: 6.555%
Slot 49 PDSCH EVM, RMS: 2.158% Peak: 6.830%
Slot 50 PDSCH EVM, RMS: 2.190% Peak: 6.533%
Slot 51 PDSCH EVM, RMS: 2.123% Peak: 6.822%
Slot 52 PDSCH EVM, RMS: 2.139% Peak: 6.529%
Slot 53 PDSCH EVM, RMS: 2.177% Peak: 6.149%
Slot 54 PDSCH EVM, RMS: 2.141% Peak: 6.879%
Slot 55 PDSCH EVM, RMS: 2.121% Peak: 6.097%
Slot 56 PDSCH EVM, RMS: 2.268% Peak: 6.688%
Slot 57 PDSCH EVM, RMS: 2.212% Peak: 6.138%
Slot 58 PDSCH EVM, RMS: 2.248% Peak: 6.361%
Slot 59 PDSCH EVM, RMS: 2.271% Peak: 6.971%
Slot 60 PDSCH EVM, RMS: 2.166% Peak: 6.219%
Slot 61 PDSCH EVM, RMS: 2.196% Peak: 6.156%
Slot 62 PDSCH EVM, RMS: 2.125% Peak: 6.416%
Slot 63 PDSCH EVM, RMS: 2.171% Peak: 6.826%
Slot 64 PDSCH EVM, RMS: 2.194% Peak: 6.836%
Slot 65 PDSCH EVM, RMS: 2.175% Peak: 6.216%
Slot 66 PDSCH EVM, RMS: 2.140% Peak: 6.583%
Slot 67 PDSCH EVM, RMS: 2.253% Peak: 6.419%
Slot 68 PDSCH EVM, RMS: 2.187% Peak: 7.629%
Slot 69 PDSCH EVM, RMS: 2.261% Peak: 6.266%
Slot 70 PDSCH EVM, RMS: 2.221% Peak: 7.647%
Slot 71 PDSCH EVM, RMS: 2.230% Peak: 6.112%
Slot 72 PDSCH EVM, RMS: 2.205% Peak: 6.308%
Slot 73 PDSCH EVM, RMS: 2.337% Peak: 6.880%
Slot 74 PDSCH EVM, RMS: 2.187% Peak: 6.415%
Slot 75 PDSCH EVM, RMS: 2.298% Peak: 6.558%
Slot 76 PDSCH EVM, RMS: 2.131% Peak: 6.619%
Slot 77 PDSCH EVM, RMS: 2.316% Peak: 6.709%
Slot 78 PDSCH EVM, RMS: 2.212% Peak: 6.200%
Slot 79 PDSCH EVM, RMS: 2.230% Peak: 6.123%
Slot 80 PDSCH EVM, RMS: 2.159% Peak: 6.330%
Slot 81 PDSCH EVM, RMS: 2.221% Peak: 5.890%
Slot 82 PDSCH EVM, RMS: 2.219% Peak: 6.566%
Slot 83 PDSCH EVM, RMS: 2.202% Peak: 6.852%
Slot 84 PDSCH EVM, RMS: 2.128% Peak: 5.707%
Slot 85 PDSCH EVM, RMS: 2.162% Peak: 6.351%
Slot 86 PDSCH EVM, RMS: 2.167% Peak: 7.121%
Slot 87 PDSCH EVM, RMS: 2.385% Peak: 7.251%
Slot 88 PDSCH EVM, RMS: 2.211% Peak: 6.240%
Slot 89 PDSCH EVM, RMS: 2.226% Peak: 6.078%
Slot 90 PDSCH EVM, RMS: 2.258% Peak: 6.798%
Slot 91 PDSCH EVM, RMS: 2.216% Peak: 7.010%
Slot 92 PDSCH EVM, RMS: 2.146% Peak: 5.916%
Slot 93 PDSCH EVM, RMS: 2.230% Peak: 7.038%
Slot 94 PDSCH EVM, RMS: 2.165% Peak: 6.704%
Slot 95 PDSCH EVM, RMS: 2.187% Peak: 5.975%
Slot 96 PDSCH EVM, RMS: 2.258% Peak: 6.959%
Slot 97 PDSCH EVM, RMS: 2.217% Peak: 6.860%
Slot 98 PDSCH EVM, RMS: 2.133% Peak: 6.109%
Slot 99 PDSCH EVM, RMS: 2.162% Peak: 6.910%
Slot 100 PDSCH EVM, RMS: 2.181% Peak: 5.825%
Slot 101 PDSCH EVM, RMS: 2.137% Peak: 6.165%
Slot 102 PDSCH EVM, RMS: 2.133% Peak: 5.902%
Slot 103 PDSCH EVM, RMS: 2.203% Peak: 7.870%
Slot 104 PDSCH EVM, RMS: 2.152% Peak: 7.324%
Slot 105 PDSCH EVM, RMS: 2.134% Peak: 5.897%
Slot 106 PDSCH EVM, RMS: 2.330% Peak: 6.467%
Slot 107 PDSCH EVM, RMS: 2.186% Peak: 8.042%
Slot 108 PDSCH EVM, RMS: 2.204% Peak: 6.692%
Slot 109 PDSCH EVM, RMS: 2.179% Peak: 6.644%
Slot 110 PDSCH EVM, RMS: 2.156% Peak: 7.184%
Slot 111 PDSCH EVM, RMS: 2.107% Peak: 6.438%
Slot 112 PDSCH EVM, RMS: 2.270% Peak: 6.528%
Slot 113 PDSCH EVM, RMS: 2.131% Peak: 6.519%
Slot 114 PDSCH EVM, RMS: 2.185% Peak: 6.190%
Slot 115 PDSCH EVM, RMS: 2.261% Peak: 6.149%
Slot 116 PDSCH EVM, RMS: 2.225% Peak: 6.332%
Slot 117 PDSCH EVM, RMS: 2.194% Peak: 6.632%
Slot 118 PDSCH EVM, RMS: 2.179% Peak: 7.496%
Slot 119 PDSCH EVM, RMS: 2.421% Peak: 7.227%
Slot 120 PDSCH EVM, RMS: 2.224% Peak: 6.637%
Slot 121 PDSCH EVM, RMS: 2.173% Peak: 6.348%
Slot 122 PDSCH EVM, RMS: 2.220% Peak: 6.437%
Slot 123 PDSCH EVM, RMS: 2.264% Peak: 7.691%
Slot 124 PDSCH EVM, RMS: 2.225% Peak: 6.724%
Slot 125 PDSCH EVM, RMS: 2.199% Peak: 7.318%
Slot 126 PDSCH EVM, RMS: 2.316% Peak: 7.248%
Slot 127 PDSCH EVM, RMS: 2.237% Peak: 7.058%
Overall PDSCH EVM, RMS: 2.207% Peak: 8.042%

Figure contains an axes object. The axes object with title PDSCH EVM per Subcarrier, xlabel Subcarrier Number, ylabel EVM (%) contains 2 objects of type line. These objects represent RMS, Peak.

Figure contains an axes object. The axes object with title PDSCH EVM per Symbol, xlabel Symbol Number, ylabel EVM (%) contains 2 objects of type line. These objects represent RMS, Peak.

See Also

(Wireless Testbench) | (Wireless Testbench)