コンテンツにスキップ

Distributed Brain EEG Integration System

[!NOTE] 最新の実装状況は 機能実装ステータス (Remaining Functionality) を参照してください。

概要

このシステムは、EvoSpikeNetの分散スパイキングニューラルネットワーク(SNN)シミュレーションから、リアルタイムでEEGを生成し、WebSocket経由で配信します。

アーキテクチャ

コンポーネント

  1. Distributed Brain Simulator (DistributedBrainSimulator)
  2. 複数の脳領域(前頭前野、運動野、視覚野、聴覚野)を並列シミュレーション
  3. 各領域はLIFニューロンの集団として実装
  4. リアルタイムでスパイクトレインを生成

  5. Spike-to-EEG Converter (SpikeToEEGConverter)

  6. スパイクトレインを連続的なEEG信号に変換
  7. Alpha関数カーネルを使用したシナプス後電位(PSP)のモデリング
  8. 背景振動(アルファ、ベータ、ガンマ波)の追加

  9. WebSocket Server (DistributedBrainEEGServer)

  10. 100Hzでリアルタイム配信
  11. 4チャンネル(脳領域ごと)のEEGデータ
  12. フロントエンドEEG Visualizerと統合

脳領域とEEGチャンネルのマッピング

チャンネル 脳領域 特徴周波数 機能
Ch1 前頭前野 (PFC) 12 Hz (α波) 実行機能、意思決定
Ch2 運動野 20 Hz (β波) 運動計画と実行
Ch3 視覚野 40 Hz (γ波) 視覚処理
Ch4 聴覚野 30 Hz (高β/低γ波) 音声処理

実装詳細

1. スパイクトレインの生成

各脳領域は、LIFニューロンモデルを使用してスパイクを生成:

# LIF neuron dynamics
V(t+1) = V(t) * leak + I_syn(t) + I_ext(t)
if V(t) >= threshold:
    spike = 1
    V(t) = reset_potential

パラメータ: - threshold: 1024 (固定点表現) - leak: 230/256 ≈ 0.9 (減衰係数) - reset_potential: 0

2. スパイク-EEG変換

スパイクトレインは、生理学的に妥当なAlpha関数カーネルで畳み込み:

kernel(t) = (t/τ) * exp(1 - t/τ)
EEG(t) = spike_train(t)  kernel(t)
  • τ: シナプス時定数 (10ms)
  • kernel_size: 50ms

3. 背景振動の追加

各脳領域の特徴的な周波数成分を追加:

oscillation(t) = A * sin(2π * f * t + φ)
EEG_final(t) = EEG_spikes(t) + oscillation(t) + noise(t)

4. リアルタイムストリーミング

WebSocketサーバーは100Hzで以下の形式でデータを配信:

{
  "timestamp": 1769832375.04,
  "data": {
    "Ch1": 1.23,
    "Ch2": -0.45,
    "Ch3": 2.11,
    "Ch4": 0.87
  }
}

実装状況(更新: 2026-03-11)

  • evospikenet/eeg_integration/comparative_analysis.py に安定化パッチを適用し、フェーズ同期・比較解析の統計処理(Rayleigh 検定、wPLI)の数値安定性を向上させました。
  • EEG 関連のユニットテスト(比較解析含む)はコンテナ内で実行済み: tests/unit/eeg_integration/test_comparative_analysis.py → 16 passed, 20 warnings。
  • 既存の EEG パイプライン改善: eeg_translator.py のデータ検証強化、spectrum_converter.py の wavelet 名互換 (morletmorl) 対応、device_interface.py のドライバ互換修正を行い、多数の EEG 統合テストが通過しています。
  • (2026-03-11 追記) BrainSimulation エイリアス修正・deploy_genome() 追加・genome-driven forward pass・apply_weight_delta() を含む Phase D 統合が完了し、DistributedBrainNode がゲノム進化の結果を直接推論に活用できるようになっています(詳細は「ゲノム駆動推論パイプライン」セクション参照)。
  • 残作業: OpenBCI ドライバの disconnect() 状態遷移(DISCONNECTED への復帰)に関するテスト1件の修正が残っています。

使用方法

1. 分散脳EEGサーバーの起動

# Dockerコンテナ内で実行
docker-compose exec dev python scripts/start_distributed_brain_eeg_server.py

# または、バックグラウンドで実行
docker-compose exec -d dev python scripts/start_distributed_brain_eeg_server.py

注: リポジトリ設定により dev サービスは profiles: ["full"] に移動しています。通常の docker compose up では起動しません。dev を起動するには次のようにプロファイルを指定してください:

docker compose --profile full up -d dev

2. EEG Visualizerでの表示

  1. ブラウザで http://localhost:8052/eeg-visualizer にアクセス
  2. Connection TypeWebSocket に設定
  3. WebSocket URLws://evospikenet-dev:8765 (デフォルト)

注: evospikenet-dev はコンテナ名です。ホストから接続する場合は dev コンテナが起動しておりポートが公開されていることを確認してください。dev を起動していない場合は上記のプロファイル指定で起動するか、ws://localhost:8765 を使用してください(ホストへポートマッピングが有効な場合)。 4. Connect ボタンをクリック

3. コマンドラインでのテスト

import asyncio
import json
import websockets

async def test():
    async with websockets.connect('ws://localhost:8765') as ws:
        await ws.send(json.dumps({'type': 'start'}))

        # 10サンプル受信
        for i in range(10):
            msg = await ws.recv()
            data = json.loads(msg)
            print(f"Sample {i+1}: {data['data']}")

asyncio.run(test())

パフォーマンス

システム要件

  • CPU: 2コア以上推奨
  • メモリ: 2GB以上
  • ネットワーク: 低レイテンシ (<10ms)

スループット

  • シミュレーション: 1000 timesteps/秒
  • EEG生成: 100 samples/秒
  • WebSocket配信: 100 Hz
  • レイテンシ: <20ms (シミュレーション → 配信)

スケーラビリティ

  • ニューロン数: 最大10,000ニューロン/領域
  • 脳領域数: 最大8領域
  • 同時接続: 最大10クライアント

生物学的妥当性

1. ニューロンモデル

LIFモデルは、実際の皮質ニューロンの基本的な挙動を捉えています: - 漏れ積分 - 閾値発火 - 不応期

2. EEG生成メカニズム

実際のEEG信号は、数千〜数百万のニューロンの同期した活動から生成されます: 1. 樹状突起でのシナプス後電位(PSP) 2. 皮質表面への電流の総和 3. 頭蓋骨と頭皮による減衰

このシミュレーションは、以下を実装: - PSPのAlpha関数モデリング - 複数ニューロンの活動の線形総和 - 背景ノイズと振動の追加

3. 周波数帯域

各脳領域の特徴的な周波数は、神経科学的知見に基づいています:

周波数帯域 範囲 関連する脳領域 機能
δ (デルタ) 0.5-4 Hz 深部構造 深睡眠
θ (シータ) 4-8 Hz 海馬 記憶形成
α (アルファ) 8-13 Hz 後頭葉 安静状態
β (ベータ) 13-30 Hz 運動野 覚醒、集中
γ (ガンマ) 30-100 Hz 全般 認知処理

拡張可能性

カスタム脳領域の追加

regions = [
    BrainRegionConfig(
        name="Hippocampus",
        num_neurons=150,
        base_frequency=7.0,  # Theta rhythm
        firing_rate=20.0,
        connectivity=0.20,
        region_type="excitatory",
    ),
    # ... 他の領域
]

高度なニューロンモデル

# Izhikevichモデルへの切り替え

<!-- from evospikenet.core import IzhikevichNeuronLayer -->

model = IzhikevichNeuronLayer(
    num_neurons=100,
    a=0.02,
    b=0.2,
    c=-65,
    d=8
)

分散処理の有効化

<!-- TODO: update or remove - import failport DistributedBrainExecutor -->

executor = DistributedBrainExecutor(
    node_id="eeg-coordinator",
    target_nodes=["pfc-0", "motor-0", "visual-0"]
)
await executor.start_eeg_processing(eeg_stream)

生物模倣オーバーレイ(BiomimeticAdapter)⭐ NEW 2026-02-25

DistributedBrainExecutor は、EEG 処理パイプラインに BiomimeticAdapter を統合しています。 設定の enable_biomimetic=True(デフォルト)で有効になり、以下の生物学的調整を各コマンドに付与します。

主要メソッド

メソッド 入力 出力 説明
rhythm_metrics(eeg_data) EEG ndarray delta_power, alpha_power δ/α 帯域パワーを抽出
modulatory_gain(conf, meta, rhythms) 信頼度・メタデータ・リズム 0.6〜1.6 のゲイン ドーパミン/ノルアドレナリン相当の可塑性倍率
homeostasis_scale(metadata) エネルギー/認知負荷/発達段階 0.5〜1.5 のスケール ホメオスタシス制約スケール係数
dev_gain() config.development_stage 0.5〜1.5 のゲイン 発達段階に応じた成長利得
sleep_state(metadata, now_ns) sleep_pressure, attention sleep buffer サイズ・圧力 高睡眠圧力時にコマンドをバッファリング

設定例

from evospikenet.eeg_integration.distributed_brain_executor import (
    DistributedBrainConfig, DistributedBrainExecutor
)

config = DistributedBrainConfig(
    enable_biomimetic=True,      # 生物模倣オーバーレイを有効化
    low_latency_mode=False,      # True にすると生物模倣処理をスキップして低遅延化
    development_stage=0.8,       # 0.0(初期)〜 1.0(成熟)
    energy_budget=1.0,           # 0.0〜1.0: 利用可能エネルギー割合
    sleep_buffer_seconds=3.0,    # 睡眠バッファの保持時間(秒)
)

executor = DistributedBrainExecutor(config=config)

生物模倣メタデータの確認

コマンドの metadata["biomimetic"] に以下が格納されます:

{
  "delta_power": 0.12,
  "alpha_power": 0.34,
  "modulatory_gain": 1.18,
  "homeostasis_scale": 0.95,
  "dev_gain": 1.04,
  "sleep": { "size": 0, "pressure": 0.1 }
}

低レイテンシモード

リアルタイム BCI などの用途では low_latency_mode=True を推奨します。 生物模倣計算をスキップし、EEG→コマンド変換のレイテンシを最小化します。

config = DistributedBrainConfig(low_latency_mode=True)
executor = DistributedBrainExecutor(config=config)

トラブルシューティング

接続エラー

ConnectionClosedError: received 1011 (internal error)

解決策: 1. サーバーログを確認: docker-compose exec dev tail -f /tmp/distributed_brain_eeg.log 2. サーバーが起動しているか確認: docker-compose exec dev ps -ef | grep distributed_brain 3. ポート8765が使用中でないか確認

低フレームレート

EEG Visualizerでフレームレートが低い場合:

  1. サーバーのサンプリングレートを下げる:

    server = DistributedBrainEEGServer(sampling_rate=50.0)  # 100 → 50 Hz
    

  2. ニューロン数を減らす:

    BrainRegionConfig(num_neurons=50)  # 100 → 50
    

メモリ不足

RuntimeError: CUDA out of memory

解決策: 1. CPUモードで実行 2. バッチサイズを減らす 3. ニューロン数を減らす

生物模倣統合(BrainSimulationFramework)

BrainSimulationFrameworkbiomimetic/ 全モジュールと DistributedBrainExecutor の間をつなぐ統合レイヤーです。

クイックスタート

from evospikenet.brain_simulation import BrainSimulationFramework

# 生物模倣モードで分散脳シミュレーション起動
framework = BrainSimulationFramework(enable_biomimetic=True)
result = framework.run_simulation(duration=1000)
# → 発達・制御・STDP・エネルギー・海馬・睡眠の 6 フェーズを順次実行

# DMN アイドルサイクル(デフォルトモードネットワーク)
import asyncio
activities = asyncio.run(framework.run_idle_phase(duration_s=10.0))

# 全モジュール状態スナップショット取得
status = framework.biomimetic_status()
print(status)

Izhikevich ニューロン回路(B-2)

DistributedBrainEEGServer で利用している NeuralCircuitModelerneuron_type="izhikevich" を指定することで Izhikevich モデルバックエンドに切り替えられます:

from evospikenet.brain_simulation import NeuralCircuitModeler, NeuralCircuitConfig

cfg = NeuralCircuitConfig(num_neurons=100, num_inputs=10, connectivity=0.2)
circuit = NeuralCircuitModeler(cfg, neuron_type="izhikevich")
spikes, membrane_v = circuit.simulate_timestep(input_current=0.5, t=0)
モデル 特徴 適用場面
"lif" (デフォルト) 軽量・高速 大規模脳領域シミュレーション
"izhikevich" RS/IB/CH/FS/LTS 等 多様な発火パターン 皮質層型リアリスティック回路

皮質トポロジー登録(B-3)

from evospikenet.biomimetic import CorticalTopologyGenerator
from evospikenet.brain_simulation import BrainRegionIntegrator

gen = CorticalTopologyGenerator()
integrator = BrainRegionIntegrator()
added = integrator.add_cortical_topology(gen, nx_cols=4, ny_cols=4)
# 16 カラムを BrainRegionConfig として登録、隣接 √2 mm 内で小世界接続

STDP ↔ NeuromodulatorGate(A-3)

from evospikenet.plasticity import STDP
from evospikenet.biomimetic import NeuromodulatorGate

gate = NeuromodulatorGate()
stdp = STDP.with_neuromodulation(gate)
# ドーパミン/ACh レベルに応じて学習率をリアルタイム変調

biomimetic_status() の主要フィールド

{
  "stdp_connected_gate": True,
  "sleep_consolidation_replay": True,
  "izhikevich_circuits": 1,
  "cortical_columns_registered": 16,
  "neuromodulator_registry_linked": True,
  "efference_copy_adaptive": True,
  "mirror_neuron_default_classifier": True,
  "dmn_idle_phase_available": True,
}

評価スコア: docs-dev/biomimetic_integration_evaluation.md v2.0 — 8.7/10(Phase A/B 全 11 項目完了)


ゲノム駆動推論パイプライン(Phase D — 2026-03-11)

Phase D 統合により、進化エンジンが生成したゲノムを DistributedBrainNode に直接展開できるようになりました。 これにより EEG → 分散脳 の推論ループにゲノム進化の結果が組み込まれます。

フロー概要

DistributedEvolutionEngine.run_evolution()
    └─→ best_genome (EvoGenome)
           │
           ▼  deploy_to_nodes([pfc, motor, memory])
    DistributedBrainNode.deploy_genome(genome)
           │
           ▼  GenomeToBrainConverter().instantiate(genome)
    InstantiatedBrain (nn.Module)
           │
           ▼  _process_brain_command() 内
    genome-driven forward pass  →  confidence 補正

コード例

import asyncio
from evospikenet.distributed_evolution_engine import DistributedEvolutionEngine
from evospikenet.distributed_brain_node import DistributedBrainNode

# 進化実行
engine = DistributedEvolutionEngine(config={"population_size": 50})
best = asyncio.run(engine.run_evolution(generations=50))

# 分散脳ノードへ展開
pfc_node   = DistributedBrainNode("pfc",   config={"neuron_count": 1000})
motor_node = DistributedBrainNode("motor", config={"neuron_count": 512})
engine.deploy_to_nodes([pfc_node, motor_node])

# 展開確認
for node in [pfc_node, motor_node]:
    print(node.get_stats()["genome_deployed"])  # True

STDP 可塑性の重みへの即時反映

EEG ストリームから得た STDP デルタを InstantiatedBrain の重みにリアルタイム適用できます:

delta = brain.apply_plasticity_update("pfc", spike_history, synapse_matrix)
if delta is not None:
    brain.apply_weight_delta("pfc", delta, learning_rate=1e-4)

BrainSimulation エイリアス

DistributedBrainNode が内部で使用する BrainSimulation クラスは BrainSimulationFramework のラッパーエイリアスです(brain_simulation.py 末尾に定義)。 enable_biomimetic=True で初期化した場合と同等の生物模倣機能が利用できます。


参照

論文

  • Dayan & Abbott (2001). Theoretical Neuroscience
  • Buzsáki (2006). Rhythms of the Brain
  • Izhikevich (2007). Dynamical Systems in Neuroscience

EvoSpikeNet ドキュメント

  • Brain Simulation Brief
  • Biomimetic Integration Plan
  • biomimetic_integration_evaluation.md
  • README.md
  • Distributed Brain Architecture

ライセンス

Copyright 2026 Moonlight Technologies Inc. All Rights Reserved.