QCOS NavCore™ User Guide
Assured Position, Navigation & Timing with Quantum-Ready Architecture
Copyright © 2024-2026 SoftQuantus Innovative OÜ. All Rights Reserved.
Table of Contents
- Introduction
- Getting Started
- Core Concepts
- API Reference
- Sensors
- Integrity Monitoring
- Quantum Processing
- OSNMA Authentication
- NIS2 Compliance
- Quantum RAIM
- Standards Compliance
- Integration Guide
- Best Practices
- Troubleshooting
Introduction
What is NavCore?
QCOS NavCore™ is an enterprise-grade Assured PNT (Position, Navigation, and Timing) platform that combines classical and quantum sensors to provide:
- Resilience: Multi-source sensor fusion that works even when GNSS is jammed or spoofed
- Integrity: Real-time spoof/jam detection with quantified confidence levels
- Proof: Cryptographic evidence trail for every navigation decision
- Future-Ready: Drop-in quantum sensor integration path
The Problem We Solve
GNSS jamming and spoofing incidents are increasing exponentially worldwide:
- Conflict Zones: Military-grade jamming affecting civilian aviation
- Critical Infrastructure: Spoofing attacks on ports, power grids, telecom
- Transportation: Trucking fraud, maritime incidents, railway safety
Regulators (EASA, FAA, IMO, NIS2) now require proof of PNT resilience.
Key Features
| Feature | Description |
|---|---|
| Multi-Sensor Fusion | GPS, Galileo, INS, baro, quantum sensors |
| Spoof Detection | Real-time detection of fake GNSS signals |
| Jam Detection | Automatic detection of RF interference |
| Holdover Mode | Continue navigation when GNSS is denied |
| OSNMA Authentication | Galileo cryptographic verification |
| Quantum RAIM | Quantum sensors as "truth arbiters" |
| NIS2 Compliance | EU directive compliance reporting |
| Evidence Trail | Cryptographic audit for every decision |
Getting Started
Installation
# Install from PyPI (when available)
pip install qcos-navcore
# Or install from source
git clone https://github.com/softquantus/qcos-server.git
cd qcos-server
pip install -e .
Quick Start
from navcore import (
FusionEngine,
IntegrityMonitor,
GNSSReceiver,
IMU,
)
# Create sensors
gnss = GNSSReceiver(
sensor_id="GNSS-001",
manufacturer="u-blox",
model="ZED-F9P",
)
imu = IMU(
sensor_id="IMU-001",
manufacturer="Honeywell",
model="HG1120",
)
# Create integrity monitor
monitor = IntegrityMonitor()
# Create fusion engine
fusion = FusionEngine()
fusion.add_sensor(gnss)
fusion.add_sensor(imu)
# Initialize with position
fusion.initialize(
position=(51.5074, -0.1278, 100.0), # London
timestamp=datetime.now(),
)
# Get navigation solution
solution = fusion.get_solution()
print(f"Position: {solution.position}")
print(f"Integrity Risk: {solution.integrity_risk}")
print(f"Fault Flags: {solution.fault_flags}")
Running the API Server
# Start the NavCore API server
uvicorn navcore.api:app --host 0.0.0.0 --port 8000
# Or with Docker
docker run -p 8000:8000 softquantus/navcore:latest
Core Concepts
Navigation Solution
A navigation solution contains:
Position (lat, lon, alt) ± uncertainty
Velocity (north, east, down) ± uncertainty
Attitude (roll, pitch, yaw) ± uncertainty
Time (UTC offset) ± uncertainty
Integrity Levels
| Level | Description | Action |
|---|---|---|
| NORMAL | Full integrity assured | Continue operation |
| CAUTION | Degraded integrity | Monitor closely |
| WARNING | Integrity at risk | Consider holdover |
| ALERT | Integrity compromised | Use backup systems |
Fault Flags
| Flag | Meaning |
|---|---|
gnss_valid | GNSS solution available |
spoof_suspected | Possible fake signals |
jam_detected | RF interference detected |
holdover_active | Operating without GNSS |
quantum_verified | Quantum sensor confirms position |
Protection Levels
- HPL (Horizontal Protection Level): Maximum horizontal position error
- VPL (Vertical Protection Level): Maximum vertical position error
- TPL (Time Protection Level): Maximum timing error
- GPL (Gravity Protection Level): Quantum gravimeter accuracy
API Reference
Base URL
http://localhost:8000/api/v1/navcore
Endpoints Overview
| Endpoint | Method | Description |
|---|---|---|
/status | GET | Current PNT status |
/solution | GET | Full navigation solution |
/integrity | GET | Integrity assessment |
/alerts | GET | Active spoof/jam alerts |
/holdover | GET | Holdover budget/status |
/sensors | GET | Registered sensors |
/quantum/status | GET | Quantum processing status |
/compliance/osnma/status | GET | OSNMA status |
/compliance/nis2/status | GET | NIS2 compliance |
/raim/status | GET | Quantum RAIM status |
/raim/protection | GET | Protection levels |
/standards/sosa/profiles | GET | SOSA slot profiles |
Example: Get Navigation Solution
curl -X GET "http://localhost:8000/api/v1/navcore/solution"
Response:
{
"position": {
"latitude_deg": 51.5074,
"longitude_deg": -0.1278,
"altitude_msl_m": 100.0,
"sigma_horizontal_m": 0.5,
"sigma_vertical_m": 1.0
},
"velocity": {
"north_ms": 5.0,
"east_ms": 3.0,
"down_ms": 0.1,
"ground_speed_ms": 5.83,
"sigma_ms": 0.1
},
"integrity": {
"status": "normal",
"risk_level": 1e-9,
"protection_levels": {
"hpl_m": 10.0,
"vpl_m": 15.0
}
},
"fault_flags": {
"gnss_valid": true,
"spoof_suspected": false,
"jam_detected": false,
"holdover_active": false
},
"evidence_id": "EVD-20241220-123456-abc123"
}
Sensors
Sensor Types
Classical Sensors
| Sensor | Purpose | Accuracy |
|---|---|---|
| GNSS Receiver | Global position | 1-5m (standalone) |
| IMU | Inertial navigation | Grade dependent |
| Barometer | Altitude | ±10m |
| Magnetometer | Heading | ±2° |
| Odometry | Distance traveled | 1-2% |
Quantum Sensors
| Sensor | Purpose | Accuracy |
|---|---|---|
| Quantum Gravimeter | Gravity measurement | 1 µGal |
| Optical Atomic Clock | Timing | 10⁻¹⁸ |
| Quantum Gyroscope | Rotation | 10⁻³ °/hr |
| NV Magnetometer | Magnetic field | 1 nT |
Adding a Sensor
from navcore.sensors import QuantumGravimeter
# Create quantum gravimeter
gravimeter = QuantumGravimeter(
sensor_id="QG-001",
manufacturer="SoftQuantus",
model="QGRAV-1000",
)
# Add to fusion engine
fusion.add_sensor(gravimeter, role="quantum_truth")
Sensor Catalog
from navcore.sensors import SENSOR_CATALOG
# List all supported sensors
for sensor_type, info in SENSOR_CATALOG.items():
print(f"{sensor_type}: {info['description']}")
Integrity Monitoring
How It Works
The Integrity Monitor continuously checks for:
- Position Consistency: Is the reported position physically possible?
- Velocity Bounds: Are velocities within platform limits?
- Clock Consistency: Is timing consistent across sources?
- Signal Quality: Are signal characteristics normal?
Spoof Detection
from navcore.integrity import IntegrityMonitor
monitor = IntegrityMonitor()
# Check for spoofing indicators
result = monitor.check_spoofing_indicators(
gnss_data=gnss_measurement,
clock_data=clock_measurement,
imu_data=imu_measurement,
)
if result.spoof_suspected:
print(f"ALERT: Spoofing detected!")
print(f"Confidence: {result.confidence:.1%}")
print(f"Indicators: {result.indicators}")
Jam Detection
# Check for jamming
jam_result = monitor.check_jamming_indicators(
cn0_values=signal_strengths,
agc_values=agc_levels,
expected_cn0=45.0, # dB-Hz
)
if jam_result.jam_detected:
print(f"WARNING: Jamming detected!")
print(f"Affected satellites: {jam_result.affected_svs}")
Protection Level Computation
# Compute protection levels
levels = monitor.compute_protection_levels(
geometry=satellite_geometry,
accuracy=measurement_accuracy,
integrity_risk=1e-7, # 10^-7
)
print(f"HPL: {levels.horizontal_m:.1f}m")
print(f"VPL: {levels.vertical_m:.1f}m")
# Check against alert limits
hal = 40.0 # Horizontal Alert Limit
val = 35.0 # Vertical Alert Limit
if levels.horizontal_m > hal or levels.vertical_m > val:
print("ALERT: Protection levels exceed alert limits!")
Quantum Processing
Overview
The Quantum Processing module provides:
- Noise Characterization: Identify noise sources in sensor data
- Dynamical Decoupling: Suppress quantum decoherence
- Quantum Kalman Filter: Optimal state estimation
- Error Correction: Enhance measurement accuracy
Noise Characterization
from navcore.quantum_processing import (
QECEngine, # Alias for QuantumErrorCorrectionEngine
NoiseType,
)
qec = QECEngine()
# Characterize sensor noise
spectrum = qec.characterize_noise(
sensor_id="sensor-001",
time_series=sensor_data,
sample_rate=1000.0,
)
print(f"Noise type: {spectrum.noise_type}")
print(f"White noise floor: {spectrum.white_noise_floor:.2e}")
print(f"Flicker coefficient: {spectrum.flicker_coefficient:.2e}")
Dynamical Decoupling
from navcore.quantum_processing import DecouplingSequence
# Select optimal sequence for noise profile
sequence = qec.select_optimal_sequence(
sensor_id="sensor-001",
interrogation_time_us=100.0,
)
print(f"Selected sequence: {sequence.sequence_type.value}")
print(f"N pulses: {sequence.n_pulses}")
print(f"Total time: {sequence.total_time_us:.1f} µs")
Process Measurement
# Process quantum measurement with error correction
result = qec.process_measurement(
raw_signal=sensor_signal,
sequence=sequence,
atom_number=100000,
)
print(f"Corrected value: {result.value:.9f} m/s²")
print(f"Uncertainty: {result.uncertainty:.2e} m/s²")
print(f"Improvement: {result.improvement_factor:.1f}x")
OSNMA Authentication
What is OSNMA?
OSNMA (Open Service Navigation Message Authentication) is Galileo's cryptographic authentication system that verifies navigation messages are genuine.
Why It Matters
- EU Smart Tachograph: Mandatory from 2025
- NIS2 Compliance: Required for critical infrastructure
- Anti-Spoofing: Cryptographic proof signals are authentic
Using OSNMA
from navcore.osnma import OSNMAVerifier, OSNMAStatus
# Create verifier
verifier = OSNMAVerifier()
# Check status
status = verifier.get_status()
print(f"OSNMA Status: {status}")
# Verify a navigation message
result = verifier.verify_message(
svid=1,
subframe_data=nav_data,
osnma_data=osnma_data,
tow=tow,
wn=wn,
)
if result.verified:
print("✓ Message authenticated")
else:
print("✗ Authentication failed")
Satellite Authentication Status
# Get per-satellite authentication status
for svid, status in verifier.satellite_status.items():
print(f"E{svid}: {status.value}")
API Endpoints
# Get OSNMA status
curl -X GET "http://localhost:8000/api/v1/navcore/compliance/osnma/status"
# Get satellite authentication details
curl -X GET "http://localhost:8000/api/v1/navcore/compliance/osnma/satellites"
NIS2 Compliance
What is NIS2?
NIS2 (Network and Information Security Directive 2) is the EU's updated cybersecurity directive that requires critical infrastructure operators to:
- Implement security measures (Article 21)
- Report incidents within 24-72 hours
- Maintain audit trails
- Ensure supply chain security
Entity Classification
| Type | Sectors | Requirements |
|---|---|---|
| Essential | Energy, Transport, Health, Space | Strictest requirements |
| Important | Digital Infrastructure, ICT Services | Standard requirements |
Compliance Assessment
from navcore.compliance import (
NIS2ComplianceManager,
NIS2EntityType,
NIS2Sector,
)
# Create manager
manager = NIS2ComplianceManager(
entity_type=NIS2EntityType.ESSENTIAL,
sector=NIS2Sector.TRANSPORT,
)
# Assess compliance
assessment = manager.assess_compliance()
print(f"Compliance Status: {assessment.status}")
print(f"Compliance Score: {assessment.score:.1f}%")
# Identify gaps
gaps = manager.identify_gaps()
for gap in gaps:
print(f"Gap: {gap.requirement_name}")
print(f" Risk: {gap.risk_level}")
print(f" Effort: {gap.effort_days} days")
Incident Reporting
from navcore.compliance import NIS2Incident, IncidentCategory, IncidentSeverity
# Report incident
incident = NIS2Incident(
id="INC-001",
category=IncidentCategory.AVAILABILITY,
severity=IncidentSeverity.HIGH,
title="GNSS Service Disruption",
description="Complete loss of GNSS signal in operational area",
affected_systems=["NAV-001", "NAV-002"],
detection_time=datetime.now(),
)
result = manager.record_incident(incident)
print(f"Incident recorded: {result.incident_id}")
print(f"CSIRT notification required within: 24 hours")
API Endpoints
# Get NIS2 compliance status
curl -X GET "http://localhost:8000/api/v1/navcore/compliance/nis2/status"
# Get compliance gaps
curl -X GET "http://localhost:8000/api/v1/navcore/compliance/nis2/gaps"
# Report incident
curl -X POST "http://localhost:8000/api/v1/navcore/compliance/nis2/incident" \
-H "Content-Type: application/json" \
-d '{
"category": "AVAILABILITY",
"severity": "HIGH",
"title": "GNSS Disruption",
"description": "Complete signal loss",
"affected_systems": ["NAV-001"],
"detection_time": "2024-12-20T10:00:00Z"
}'
Quantum RAIM
What is Quantum RAIM?
Quantum RAIM (Receiver Autonomous Integrity Monitoring) uses quantum sensors as "truth arbiters" to detect sophisticated spoofing attacks that would fool classical RAIM.
How It Works
- Classical RAIM: Uses GNSS satellite redundancy to detect faults
- Quantum Enhancement: Compares GNSS against quantum sensors
- Truth Arbitration: Quantum sensors are immune to RF spoofing
- Fault Isolation: Identify and exclude faulty sources
Using Quantum RAIM
from navcore.quantum_raim import QuantumRAIMEngine
# Create RAIM engine
raim = QuantumRAIMEngine(
integrity_risk_target=1e-7, # 10^-7
horizontal_alert_limit_m=40.0,
vertical_alert_limit_m=35.0,
)
# Add quantum sensors
raim.add_sensor("quantum_gravimeter", gravimeter)
raim.add_sensor("quantum_clock", atomic_clock)
# Process epoch
result = raim.process_epoch(
gnss_measurements=gnss_data,
quantum_measurements=quantum_data,
classical_measurements=imu_data,
)
# Check result
if result.threats_detected:
print("⚠️ Threat detected!")
for threat in result.threats:
print(f" {threat.type}: {threat.confidence:.1%}")
print(f"Protection Levels:")
print(f" HPL: {result.hpl_m:.1f}m (limit: 40m)")
print(f" VPL: {result.vpl_m:.1f}m (limit: 35m)")
Attack Detection
| Attack Type | Detection Method |
|---|---|
| Jamming | C/N0 drop, AGC saturation |
| Simple Spoofing | Position jump, velocity inconsistency |
| Carry-Off Attack | Slow drift detected by quantum sensors |
| Meaconing | Timing discrepancy vs atomic clock |
API Endpoints
# Get RAIM status
curl -X GET "http://localhost:8000/api/v1/navcore/raim/status"
# Get protection levels
curl -X GET "http://localhost:8000/api/v1/navcore/raim/protection"
# Get active threats
curl -X GET "http://localhost:8000/api/v1/navcore/raim/threats"
# Get detection statistics
curl -X GET "http://localhost:8000/api/v1/navcore/raim/statistics?hours=24"
Standards Compliance
SOSA (Sensor Open Systems Architecture)
For integration into military ground vehicles:
from navcore.standards import SOSAConformanceChecker, SOSA_SLOT_PROFILES
checker = SOSAConformanceChecker()
# Validate module conformance
result = checker.validate_module(
module_id="NAVCORE-VPX",
target_profile="SOSA_3U_PAYLOAD",
form_factor="3U",
power_watts=25,
thermal_watts=20,
interfaces=["PCIe", "Ethernet", "1PPS"],
)
print(f"Conformant: {result.conformant}")
print(f"Level: {result.level}")
VICTORY (Vehicle Integration for C4ISR/EW)
For US Army vehicle integration:
from navcore.standards import VICTORYPNTService
service = VICTORYPNTService(service_id="navcore-pnt")
# Publish PNT data
service.publish_pnt(
position={"lat": 51.5074, "lon": -0.1278, "alt": 100},
velocity={"north": 5.0, "east": 3.0, "down": 0.1},
heading=45.0,
integrity="assured",
)
FACE (Future Airborne Capability Environment)
For avionics portability:
from navcore.standards import FACEPortableComponent
component = FACEPortableComponent(component_id="navcore-face")
# Register TSS interfaces
component.register_tss_interface("GPS_POSVEL")
component.register_tss_interface("TIMING_UTC")
White Rabbit Time Distribution
For sub-nanosecond synchronization:
from navcore.standards import WhiteRabbitNetwork
network = WhiteRabbitNetwork(network_id="timing-net")
# Add nodes
network.add_grandmaster("GM-001", clock_class="Class-6")
network.add_boundary_clock("BC-001", upstream="GM-001")
# Get network accuracy
accuracy = network.get_accuracy()
print(f"Network accuracy: {accuracy:.1f} ns")
Integration Guide
FastAPI Integration
from fastapi import FastAPI
from navcore import (
api_router,
quantum_api_router,
compliance_api_router,
standards_api_router,
raim_api_router,
)
app = FastAPI(title="My PNT Service")
# Include NavCore routers
app.include_router(api_router)
app.include_router(quantum_api_router)
app.include_router(compliance_api_router)
app.include_router(standards_api_router)
app.include_router(raim_api_router)
Docker Deployment
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Kubernetes Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: navcore
spec:
replicas: 3
selector:
matchLabels:
app: navcore
template:
metadata:
labels:
app: navcore
spec:
containers:
- name: navcore
image: softquantus/navcore:latest
ports:
- containerPort: 8000
resources:
limits:
memory: "512Mi"
cpu: "500m"
Best Practices
1. Always Check Integrity
solution = fusion.get_solution()
if solution.integrity_status == IntegrityStatus.ALERT:
# Do not use this position!
use_backup_navigation()
else:
use_position(solution.position)
2. Enable OSNMA Where Possible
# Always use OSNMA-authenticated satellites when available
verifier = OSNMAVerifier()
verifier.set_policy(require_authentication=True)
3. Monitor Protection Levels
levels = raim.get_protection_levels()
if not levels["hpl_valid"] or not levels["vpl_valid"]:
alert_operator("Protection levels exceeded!")
4. Maintain Audit Trail
# Every navigation decision should be logged
evidence = fusion.get_evidence_bundle()
audit_logger.log(evidence)
5. Test Regularly
from navcore.benchmark import FireDrillProtocol
# Run quarterly fire drills
drill = FireDrillProtocol()
drill.execute_scenario("urban_canyon_spoofing")
Troubleshooting
Common Issues
"No GNSS Fix"
Symptom: Solution shows no GNSS data
Check:
1. Antenna connected and sky-visible
2. Receiver powered and configured
3. Check C/N0 levels in /sensors endpoint
"OSNMA Initializing"
Symptom: OSNMA stuck in initializing state
Check:
1. At least 4 Galileo satellites in view
2. Wait up to 2 minutes for key chain acquisition
3. Check internet connectivity for hot start
"High Protection Levels"
Symptom: HPL/VPL exceeding alert limits
Check:
1. Satellite geometry (PDOP)
2. Number of satellites used
3. Multipath environment
4. Consider adding quantum sensors
"Spoof Detection Alert"
Symptom: System reporting spoofing
Action:
1. Verify with quantum sensors if available
2. Check for legitimate causes (simulator, testing)
3. Engage holdover mode
4. Report incident per NIS2
Getting Help
- Documentation: https://docs.softquantus.com/navcore
- Support: support@softquantus.com
- Issue Tracker: https://github.com/softquantus/qcos-server/issues
Appendix
A. Glossary
| Term | Definition |
|---|---|
| GNSS | Global Navigation Satellite System |
| PNT | Position, Navigation, and Timing |
| RAIM | Receiver Autonomous Integrity Monitoring |
| OSNMA | Open Service Navigation Message Authentication |
| HPL/VPL | Horizontal/Vertical Protection Level |
| HAL/VAL | Horizontal/Vertical Alert Limit |
| NIS2 | Network and Information Security Directive 2 |
| SOSA | Sensor Open Systems Architecture |
| FACE | Future Airborne Capability Environment |
| VICTORY | Vehicle Integration for C4ISR/EW Interoperability |
B. References
- EASA GNSS Interference Mitigation Guidelines
- Galileo OSNMA SIS ICD v1.0
- EU NIS2 Directive 2022/2555
- IEEE P1952 PNT Resilience Standard (draft)
- DHS PNT Security Best Practices
C. Version History
| Version | Date | Changes |
|---|---|---|
| 1.0.0 | 2024-12-20 | Initial release |
This documentation is for QCOS NavCore™. For licensing information, contact sales@softquantus.com