Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # mini_sim.py — 19ch toy EEG (alpha, beta, blink) + optional BrainVision export
- import numpy as np
- CHS = ['Fp1','Fp2','F7','F3','Fz','F4','F8','T3','C3','Cz','C4','T4','T5','P3','Pz','P4','T6','O1','O2']
- fs, dur = 256, 20.0 # Hz, seconds
- t = np.arange(int(fs*dur)) / fs
- nch = len(CHS)
- data = np.zeros((nch, t.size))
- def add_sine(ch_names, freq, amp):
- sig = amp * np.sin(2*np.pi*freq*t) * (1 + 0.2*np.sin(2*np.pi*0.1*t)) # slow AM for realism
- for name in ch_names:
- i = CHS.index(name)
- data[i] += sig
- # rhythms
- add_sine(['O1','O2','P3','P4'], freq=10.0, amp=30.0) # posterior alpha
- add_sine(['F3','F4','Fz'], freq=18.0, amp=12.0) # frontal beta
- add_sine(['Cz'], freq=25.0, amp=10.0) # central 25 Hz
- # noise
- rng = np.random.default_rng(0)
- data += rng.normal(0, 5.0, size=data.shape) # ~5 µV noise
- # one blink (~200 ms) frontopolar positive deflection
- blink_t0 = int(5.0*fs)
- blink_len = int(0.2*fs)
- blink = 150.0 * np.hanning(blink_len) # ~150 µV
- for ch in ['Fp1','Fp2']:
- i = CHS.index(ch)
- data[i, blink_t0:blink_t0+blink_len] += blink
- # OPTIONAL: save as BrainVision if MNE is available
- if __name__ == "__main__":
- try:
- import mne
- info = mne.create_info(CHS, sfreq=fs, ch_types='eeg')
- raw = mne.io.RawArray(data*1e-6, info) # µV → Volts
- raw.set_montage('standard_1020', on_missing='ignore')
- mne.export.export_raw('mini.vhdr', raw, fmt='brainvision')
- print("Wrote BrainVision files: mini.vhdr/vmrk/eeg")
- except Exception as e:
- print("MNE not installed or export failed; skipping file export:", e)
Advertisement
Add Comment
Please, Sign In to add comment