Bluetooth LE Blocking, Intermodulation and Carrier-to-Interference Performance Tests
This example shows how to perform radio frequency (RF) physical layer (PHY) receiver tests specific to blocking, intermodulation and carrier-to-interference (C/I) according to Bluetooth® RF-PHY Test Specifications [3]. This example also verifies whether these test measurement values are within the limits specified by the Bluetooth RF-PHY Test Specifications [3].
Objectives of Bluetooth LE RF-PHY tests
The Bluetooth RF-PHY Test Specifications [3] defined by Bluetooth Special Interest Group (SIG) includes RF-PHY tests for both transmitter and receiver. The objectives of these RF-PHY tests are to:
Ensure interoperability between all Bluetooth devices
Ensure a basic level of system performance for all Bluetooth products.
Each test case has a specified test procedure and an expected outcome, which must be met by the implementation under test (IUT).
RF-PHY Receiver Tests
The Bluetooth receiver tests are designed to ensure that the IUT can receive data over a range of conditions where the transmitted signal has high power, and in presence of both in-band and out-of-band interference with a defined packet error rate (PER). This example covers three Bluetooth LE RF-PHY receiver tests for blocking, intermodulation and C/I performance as per the Bluetooth RF-PHY Test Specifications [3].
Blocking Performance: The blocking performance test verifies the receiver performance in the presence of out-of-band interfering signals i.e. operating outside the 2400 MHz - 2483.5 MHz band.
C/I Performance: The C/I performance test verifies the receiver performance in presence of adjacent and co-channel interfering signals.
Intermodulation Performance: The intermodulation performance test verifies the receiver performance in presence of unwanted signals nearby in frequency.
All the above RF-PHY tests are necessary because the wanted signal often will not be the only signal transmitting in the given frequency range.
The following block diagram summarizes the example flow.
Generate a Bluetooth LE test waveform by using
bleWaveformGenerator
function.Obtain a passband signal by performing frequency upconversion on the generated test waveform.
Scale the waveform to a desired input level.
Add the interference signal(s) depending on the performance test.
Add thermal noise based on receiver noise floor.
At the receiver, perform frequency down conversion on the noisy signal.
Demodulate, decode and perform CRC check using
bluetoothTestWaveformValidate
function.Measure the PER based on CRC check and then compare it with the reference PER.
Initialize the Simulation Parameters
Specify the test value as "Blocking
", "C/I
" or "Intermodulation
".
testValue = "Intermodulation";
Specify the PHY transmission mode as per Bluetooth RF-PHY Test Specifications.
Test value | PHY transmission mode supported |
| " |
| " |
| " |
phyMode = 'LE2M';
Specify number of samples per symbol, minimum of 40 samples per symbol as per the test specifications.
sps = 40;
Specify the payload length in the range of [37,255] bytes.
payloadLength = 240;
Specify the RF-PHY test configuration parameters by using the bluetoothRFPHYTestConfig
object.
configObject = bluetoothRFPHYTestConfig(Test=testValue, ... Mode=phyMode, ... SamplesPerSymbol=sps, ... PayloadLength=payloadLength); if testValue=="Intermodulation" configObject.Interferer1SignalLevel = -50; end
Select the frequency of operation for IUT based on the performance test and generic access profile (GAP) role(s) as shown in the table below.
Operating Frequency | Peripheral and Central Devices | Broadcaster and Observer Devices |
(In MHz) |
|
|
Lowest |
|
|
Middle |
|
|
Highest |
|
|
Specify the frequency of operation in Hz.
Fc = 2426*1e6;
Based on the PHY transmission mode, compute the sampling rate.
sampleRate = 1e6*(1+1*(phyMode=="LE2M"))*sps;
Compute the interpolation factor for up-conversion to cover Bluetooth LE RF frequency band (2400e6 to 2485e6).
interpFactor = ceil(2*2485e6/sampleRate);
Create a dsp.DigitalUpConverter
(DSP System Toolbox) System object™.
upConvert = dsp.DigitalUpConverter(InterpolationFactor=interpFactor, ... SampleRate=sampleRate, ... Bandwidth=2e6, ... StopbandAttenuation=44, ... PassbandRipple=0.5, ... CenterFrequency=Fc);
Create a dsp.DigitalDownConverter
(DSP System Toolbox) System object™.
downConvert = dsp.DigitalDownConverter(DecimationFactor=interpFactor, ... SampleRate=sampleRate*interpFactor, ... Bandwidth=2e6, ... StopbandAttenuation=44, ... PassbandRipple=0.5, ... CenterFrequency=Fc);
Specify the noise figure in dB.
NF = 12;
Create and configure comm.ThermalNoise
System object™ to add thermal noise.
thermalNoise = comm.ThermalNoise(NoiseMethod="Noise figure", ... SampleRate=sampleRate, ... NoiseFigure=NF);
Generate the scaling factors alpha, beta, gamma, as well as the interference frequencies for signal #1 and signal #2 by using helperBLETestParamGenerate
helper function.
[alpha,beta,gamma,interferenceFreq1,interferenceFreq2] = helperBLETestParamGenerate(testValue,Fc,phyMode);
Specify the number of packets.
numPacket = 10;
Specify the maximum number of interference parameters used for simulation.
maxInterferenceParams = min(length(interferenceFreq1),numPacket);
Repeat all the interference parameters such that PER can be averaged over the entire range of interference frequencies for selected receiver performance test.
repFact = ceil(numPacket/maxInterferenceParams); % Repetition factor
betaRep = repmat(beta,repFact,1);
gammaRep = repmat(gamma,repFact,1);
interferenceFreq1Rep = repmat(interferenceFreq1,repFact,1);
interferenceFreq2Rep = repmat(interferenceFreq2,repFact,1);
Initialize a variable for reusing the interference waveform #1.
countInterferer = rem(1:numPacket,maxInterferenceParams); countInterferer(countInterferer==0) = maxInterferenceParams;
Initialize counter for packets in error.
packetsInError = 0;
Test Simulation
In this example, the three Bluetooth LE RF-PHY performance tests are simulated as follows:
For
Blocking
performance, there will be only one interference signal i.e. interference signal #2. So, the scaling factor (beta) for interference signal #1 is zero.For
C/I
performance, there will be only one interference signal i.e. interference signal #1. So, the scaling factor (gamma) for interference signal #2 is zero.For
Intermodulation
performance, there will be two interference signals.
Generate a Bluetooth LE test waveform by using bluetoothTestWaveform
function and bluetoothTestWaveformConfig
object. Set the payload type to 0 for a PRBS9 payload which is always a modulated carrier.
wantedTestWaveformConfig = bluetoothTestWaveformConfig(PayloadType=0, ... SamplesPerSymbol=sps, ... PayloadLength=payloadLength, ... Mode=phyMode); wantedWaveform = bluetoothTestWaveform(wantedTestWaveformConfig);
Apply frequency up-conversion to obtain a pass-band signal for the specified frequency of operation.
wantedWaveformUp = upConvert([wantedWaveform;zeros(8*sps,1)]);
Generate an interference signal #1 by using bluetoothTestWaveform
function and bluetoothTestWaveformConfig
object. Set the payload type to 3 for a PRBS15 payload which is always a modulated carrier.
interferenceTestWaveformConfig = bluetoothTestWaveformConfig(PayloadType=3, ... SamplesPerSymbol=sps, ... PayloadLength=payloadLength, ... Mode=phyMode); interferenceWaveform = bluetoothTestWaveform(interferenceTestWaveformConfig);
Store the interference waveform #1 by performing frequency up conversion, and ensure it is based on the buffer size. If the packet count exceeds the buffer size, reuse the stored interference waveform.
interferenceWaveform1Up = zeros(length(wantedWaveformUp),maxInterferenceParams); if any(testValue==["C/I","Intermodulation"]) for count=1:maxInterferenceParams release(upConvert) upConvert.CenterFrequency = interferenceFreq1Rep(count); interferenceWaveform1Up(:,count) = upConvert([interferenceWaveform;zeros(8*sps,1)]); end end
Specify the time vector to generate a sinusoidal unmodulated interference signal, which will be designated as interference signal #2.
t = (0:(length(wantedWaveformUp)-1)).'/(interpFactor*sampleRate);
Simulate each Bluetooth LE test waveform by adding interference waveform. Add thermal noise to the signal. Downconvert the noisy waveform and validate the waveform by using the bluetoothTestWaveformValidate
function.
for countPacket=1:numPacket % Generate an interference waveform #2 which is a sinusoidal % unmodulated signal. The sqrt(2) factor ensures that the power of the % sinusoidal signal is normalized interferenceWaveform2 = sqrt(2)*sin(2*pi*interferenceFreq2Rep(countPacket)*t); % Add the interference signals to the wanted signal rxWaveform = alpha*wantedWaveformUp + ... betaRep(countPacket)*interferenceWaveform1Up(:,countInterferer(countPacket)) + ... gammaRep(countPacket)*interferenceWaveform2; chanOut = thermalNoise(complex(rxWaveform)); downConvOutWf = downConvert(real(chanOut));
Perform Bluetooth test waveform validation using bluetoothTestWaveformValidate
function
crcError = bluetoothTestWaveformValidate(downConvOutWf,configObject); % Increment the packet in error if CRC is failed packetsInError = packetsInError + crcError; end
Determine the PER.
per = packetsInError/numPacket;
Spectrum Visualization
Create and configure a spectrum analyzer and show the spectrum of last transmitted wanted signal and interference signal(s) based on the receiver performance test. Setup the spectrum viewer.
spectrumScope = spectrumAnalyzer(SampleRate=interpFactor*sampleRate, ... SpectralAverages=10, ... YLimits=[-160 0], ... Title="Spectrum of Wanted and Interference Signals", ... SpectrumUnits="dBm", ... NumInputPorts=2, ... ChannelNames={"Wanted Signal","Interference Signal"}, ... ShowLegend=true, ... FrequencySpan="Start and stop frequencies", ... StartFrequency=2400e6, ... StopFrequency=2485e6, ... RBWSource="Property", ... RBW=1e5, ... PlotAsTwoSidedSpectrum=false); switch configObject.Test case "C/I" spectrumScope(alpha*wantedWaveformUp,betaRep(end)*interferenceWaveform1Up(:,end)) case "Blocking" spectrumScope.StartFrequency = 30e6; spectrumScope(alpha*wantedWaveformUp,gammaRep(end)*interferenceWaveform2) case "Intermodulation" spectrumScope.NumInputPorts = 3; spectrumScope.ChannelNames = {"Wanted Signal","Interference Signal #1","Interference Signal #2"}; spectrumScope(alpha*wantedWaveformUp,betaRep(end)*interferenceWaveform1Up(:,end),gammaRep(end)*interferenceWaveform2) end release(spectrumScope)
Verdict
This section generates the reference PER values for each PHY transmission mode based on the payload length as specified in section 6.4 of the Bluetooth RF-PHY Test Specifications [3].
berTable = [0.1 0.064 0.034 0.017]*0.01; if(payloadLength <= 37) refBER = berTable(1); elseif(payloadLength <= 63) refBER = berTable(2); elseif(payloadLength <= 127) refBER = berTable(3); else refBER = berTable(4); end accessAddLen = 4; % Access address length in bytes pduHeaderLen = 2; % Header length in bytes crcLengthBytes = 3; % CRC length in bytes refPER = 1-(1-refBER)^((payloadLength+accessAddLen+pduHeaderLen+crcLengthBytes)*8); fprintf("Measured PER and reference PER for payload length of %d bytes are %f, %f respectively.\n",configObject.PayloadLength,per,refPER);
Measured PER and reference PER for payload length of 240 bytes are 0.000000, 0.287282 respectively.
if per <= refPER fprintf("%s performance test passed.\n",configObject.Test); else fprintf("%s performance test failed.\n",configObject.Test); end
Intermodulation performance test passed.
Appendix
This example uses the following helper functions:
helperBLETestParamGenerate.m— Generate Bluetooth LE test parameters specific to blocking, intermodulation, and C/I
Selected Bibliography
Bluetooth Special Interest Group (SIG), Inc. “Bluetooth® Technology Website – The Official Website for the Bluetooth Wireless Technology. Get up to Date Specifications, News, and Development Info.” Accessed May 24, 2023. https://www.bluetooth.com/.
Bluetooth Special Interest Group (SIG), Inc. “Core Specification – Bluetooth® Technology Website.” Accessed May 24, 2023. https://www.bluetooth.com/specifications/specs/core-specification-5-3/.
Bluetooth RF-PHY Test Specification, Section 6.4.