Forum

Notifications
Clear all

BCI – Transcranial Alternating Current Stimulation device source code

1 Posts
1 Users
0 Reactions
21 Views
 josh
(@josh)
Member Admin
Joined: 2 months ago
Posts: 510
Topic starter  

Here’s a conceptual Python project structure for simulating and controlling a Transcranial Alternating Current Stimulation (tACS) device. This example is for educational and simulation purposes only—not for actual medical use.


⚠️ Disclaimer

This code is not intended for real-world medical application. tACS involves electrical stimulation of the brain and should only be performed with certified medical devices under professional supervision. The following is a software simulation to demonstrate how one might structure a control system for research or prototyping.


🗂️ Project Structure

tacs_simulator/
├── main.py
├── config/
│   └── settings.yaml
├── controller/
│   ├── __init__.py
│   └── stimulator.py
├── waveform/
│   ├── __init__.py
│   └── generator.py
├── utils/
│   ├── __init__.py
│   └── logger.py
└── data/
    └── logs.txt

📄 config/settings.yaml

stimulation:
  frequency: 10.0       # Hz
  amplitude: 1.0        # mA
  duration: 60          # seconds
  sample_rate: 1000     # Hz

📄 controller/stimulator.py

import time
from waveform.generator import generate_sine_wave
from utils.logger import log_event

class TACSStimulator:
    def __init__(self, frequency, amplitude, duration, sample_rate):
        self.frequency = frequency
        self.amplitude = amplitude
        self.duration = duration
        self.sample_rate = sample_rate

    def start_stimulation(self):
        log_event("Stimulation started")
        signal = generate_sine_wave(self.frequency, self.amplitude, self.duration, self.sample_rate)
        for value in signal:
            print(f"Stimulating with current: {value:.3f} mA")
            time.sleep(1 / self.sample_rate)
        log_event("Stimulation ended")

📄 waveform/generator.py

import numpy as np

def generate_sine_wave(freq, amp, duration, sample_rate):
    t = np.linspace(0, duration, int(sample_rate * duration), endpoint=False)
    return amp * np.sin(2 * np.pi * freq * t)

📄 utils/logger.py

from datetime import datetime

def log_event(message):
    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    with open("data/logs.txt", "a") as f:
        f.write(f"[{timestamp}] {message}\n")

📄 main.py

import yaml
from controller.stimulator import TACSStimulator

def load_config():
    with open("config/settings.yaml", "r") as f:
        return yaml.safe_load(f)["stimulation"]

def main():
    config = load_config()
    stimulator = TACSStimulator(
        frequency=config["frequency"],
        amplitude=config["amplitude"],
        duration=config["duration"],
        sample_rate=config["sample_rate"]
    )
    stimulator.start_stimulation()

if __name__ == "__main__":
    main()

🧪 How to Run

  1. Install dependencies:

    pip install pyyaml numpy
    
  2. Run the simulation:

    python main.py
    

 


   
Quote
Share: