Skip to content

🎛️ Signal Separation (Analog)

Evolve pipelines for blind source separation, maximizing SINR (dB).


Prerequisites

  1. VEOX Server: Start the local VEOX server (requires Docker):

    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
    
    See the Quick Start for detailed server setup, health checks, and Docker Compose instructions.

  2. Python SDK: Install the veox package via PyPI:

    pip install veox
    


What It Does

The signal_separation family genetically evolves multi-stage pipelines for blind source separation of mixed analog signals:

Preprocessor → Whitener → Rectifier → Extractor → Component → Postprocessor → Fusion

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")

Signal Separation Dashboard
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=10 for a smoke test.
  • Higher tiers: Tier 3+ datasets add degradations like ill_conditioned or nonlinear mixing for harder benchmarks.
  • SINR scale: Higher dB = better separation; negative dB means the interference dominates.