🎛️ Signal Separation (Analog)
Evolve pipelines for blind source separation, maximizing SINR (dB).
Prerequisites
-
VEOX Server: Start the local VEOX server (requires Docker):
See the Quick Start for detailed server setup, health checks, and Docker Compose instructions.docker run -d \ --name veox-enclave-server \ -p 8090:8090 \ 714044927654.dkr.ecr.us-east-2.amazonaws.com/doug/single_enclave/veox-enclave-server:latest -
Python SDK: Install the
veoxpackage via PyPI:
What It Does
The signal_separation family genetically evolves multi-stage pipelines for blind source separation of mixed analog signals:
Candidates are scored using SINR (Signal-to-Interference-plus-Noise Ratio) in decibels. Uses server-side analog signal datasets.
Quick Start
from veox import VeoxEvolver
evolver = VeoxEvolver("signal_separation")
evolver.fit(max_generations=5, population_size=20)
print(f"Best SINR dB: {evolver.best_fitness_:.4f}")
print(f"Pipeline: {evolver.best_pipeline_}")
Full Example
from veox import VeoxEvolver
# 1. Connect
evolver = VeoxEvolver("signal_separation", api_url="http://127.0.0.1:8090")
evolver.health_check()
# 2. Evolve
evolver.fit(
max_generations=10,
population_size=50,
timeout_per_eval=60,
max_poll_time=600,
)
# 3. Inspect
print(f"Best SINR dB: {evolver.best_fitness_:.4f}")
print(f"Pipeline: {evolver.best_pipeline_}")
print(f"Evaluations: {evolver.result_.total_evals}")
# 4. Save
evolver.save("signal_separation_results.json")
from veox import VeoxEvolver
# 1. Connect
evolver = VeoxEvolver("signal_separation", api_url="http://127.0.0.1:8090")
evolver.health_check()
# 2. Evolve
evolver.fit(
max_generations=10,
population_size=50,
num_islands=4, # 💎 PRO FEATURE: 4 parallel islands
timeout_per_eval=60,
max_poll_time=600,
)
# 3. Inspect
print(f"Best SINR dB: {evolver.best_fitness_:.4f}")
print(f"Pipeline: {evolver.best_pipeline_}")
print(f"Evaluations: {evolver.result_.total_evals}")
# 4. Save
evolver.save("signal_separation_results.json")
Live dashboard — SINR dB fitness scatter, champion trend, and source separation pipeline leaderboard.
Pipeline Stages
| Slot | Description | Role |
|---|---|---|
preprocessor |
Signal conditioning | Detrend, bandpass, normalization |
whitener |
Spatial whitening | PCA whitening, ZCA, Mahalanobis |
rectifier |
Nonlinear transform | Contrast functions for ICA-style extraction |
extractor |
Source extraction | Iterative or spectral decomposition |
component |
Component selection | Source ordering and pruning |
postprocessor |
Output refinement | Denoising, scaling, alignment |
fusion |
Multi-method ensemble | Combine outputs from parallel strategies |
Example Dataset
Signal separation uses server-side datasets built from BaseSignalDataset.
Below is a minimal example showing the structure (modeled on the built-in tier-1 datasets):
from Private.doug.src.app.base_classes.signal_separation import BaseSignalDataset
class MySignalDataset(BaseSignalDataset):
def __init__(self, **kwargs):
super().__init__(
name="MySignalDataset",
seed=12345,
tier=1,
duration=2.0,
n_sources=2, # Number of original source signals
n_sensors=3, # Number of mixed sensor observations
noise_level=0.04, # Additive noise magnitude
degradations=[], # e.g. ['ill_conditioned', 'nonlinear']
**kwargs,
)
Fitness Configuration
| Parameter | Value |
|---|---|
| Primary Metric | SINR (dB) |
| Direction | Maximize |
| Exception Penalty | −1e9 |
💎 VEOX Pro Activation
To unlock VIP Evaluators and Pro Algorithms (like PaperKit and Generative routines), you must authenticate your local node with a VEOX License Token.
from veox import VeoxEvolver
evolver = VeoxEvolver("signal_separation", api_url="http://127.0.0.1:8090")
# 1. Fetch your unique Hardware Fingerprint
fingerprint = evolver.get_system_fingerprint()
print(f"My VEOX Node Fingerprint: {fingerprint}")
# Example Output: My VEOX Node Fingerprint: 476ad03474b31e3c84d07df9088d93f0
# 2. Provide this fingerprint to your VEOX Admin to receive a JWT Token
jwt_token = "eyJ0b2tlbiI6ICJVRExK...EXPIRES" # Replace with your token
# 3. Activate the Enclave
if evolver.activate_license(jwt_token):
print("VIP Features Unlocked!")
# evolver.fit(...) will now utilize full Pro capabilities
Tips
- Server-side data: Signal datasets live on the server — no CSV upload needed.
- Quick test:
max_generations=1, population_size=10for a smoke test. - Higher tiers: Tier 3+ datasets add degradations like
ill_conditionedornonlinearmixing for harder benchmarks. - SINR scale: Higher dB = better separation; negative dB means the interference dominates.