CRPA is the abbreviation for Controlled Reception Pattern Antennas. In the context of GNSS applications, this term was, until recently, largely confined to closed circles within the high-end defense industry. However, as CRPA is one of the most effective techniques for mitigating GNSS jamming and spoofing, it is now attracting increasing interest across the broader GNSS ecosystem, including high-end and professional-grade commercial devices. This is particularly true for drones and unmanned autonomous vehicles, for obvious operational and safety reasons.
This article is a continuation of a previous publication titled “Host-Level Detection of GNSS Jamming Using u-blox Receivers”, which focused on leveraging information provided by a u-blox GNSS receiver to enable the host system to make informed decisions. If you have not read it yet, it is recommended to do so.
The Problem Statement
While CRPA design and its theoretical foundations are well documented in academic papers and technical articles, practical implementation or even experimental validation quickly reveals a significant barrier to entry. Specialized, expensive test equipment and dedicated components are typically required. The antenna array itself is often not the most challenging element; the majority of the complexity lies in the receiver electronics, whether implemented in the analog or digital domain.
The niche nature of the topic becomes apparent when relevant academic references begin appearing several pages deep in search results, often alongside major defense contractors such as Thales and Safran as primary equipment providers. This alone is usually enough to discourage experimentation outside of well-funded industrial or defense programs. Nevertheless, experience remains the most effective teacher, and that motivation forms the basis of this work.
Objective and Approach
The goal of this article is to demonstrate a proof of concept CRPA-like system with:
- Minimal design complexity
- Minimal cost
- No reliance on specialized hardware such as DSPs or FPGAs
The initial question driving this project was straightforward: Can a GNSS receiver itself be used as a front-end to monitor noise levels and infer the direction of interference, enabling the host to steer the antenna pattern away from a jamming source?
CRPA Fundamentals
At its core, a CRPA system is a specific application of antenna array beamforming. Unlike conventional beamforming (commonly used in telecommunications to maximize gain in a desired direction) GNSS-oriented CRPA focuses on steering nulls, meaning minimizing gain toward sources of interference.
A CRPA system typically employs multiple antenna elements to generate multiple nulls. In general, an array of N antenna elements can form up to N − 1 independent nulls. Steering the reception pattern requires adjusting the relative phase of the signals received by each antenna element, usually through controllable phase shifters within the receiver chain.
For readers interested in antenna arrays and beamforming in more depth, there is extensive literature available online. In addition, Jon Kraft’s YouTube channel provides practical and accessible explanations of antenna array concepts. While the approach presented in this article differs in implementation, it was strongly inspired by the educational clarity of his work.
System Implementation
To evaluate the feasibility of steering antenna gain away from a jamming source, while minimizing cost and integration effort, the system was intentionally limited to two antenna elements and a single phase shifter.
A custom PCB was developed to host two independent RF channels. Each channel includes a power splitter/combiner and a programmable phase shifter. The selected phase shifters provide 16 discrete phase states, controlled via 4-bit digital inputs. To enable software-based control, a USB-to-I²C bridge interfaces with an I²C GPIO expander, which drives the phase control lines.

The core design objective is to share the same antenna pair between two GNSS receivers:
- Channel A is dedicated to environmental monitoring and interference detection.
- Channel B is dedicated to navigation.
In this configuration, Channel A continuously scans the RF environment to estimate the direction of arrival of a jamming signal. Based on this estimation, the host software computes and applies an appropriate phase shift so that the effective antenna pattern seen by Channel B is steered away from the jammer direction.

For validation and characterization purposes, a rotary switch was added to allow manual phase selection prior to software integration. In addition, SMA connectors and external RF coaxial cables were deliberately used instead of PCB-integrated RF traces. This choice provides greater flexibility and makes the board a reusable experimental platform for future iterations.
Theory of Operation
The proposed setup relies on two key principles:
- Antenna pattern steering using the previously described two-element array and programmable phase shifting.
- Use of a u-blox GNSS receiver as an RF sensor to estimate the maximum detected signal amplitude.
This second point is enabled by a feature available in recent u-blox receivers (M9, M10, F9, F10, X20 families), which provide a basic spectrum analyzer. The measurement results are accessible via the UBX-MON-SPAN message. Although u-blox positions this functionality primarily as a debugging aid for hardware validation, this work repurposes it as an active sensing mechanism.
Spectrum Measurement Using UBX-MON-SPAN
Inspection of the UBX-MON-SPAN message reveals that it provides the following information:
- An array of 256 spectrum bins, with a resolution of 0.02 dB per unit
- Spectrum resolution (Hz)
- Spectrum span (Hz)
- Center frequency of the spectrum span (Hz)
- Programmable Gain Amplifier (PGA) gain level (dB)
When decoded using the u-center tool, this message provides a clear view of the in-band spectral content. Under nominal conditions, the spectrum remains relatively flat. However, when exposed to in-band interference, a distinct peak appears in the spectrum data.


The approach implemented here consists of recording the maximum spectral peak value for each antenna phase configuration. By sweeping the phase states and correlating the measured peak amplitude with the corresponding angular response, the angle of arrival of the interfering signal can be inferred. The underlying assumption is that the strongest interference level is observed when the antenna array is steered toward the jammer.
Two important constraints apply:
- The RF input must not be saturated; otherwise, peak values clip and directional information is lost.
- Spectrum measurements must be compensated for the PGA gain level, as the raw values are not automatically normalized.
Once the jammer direction is estimated using Channel A, a 180° phase offset is applied to Channel B to steer a null toward the interference source.
Experimental Setup
Equipment Used

The complete setup is this

Test conditions
- The antennas are placed as shown below, GNSS antennas are spaced by half wavelength.
- The distance between GNSS antennas and the jamming antenna was determined empirically so the maximum measured value by the M10 module at 0° does not saturate the RF input

Static Testing
Manual Antenna Pattern Scan
In the first test, the jammer antenna was fixed while the GNSS antenna array was physically rotated from −90° to +90°. Phase shifter A was fixed at 0°. A Python script collected UBX-MON-SPAN messages at 1 Hz and extracted the maximum signal level.

Tests were performed with the jammer placed at 0° and −50°.

As shown below, In both cases, the maximum measured level occurred within ±20° of the true jammer angle, confirming that the spectrum data collected from the Ublox M10 receiver provides usable angular discrimination.

Electronic Antenna Pattern Scan
In this test, both the jammer and antenna array were fixed. The phase shifter was electronically swept from 0° to 337.5° in 22.5° steps. For each phase state, spectrum data was collected and processed.

The test was done twice with jammer antenna placed at 0° and at 30°

Tests with jammer positions at 0° and 30° showed clear, repeatable maxima corresponding to the jammer direction, validating electronic steering of the antenna array.

Based on these results, the theory is confirmed. The antenna array can be steered with the designed board. Combining the measurement collected with UBX-MON-SPAN, gives distinguishable maximums depending on the jammer signal AoA (Angle of arrival)
Impact on Navigation Performance
Static Tests with Manual Phase Selection
In the following test, I will evaluate the impact of selecting a phase shift manually on the navigation data measured by the receiver connected to channel B.
The test sequence is:
- Jammer antenna placed at random orientation
- Python script perform a scan to determine the max points while changing the phase angle.
- Phase shifter of channel B will be set manually to the angle where max level was measured on Channel A.
- Check navigation performance using u-center (two metrics will be evaluated, estimated 3D Accuracy and Used SVs count).
- Phase shifter of channel B will be set manually to the angle where max level was measured on Channel A + 180°.
- Check navigation performance using u-center (two metrics will be evaluated, estimated 3D Accuracy and Used SVs count).
When the phase shifter was aligned with the jammer direction, navigation performance degraded, satellite tracking became unstable, and the receiver eventually lost fix.

When the phase shifter was moved by +180°, navigation performance recovered, satellite tracking stabilized, and position accuracy improved.

These results were consistent with a second jammer orientation.
Null steering using this setup has a corrective effect. The receiver was able to recover for a lost fix, by placing a null on the orientation of the determined jamming AoA.
Dynamic Testing
In these tests, the jammer antenna will be placed at a fixed position, and the GNSS antennas will rotate from -90° to 0°. This aim to simulate the motion of a GNSS antenna array in a jammed environment.
Without Null Steering
The “DUT” accuracy was good when the antenna array is placed at 90° from the jammer, but it starts degrading progressively as it gets closer to the 0° orientation. The accuracy shown in the graph is too bad by the end to have any meaningful use for a real application, and the receiver lose fix anyway at 45°

u-center measure an overall average 3D accuracy of 417m, with a maximum estimated accuracy of +13Km

With Automated Null Steering
In the final test, a Python script continuously:
- Scanned the environment on Channel A
- Determined the jammer direction
- Applied a +180° phase shift to Channel B

Under identical motion conditions, navigation performance improved dramatically. Average 3D accuracy was reduced to 14 m, with a maximum of 19 m. The receiver lost fix only three times during the entire test sequence.


I call this a success !
Conclusion
The results of the final test are way better then what I even hoped for, this work demonstrates that CRPA-like null steering behavior can be achieved using a basic new generation Ublox GNSS receiver and minimal external hardware. By repurposing the UBX-MON-SPAN spectrum analyzer and combining it with a simple two-element antenna array, it is possible to detect interference direction and actively mitigate its impact on navigation performance.
While this setup does not replace a full multi-element CRPA system, it provides a compelling low-cost proof of concept and a valuable experimental platform for further research into adaptive GNSS anti-jamming techniques.
Disclaimer
Using UBX-MON-SPAN as a main feature is not based on any recommendation or suggestion by Ublox, This article is NOT a design recommendation, only a proof of concept.
Test results shown in this article are only indicative, repeatability is not guaranteed.
