मल्टीपल डेटा स्ट्रीम्स को सिंक्रोनाइज़ करने के लिए लैब स्ट्रीमिंग लेयर (LSL)

डॉ. रोशिनी रणदेनिया और लुकास क्लाइन

अद्यतन किया गया

17 मई 2024

मल्टीपल डेटा स्ट्रीम्स को सिंक्रोनाइज़ करने के लिए लैब स्ट्रीमिंग लेयर (LSL)

डॉ. रोशिनी रणदेनिया और लुकास क्लाइन

अद्यतन किया गया

17 मई 2024

मल्टीपल डेटा स्ट्रीम्स को सिंक्रोनाइज़ करने के लिए लैब स्ट्रीमिंग लेयर (LSL)

डॉ. रोशिनी रणदेनिया और लुकास क्लाइन

अद्यतन किया गया

17 मई 2024

आपका स्वागत है! इस ट्यूटोरियल में हम सीखेंगे कि कई डिवाइसेस से Emotiv EEG डेटा एकत्र और सिंक्रनाइज़ करने के लिए Python में लैब स्ट्रीमिंग लेयर (LSL) का उपयोग कैसे करें। इसके लिए Python प्रोग्रामिंग भाषा के बुनियादी व्यावहारिक ज्ञान की आवश्यकता होगी।

आप क्या सीखेंगे

  1. लैब स्ट्रीमिंग लेयर (LSL) क्या है और शोधकर्ता इसका उपयोग क्यों करते हैं

  2. एक से अधिक Emotiv EEG डिवाइसेस से सिंक्रनाइज़ किया गया डेटा कैसे एकत्र करें

  3. एकत्र किए गए डेटा को कैसे इम्पोर्ट और उसका निरीक्षण करें

1.1 LSL क्या है और यह किस काम आता है?

लैब स्ट्रीमिंग लेयर (LSL) एक ओपन-सोर्स टूलबॉक्स है जिसका उपयोग विभिन्न सेंसर हार्डवेयर से न्यूरल, फिजियोलॉजिकल और बिहेवियरल डेटा स्ट्रीम को भेजने, प्राप्त करने और सिंक्रनाइज़ करने के लिए किया जा सकता है। तेजी से सक्षम, सटीक और मोबाइल मस्तिष्क और शरीर की समझ रखने वाले हार्डवेयर डिवाइसेस (जैसे Emotiv EEG सिस्टम) न्यूरोसाइंस को लैब से बाहर रीयल-टाइम डेटा की दुनिया में ला रहे हैं। जहां कभी EEG और MEG जैसे मस्तिष्क माप केवल शोध प्रयोगशालाओं तक ही सीमित थे, वहीं मोबाइल डिवाइसेस हमें अधिक प्राकृतिक वातावरण में और एक साथ कई लोगों से डेटा एकत्र करने की अनुमति देते हैं।

एक शोधकर्ता को एक ही संगीत सुनने वाले दो लोगों के बीच शारीरिक तालमेल में रुचि हो सकती है। LSL हमें दो EEG हेडसेट से अलग-अलग डेटा एकत्र करने में मदद कर सकता है जो ध्वनि की प्रस्तुति के साथ भी सिंक्रनाइज़ होता है।

LSL के अन्य उपयोगों के कुछ उदाहरण:

  1. चल रहे EEG डेटा में किसी प्रयोग से इवेंट मार्कर जोड़ना

  2. एक ही प्रतिभागी के लिए कई स्रोतों (जैसे हृदय गति, EMG, EEG) से डेटा को समय-संरेखित (Time-align) करना

  3. कई प्रतिभागियों के डेटा को समय-संरेखित करना (जैसे EEG हाइपरस्कैनिंग अध्ययन)

1.2 LSL कैसे काम करता है?

लैब स्ट्रीमिंग लेयर कई डिवाइसेस के बीच रीयल-टाइम समय-श्रृंखला (time-series) डेटा के आदान-प्रदान के लिए एक प्रोटोकॉल है। Python, MATLAB, C++, Java और अन्य प्रोग्रामिंग भाषाओं के लिए ओपन-सोर्स लाइब्रेरीज़ का उपयोग करके LSL को लागू किया जा सकता है।

इसकी मुख्य कार्यक्षमता LSL डेटा स्ट्रीम (data streams) के इर्द-गिर्द घूमती है:

1. एक एक्विजिशन डिवाइस/सॉफ्टवेयर डेटा एकत्र करता है और एक डेटा स्ट्रीम बनाता है - EEG रिकॉर्डिंग डिवाइसेस, आई-ट्रैकर्स, मोशन कैप्चर सिस्टम, हार्ट रेट मॉनीटर आदि से फिजियोलॉजिकल डेटा को LSL पर स्ट्रीम किया जा सकता है, जिसमें मेटाडेटा (सैंपलिंग रेट, डेटा प्रकार, चैनल की जानकारी आदि) शामिल होता है - प्रयोगों से इवेंट मार्कर (जैसे PsychoPy का उपयोग करके) को भी LSL का उपयोग करके डेटा स्ट्रीम के रूप में भेजा जा सकता है

2. डेटा स्ट्रीम को नेटवर्क पर पब्लिश (प्रकाशित) किया जाता है - LSL का उपयोग करके डेटा इसी तरह भेजा जाता है; डेटा स्ट्रीम पूरे नेटवर्क पर "ब्रॉडकास्ट" होती है - पब्लिश की गई स्ट्रीम नेटवर्क पर उपलब्ध होती हैं और उसी नेटवर्क पर अन्य LSL-समर्थित डिवाइसेस द्वारा खोजी जा सकती हैं - LSL एक सामान्य क्लॉक (नेटवर्क टाइम प्रोटोकॉल के बाद) के आधार पर प्रत्येक डेटा चंक या सैंपल को एक टाइमस्टैम्प असाइन करता है। - स्ट्रीम को एक "आउटलेट" के माध्यम से सैंपल-दर-सैंपल (या चंक-दर-चंक) पुश किया जाता है

3. कलेक्शन डिवाइस डेटा स्ट्रीम को "सब्सक्राइब" करते हैं - LSL का उपयोग करके डेटा इसी तरह प्राप्त किया जाता है - उसी नेटवर्क पर कलेक्शन डिवाइसेस "इनलेट्स" के माध्यम से पब्लिश की गई डेटा स्ट्रीम प्राप्त करते हैं। - प्रत्येक इनलेट केवल एक आउटलेट से स्ट्रीम सैंपल और मेटाडेटा प्राप्त करता है

4. डेटा सुरक्षित करें (Save data) - डेटा स्ट्रीम को सब्सक्राइब करने पर, आप इसे अपनी पसंदीदा प्रोग्रामिंग भाषा में एक वेरिएबल में सहेज सकते हैं, या इसे .xdf जैसे मानक फॉर्मेट में सहेजने के लिए LSL द्वारा प्रदान किए गए LabRecorder सॉफ़्टवेयर का उपयोग कर सकते हैं।

2.0 ट्यूटोरियल विवरण

इस ट्यूटोरियल में, हम एक उदाहरण प्रयोग सेटअप लेंगे और Python में LSL का उपयोग करके इसे लागू करने के लिए आवश्यक चरणों और कोड के बारे में आपका मार्गदर्शन करेंगे। हम Emotiv हेडसेट पहने दो लोगों से EEG डेटा एकत्र करते समय ध्वनि चलाने के लिए Python का उपयोग करेंगे। हम EEG डेटा एकत्र करने के लिए EmotivPRO चलाने वाले दो कंप्यूटरों का उपयोग करेंगे, और प्रत्येक स्ट्रीम को एक अलग LSL आउटलेट के माध्यम से ब्रॉडकास्ट करेंगे। हम ऑडियो फ़ाइल चलाने के लिए एक Python लाइब्रेरी का उपयोग करेंगे और साथ ही हर बार फ़ाइल शुरू होने पर एक ट्रिगर भेजेंगे।

कदम:

1. EEG डेटा (और/या मोशन, कांटेक्ट क्वालिटी, सिग्नल क्वालिटी आदि) को शामिल करने वाले LSL आउटलेट के माध्यम से डेटा स्ट्रीम करने के लिए EmotivPRO का उपयोग करें। 2. Python स्क्रिप्ट का उपयोग करके एक ऑडियो ट्रैक चलाएं, और साथ ही एक LSL इनलेट के माध्यम से तीनों डेटा स्ट्रीम को कैप्चर और सेव करने के लिए LabRecorder का उपयोग करके दूसरे LSL के माध्यम से एक ट्रिगर भेजें।

2.1 स्टेप 1 - सेटअप और इंस्टॉल

  1. डेटा एकत्र करने के लिए आपको समर्थित डेटा एक्विजिशन डिवाइसेस की आवश्यकता होगी
    • Emotiv के सभी ब्रेनवेयर डिवाइसेस EmotivPRO सॉफ़्टवेयर के माध्यम से LSL से जुड़ते हैं

  2. अपने डिवाइस पर EmotivPRO इंस्टॉल करें। LSL का उपयोग करने के लिए आपको एक वैध EmotivPRO लाइसेंस की आवश्यकता होगी।

  3. निम्नलिखित कमांड के साथ Python LSL लाइब्रेरी इंस्टॉल करें:
    pip install pylsl

  4. LabRecorder सॉफ़्टवेयर डाउनलोड करें। यह एक सरल, निःशुल्क ऐप है जिसे कमांड लाइन से या स्टैंडअलोन डाउनलोड का उपयोग करके चलाया जा सकता है

  5. हमारे प्रयोग के लिए : Python का उपयोग करके ऑडियो चलाने के लिए आवश्यक पैकेज इंस्टॉल करें
    pip install sounddevice soundfile

2.2 स्टेप 3 - EmotivPRO से LSL स्ट्रीम के माध्यम से डेटा भेजें

  1. ऐप के ऊपरी दाएं कोने में "..." ढूंढें, सेटिंग्स पर जाएं

  2. 'Lab Streaming Layer' सेक्शन और 'Outlet' सब-सेक्शन ढूंढें

  3. उन सभी डेटा प्रकारों (datatypes) को चुनें जिन्हें आप ब्रॉडकास्ट करना चाहते हैं

  4. डेटा फॉर्मेट चुनें (32-बिट फ्लोट या 64-बिट डबल)

  5. चुनें कि डेटा सैंपल-दर-सैंपल भेजना है या सैंपल के चंक्स में

  6. LSL डेटा स्ट्रीम ब्रॉडकास्ट करने के लिए 'Start' पर क्लिक करें


2.3 स्टेप 4 - ऑडियो चलाने और ट्रिगर भेजने के लिए Python स्क्रिप्ट का उपयोग करें

  1. निम्नलिखित कोडब्लॉक को कॉपी करके एक python फ़ाइल में पेस्ट करें और इसे अपने कंप्यूटर पर सहेजें।

  2. एक ऑडियो फ़ाइल (आदर्श रूप से एक .wav फ़ाइल) ढूंढें जिसे आप चलाना चाहते हैं और स्क्रिप्ट में वेरिएबल audio_filepath को अपने कंप्यूटर पर अपनी ऑडियो फ़ाइल के फ़ाइलपथ से बदलकर संपादित करें

  3. कमांड लाइन के साथ इंटरैक्ट करने के लिए एक कमांड प्रॉम्प्ट खोलें और उस फ़ोल्डर पर जाएं जहाँ आपकी Python फ़ाइल संग्रहीत है

  4. दर्ज करें: python3 filename.py
    • आपके Python इंस्टॉल के आधार पर, आप python3 के बजाय python का उपयोग कर सकते हैं

    नोट: /path/to/audio.wav को उस ऑडियो फ़ाइल के स्थान से बदलें जिसे आप अपने प्रयोग के दौरान चलाना चाहते हैं।

"""
LSL Example: Play audio and send a trigger marker

This script creates an LSL marker stream, waits for the user to
press ENTER, then plays an audio file and sends a marker that
can be synchronized with EEG data collected through LabRecorder.
"""

import sounddevice as sd
import soundfile as sf
from pylsl import StreamInfo, StreamOutlet


def wait_for_keypress():
    print("Press ENTER to start audio playback and send an LSL marker.")
    while True:
        if input() == "":
            break


def play_audio_and_send_marker(audio_file, outlet):
    data, fs = sf.read(audio_file)

    print("Playing audio and sending LSL marker...")

    marker_val = [1]
    outlet.push_sample(marker_val)

    sd.play(data, fs)
    sd.wait()

    print("Audio playback finished.")


if __name__ == "__main__":

    info = StreamInfo(
        name="AudioMarkers",
        type="Markers",
        channel_count=1,
        nominal_srate=0,
        channel_format="int32",
        source_id="uniqueMarkerID12345"
    )

    outlet = StreamOutlet(info)

    while True:
        wait_for_keypress()

        audio_filepath = "/path/to/audio.wav"

        play_audio_and_send_marker(
            audio_filepath,
            outlet
        )
"""
LSL Example: Play audio and send a trigger marker

This script creates an LSL marker stream, waits for the user to
press ENTER, then plays an audio file and sends a marker that
can be synchronized with EEG data collected through LabRecorder.
"""

import sounddevice as sd
import soundfile as sf
from pylsl import StreamInfo, StreamOutlet


def wait_for_keypress():
    print("Press ENTER to start audio playback and send an LSL marker.")
    while True:
        if input() == "":
            break


def play_audio_and_send_marker(audio_file, outlet):
    data, fs = sf.read(audio_file)

    print("Playing audio and sending LSL marker...")

    marker_val = [1]
    outlet.push_sample(marker_val)

    sd.play(data, fs)
    sd.wait()

    print("Audio playback finished.")


if __name__ == "__main__":

    info = StreamInfo(
        name="AudioMarkers",
        type="Markers",
        channel_count=1,
        nominal_srate=0,
        channel_format="int32",
        source_id="uniqueMarkerID12345"
    )

    outlet = StreamOutlet(info)

    while True:
        wait_for_keypress()

        audio_filepath = "/path/to/audio.wav"

        play_audio_and_send_marker(
            audio_filepath,
            outlet
        )
"""
LSL Example: Play audio and send a trigger marker

This script creates an LSL marker stream, waits for the user to
press ENTER, then plays an audio file and sends a marker that
can be synchronized with EEG data collected through LabRecorder.
"""

import sounddevice as sd
import soundfile as sf
from pylsl import StreamInfo, StreamOutlet


def wait_for_keypress():
    print("Press ENTER to start audio playback and send an LSL marker.")
    while True:
        if input() == "":
            break


def play_audio_and_send_marker(audio_file, outlet):
    data, fs = sf.read(audio_file)

    print("Playing audio and sending LSL marker...")

    marker_val = [1]
    outlet.push_sample(marker_val)

    sd.play(data, fs)
    sd.wait()

    print("Audio playback finished.")


if __name__ == "__main__":

    info = StreamInfo(
        name="AudioMarkers",
        type="Markers",
        channel_count=1,
        nominal_srate=0,
        channel_format="int32",
        source_id="uniqueMarkerID12345"
    )

    outlet = StreamOutlet(info)

    while True:
        wait_for_keypress()

        audio_filepath = "/path/to/audio.wav"

        play_audio_and_send_marker(
            audio_filepath,
            outlet
        )

2.4 स्टेप 5 - सभी LSL स्ट्रीम को देखने और सहेजने के लिए LabRecorder का उपयोग करें

  1. LabRecorder खोलें

  2. Update दबाएं। उपलब्ध LSL स्ट्रीम्स स्ट्रीम सूची में दिखाई देनी चाहिए
    • आपको दोनों EmotivPROs (आमतौर पर "Emotiv-DataStream" कहा जाता है) और मार्कर स्ट्रीम ("AudioMarkers" कहा जाता है) से स्ट्रीम देखने में सक्षम होना चाहिए

  3. डेटा स्टोर करने के लिए स्थान चुनने (और अन्य पैरामीटर सेट करने) के लिए Browse पर क्लिक करें

  4. सभी स्ट्रीम्स चुनें और रिकॉर्डिंग शुरू करने के लिए Record दबाएं

3.0 डेटा के साथ काम करना

LabRecorder एक XDF फ़ाइल (एक्सटेंसिबल डेटा फॉर्मेट) आउटपुट करता है जिसमें सभी स्ट्रीम्स का डेटा होता है। XDF फ़ाइलों को स्ट्रीम्स में संरचित किया जाता है, जिनमें से प्रत्येक में एक अलग हेडर होता है जो वर्णन करता है कि इसमें क्या है (डिवाइस का नाम, डेटा प्रकार, सैंपलिंग दर, चैनल और बहुत कुछ)। आप अपनी XDF फ़ाइल खोलने और कुछ बुनियादी जानकारी प्रदर्शित करने के लिए नीचे दिए गए कोडब्लॉक का उपयोग कर सकते हैं।

नोट: /path/to/your/file.xdf को अपनी LabRecorder XDF आउटपुट फ़ाइल के फ़ाइलपथ से बदलें।

import pyxdf
import mne
import matplotlib.pyplot as plt
import numpy as np

# Give the path to your LSL output file here.
data_path = "/path/to/your/file.xdf"

# Load the XDF file.
streams, fileheader = pyxdf.load_xdf(data_path)

print("XDF File Header:", fileheader)
print("Number of streams found:", len(streams))

for i, stream in enumerate(streams):
    print("\nStream", i + 1)
    print("Stream Name:", stream["info"]["name"][0])
    print("Stream Type:", stream["info"]["type"][0])
    print("Number of Channels:", stream["info"]["channel_count"][0])

    sfreq = float(stream["info"]["nominal_srate"][0])
    print("Sampling Rate:", sfreq)

    print("Number of Samples:", len(stream["time_series"]))
    print("First 5 data points:", stream["time_series"][:5])

    channel_names = [
        chan["label"][0]
        for chan in stream["info"]["desc"][0]["channels"][0]["channel"]
    ]

    print("Channel Names:", channel_names)

    channel_types = "eeg"
import pyxdf
import mne
import matplotlib.pyplot as plt
import numpy as np

# Give the path to your LSL output file here.
data_path = "/path/to/your/file.xdf"

# Load the XDF file.
streams, fileheader = pyxdf.load_xdf(data_path)

print("XDF File Header:", fileheader)
print("Number of streams found:", len(streams))

for i, stream in enumerate(streams):
    print("\nStream", i + 1)
    print("Stream Name:", stream["info"]["name"][0])
    print("Stream Type:", stream["info"]["type"][0])
    print("Number of Channels:", stream["info"]["channel_count"][0])

    sfreq = float(stream["info"]["nominal_srate"][0])
    print("Sampling Rate:", sfreq)

    print("Number of Samples:", len(stream["time_series"]))
    print("First 5 data points:", stream["time_series"][:5])

    channel_names = [
        chan["label"][0]
        for chan in stream["info"]["desc"][0]["channels"][0]["channel"]
    ]

    print("Channel Names:", channel_names)

    channel_types = "eeg"
import pyxdf
import mne
import matplotlib.pyplot as plt
import numpy as np

# Give the path to your LSL output file here.
data_path = "/path/to/your/file.xdf"

# Load the XDF file.
streams, fileheader = pyxdf.load_xdf(data_path)

print("XDF File Header:", fileheader)
print("Number of streams found:", len(streams))

for i, stream in enumerate(streams):
    print("\nStream", i + 1)
    print("Stream Name:", stream["info"]["name"][0])
    print("Stream Type:", stream["info"]["type"][0])
    print("Number of Channels:", stream["info"]["channel_count"][0])

    sfreq = float(stream["info"]["nominal_srate"][0])
    print("Sampling Rate:", sfreq)

    print("Number of Samples:", len(stream["time_series"]))
    print("First 5 data points:", stream["time_series"][:5])

    channel_names = [
        chan["label"][0]
        for chan in stream["info"]["desc"][0]["channels"][0]["channel"]
    ]

    print("Channel Names:", channel_names)

    channel_types = "eeg"


4.0 अतिरिक्त संसाधन

आधिकारिक दस्तावेज़

  1. GitHub पर आधिकारिक README फ़ाइल सहित ऑनलाइन दस्तावेज़ देखें

  2. अतिरिक्त संसाधन:
    • उदाहरण स्क्रिप्ट के साथ Emotiv के डिवाइसेस का उपयोग करके LSL चलाने के लिए कोड
    • YouTube पर उपयोगी LSL डेमो
    • सभी संबद्ध लाइब्रेरीज़ के लिए SCCN LSL GitHub रिपॉजिटरी
    • सबमोड्यूल्स और ऐप्स के संग्रह के लिए LSL GitHub रिपॉजिटरी

  3. हाइपरस्कैनिंग अध्ययनों के लिए HyPyP विश्लेषण पाइपलाइन

आपका स्वागत है! इस ट्यूटोरियल में हम सीखेंगे कि कई डिवाइसेस से Emotiv EEG डेटा एकत्र और सिंक्रनाइज़ करने के लिए Python में लैब स्ट्रीमिंग लेयर (LSL) का उपयोग कैसे करें। इसके लिए Python प्रोग्रामिंग भाषा के बुनियादी व्यावहारिक ज्ञान की आवश्यकता होगी।

आप क्या सीखेंगे

  1. लैब स्ट्रीमिंग लेयर (LSL) क्या है और शोधकर्ता इसका उपयोग क्यों करते हैं

  2. एक से अधिक Emotiv EEG डिवाइसेस से सिंक्रनाइज़ किया गया डेटा कैसे एकत्र करें

  3. एकत्र किए गए डेटा को कैसे इम्पोर्ट और उसका निरीक्षण करें

1.1 LSL क्या है और यह किस काम आता है?

लैब स्ट्रीमिंग लेयर (LSL) एक ओपन-सोर्स टूलबॉक्स है जिसका उपयोग विभिन्न सेंसर हार्डवेयर से न्यूरल, फिजियोलॉजिकल और बिहेवियरल डेटा स्ट्रीम को भेजने, प्राप्त करने और सिंक्रनाइज़ करने के लिए किया जा सकता है। तेजी से सक्षम, सटीक और मोबाइल मस्तिष्क और शरीर की समझ रखने वाले हार्डवेयर डिवाइसेस (जैसे Emotiv EEG सिस्टम) न्यूरोसाइंस को लैब से बाहर रीयल-टाइम डेटा की दुनिया में ला रहे हैं। जहां कभी EEG और MEG जैसे मस्तिष्क माप केवल शोध प्रयोगशालाओं तक ही सीमित थे, वहीं मोबाइल डिवाइसेस हमें अधिक प्राकृतिक वातावरण में और एक साथ कई लोगों से डेटा एकत्र करने की अनुमति देते हैं।

एक शोधकर्ता को एक ही संगीत सुनने वाले दो लोगों के बीच शारीरिक तालमेल में रुचि हो सकती है। LSL हमें दो EEG हेडसेट से अलग-अलग डेटा एकत्र करने में मदद कर सकता है जो ध्वनि की प्रस्तुति के साथ भी सिंक्रनाइज़ होता है।

LSL के अन्य उपयोगों के कुछ उदाहरण:

  1. चल रहे EEG डेटा में किसी प्रयोग से इवेंट मार्कर जोड़ना

  2. एक ही प्रतिभागी के लिए कई स्रोतों (जैसे हृदय गति, EMG, EEG) से डेटा को समय-संरेखित (Time-align) करना

  3. कई प्रतिभागियों के डेटा को समय-संरेखित करना (जैसे EEG हाइपरस्कैनिंग अध्ययन)

1.2 LSL कैसे काम करता है?

लैब स्ट्रीमिंग लेयर कई डिवाइसेस के बीच रीयल-टाइम समय-श्रृंखला (time-series) डेटा के आदान-प्रदान के लिए एक प्रोटोकॉल है। Python, MATLAB, C++, Java और अन्य प्रोग्रामिंग भाषाओं के लिए ओपन-सोर्स लाइब्रेरीज़ का उपयोग करके LSL को लागू किया जा सकता है।

इसकी मुख्य कार्यक्षमता LSL डेटा स्ट्रीम (data streams) के इर्द-गिर्द घूमती है:

1. एक एक्विजिशन डिवाइस/सॉफ्टवेयर डेटा एकत्र करता है और एक डेटा स्ट्रीम बनाता है - EEG रिकॉर्डिंग डिवाइसेस, आई-ट्रैकर्स, मोशन कैप्चर सिस्टम, हार्ट रेट मॉनीटर आदि से फिजियोलॉजिकल डेटा को LSL पर स्ट्रीम किया जा सकता है, जिसमें मेटाडेटा (सैंपलिंग रेट, डेटा प्रकार, चैनल की जानकारी आदि) शामिल होता है - प्रयोगों से इवेंट मार्कर (जैसे PsychoPy का उपयोग करके) को भी LSL का उपयोग करके डेटा स्ट्रीम के रूप में भेजा जा सकता है

2. डेटा स्ट्रीम को नेटवर्क पर पब्लिश (प्रकाशित) किया जाता है - LSL का उपयोग करके डेटा इसी तरह भेजा जाता है; डेटा स्ट्रीम पूरे नेटवर्क पर "ब्रॉडकास्ट" होती है - पब्लिश की गई स्ट्रीम नेटवर्क पर उपलब्ध होती हैं और उसी नेटवर्क पर अन्य LSL-समर्थित डिवाइसेस द्वारा खोजी जा सकती हैं - LSL एक सामान्य क्लॉक (नेटवर्क टाइम प्रोटोकॉल के बाद) के आधार पर प्रत्येक डेटा चंक या सैंपल को एक टाइमस्टैम्प असाइन करता है। - स्ट्रीम को एक "आउटलेट" के माध्यम से सैंपल-दर-सैंपल (या चंक-दर-चंक) पुश किया जाता है

3. कलेक्शन डिवाइस डेटा स्ट्रीम को "सब्सक्राइब" करते हैं - LSL का उपयोग करके डेटा इसी तरह प्राप्त किया जाता है - उसी नेटवर्क पर कलेक्शन डिवाइसेस "इनलेट्स" के माध्यम से पब्लिश की गई डेटा स्ट्रीम प्राप्त करते हैं। - प्रत्येक इनलेट केवल एक आउटलेट से स्ट्रीम सैंपल और मेटाडेटा प्राप्त करता है

4. डेटा सुरक्षित करें (Save data) - डेटा स्ट्रीम को सब्सक्राइब करने पर, आप इसे अपनी पसंदीदा प्रोग्रामिंग भाषा में एक वेरिएबल में सहेज सकते हैं, या इसे .xdf जैसे मानक फॉर्मेट में सहेजने के लिए LSL द्वारा प्रदान किए गए LabRecorder सॉफ़्टवेयर का उपयोग कर सकते हैं।

2.0 ट्यूटोरियल विवरण

इस ट्यूटोरियल में, हम एक उदाहरण प्रयोग सेटअप लेंगे और Python में LSL का उपयोग करके इसे लागू करने के लिए आवश्यक चरणों और कोड के बारे में आपका मार्गदर्शन करेंगे। हम Emotiv हेडसेट पहने दो लोगों से EEG डेटा एकत्र करते समय ध्वनि चलाने के लिए Python का उपयोग करेंगे। हम EEG डेटा एकत्र करने के लिए EmotivPRO चलाने वाले दो कंप्यूटरों का उपयोग करेंगे, और प्रत्येक स्ट्रीम को एक अलग LSL आउटलेट के माध्यम से ब्रॉडकास्ट करेंगे। हम ऑडियो फ़ाइल चलाने के लिए एक Python लाइब्रेरी का उपयोग करेंगे और साथ ही हर बार फ़ाइल शुरू होने पर एक ट्रिगर भेजेंगे।

कदम:

1. EEG डेटा (और/या मोशन, कांटेक्ट क्वालिटी, सिग्नल क्वालिटी आदि) को शामिल करने वाले LSL आउटलेट के माध्यम से डेटा स्ट्रीम करने के लिए EmotivPRO का उपयोग करें। 2. Python स्क्रिप्ट का उपयोग करके एक ऑडियो ट्रैक चलाएं, और साथ ही एक LSL इनलेट के माध्यम से तीनों डेटा स्ट्रीम को कैप्चर और सेव करने के लिए LabRecorder का उपयोग करके दूसरे LSL के माध्यम से एक ट्रिगर भेजें।

2.1 स्टेप 1 - सेटअप और इंस्टॉल

  1. डेटा एकत्र करने के लिए आपको समर्थित डेटा एक्विजिशन डिवाइसेस की आवश्यकता होगी
    • Emotiv के सभी ब्रेनवेयर डिवाइसेस EmotivPRO सॉफ़्टवेयर के माध्यम से LSL से जुड़ते हैं

  2. अपने डिवाइस पर EmotivPRO इंस्टॉल करें। LSL का उपयोग करने के लिए आपको एक वैध EmotivPRO लाइसेंस की आवश्यकता होगी।

  3. निम्नलिखित कमांड के साथ Python LSL लाइब्रेरी इंस्टॉल करें:
    pip install pylsl

  4. LabRecorder सॉफ़्टवेयर डाउनलोड करें। यह एक सरल, निःशुल्क ऐप है जिसे कमांड लाइन से या स्टैंडअलोन डाउनलोड का उपयोग करके चलाया जा सकता है

  5. हमारे प्रयोग के लिए : Python का उपयोग करके ऑडियो चलाने के लिए आवश्यक पैकेज इंस्टॉल करें
    pip install sounddevice soundfile

2.2 स्टेप 3 - EmotivPRO से LSL स्ट्रीम के माध्यम से डेटा भेजें

  1. ऐप के ऊपरी दाएं कोने में "..." ढूंढें, सेटिंग्स पर जाएं

  2. 'Lab Streaming Layer' सेक्शन और 'Outlet' सब-सेक्शन ढूंढें

  3. उन सभी डेटा प्रकारों (datatypes) को चुनें जिन्हें आप ब्रॉडकास्ट करना चाहते हैं

  4. डेटा फॉर्मेट चुनें (32-बिट फ्लोट या 64-बिट डबल)

  5. चुनें कि डेटा सैंपल-दर-सैंपल भेजना है या सैंपल के चंक्स में

  6. LSL डेटा स्ट्रीम ब्रॉडकास्ट करने के लिए 'Start' पर क्लिक करें


2.3 स्टेप 4 - ऑडियो चलाने और ट्रिगर भेजने के लिए Python स्क्रिप्ट का उपयोग करें

  1. निम्नलिखित कोडब्लॉक को कॉपी करके एक python फ़ाइल में पेस्ट करें और इसे अपने कंप्यूटर पर सहेजें।

  2. एक ऑडियो फ़ाइल (आदर्श रूप से एक .wav फ़ाइल) ढूंढें जिसे आप चलाना चाहते हैं और स्क्रिप्ट में वेरिएबल audio_filepath को अपने कंप्यूटर पर अपनी ऑडियो फ़ाइल के फ़ाइलपथ से बदलकर संपादित करें

  3. कमांड लाइन के साथ इंटरैक्ट करने के लिए एक कमांड प्रॉम्प्ट खोलें और उस फ़ोल्डर पर जाएं जहाँ आपकी Python फ़ाइल संग्रहीत है

  4. दर्ज करें: python3 filename.py
    • आपके Python इंस्टॉल के आधार पर, आप python3 के बजाय python का उपयोग कर सकते हैं

    नोट: /path/to/audio.wav को उस ऑडियो फ़ाइल के स्थान से बदलें जिसे आप अपने प्रयोग के दौरान चलाना चाहते हैं।

"""
LSL Example: Play audio and send a trigger marker

This script creates an LSL marker stream, waits for the user to
press ENTER, then plays an audio file and sends a marker that
can be synchronized with EEG data collected through LabRecorder.
"""

import sounddevice as sd
import soundfile as sf
from pylsl import StreamInfo, StreamOutlet


def wait_for_keypress():
    print("Press ENTER to start audio playback and send an LSL marker.")
    while True:
        if input() == "":
            break


def play_audio_and_send_marker(audio_file, outlet):
    data, fs = sf.read(audio_file)

    print("Playing audio and sending LSL marker...")

    marker_val = [1]
    outlet.push_sample(marker_val)

    sd.play(data, fs)
    sd.wait()

    print("Audio playback finished.")


if __name__ == "__main__":

    info = StreamInfo(
        name="AudioMarkers",
        type="Markers",
        channel_count=1,
        nominal_srate=0,
        channel_format="int32",
        source_id="uniqueMarkerID12345"
    )

    outlet = StreamOutlet(info)

    while True:
        wait_for_keypress()

        audio_filepath = "/path/to/audio.wav"

        play_audio_and_send_marker(
            audio_filepath,
            outlet
        )

2.4 स्टेप 5 - सभी LSL स्ट्रीम को देखने और सहेजने के लिए LabRecorder का उपयोग करें

  1. LabRecorder खोलें

  2. Update दबाएं। उपलब्ध LSL स्ट्रीम्स स्ट्रीम सूची में दिखाई देनी चाहिए
    • आपको दोनों EmotivPROs (आमतौर पर "Emotiv-DataStream" कहा जाता है) और मार्कर स्ट्रीम ("AudioMarkers" कहा जाता है) से स्ट्रीम देखने में सक्षम होना चाहिए

  3. डेटा स्टोर करने के लिए स्थान चुनने (और अन्य पैरामीटर सेट करने) के लिए Browse पर क्लिक करें

  4. सभी स्ट्रीम्स चुनें और रिकॉर्डिंग शुरू करने के लिए Record दबाएं

3.0 डेटा के साथ काम करना

LabRecorder एक XDF फ़ाइल (एक्सटेंसिबल डेटा फॉर्मेट) आउटपुट करता है जिसमें सभी स्ट्रीम्स का डेटा होता है। XDF फ़ाइलों को स्ट्रीम्स में संरचित किया जाता है, जिनमें से प्रत्येक में एक अलग हेडर होता है जो वर्णन करता है कि इसमें क्या है (डिवाइस का नाम, डेटा प्रकार, सैंपलिंग दर, चैनल और बहुत कुछ)। आप अपनी XDF फ़ाइल खोलने और कुछ बुनियादी जानकारी प्रदर्शित करने के लिए नीचे दिए गए कोडब्लॉक का उपयोग कर सकते हैं।

नोट: /path/to/your/file.xdf को अपनी LabRecorder XDF आउटपुट फ़ाइल के फ़ाइलपथ से बदलें।

import pyxdf
import mne
import matplotlib.pyplot as plt
import numpy as np

# Give the path to your LSL output file here.
data_path = "/path/to/your/file.xdf"

# Load the XDF file.
streams, fileheader = pyxdf.load_xdf(data_path)

print("XDF File Header:", fileheader)
print("Number of streams found:", len(streams))

for i, stream in enumerate(streams):
    print("\nStream", i + 1)
    print("Stream Name:", stream["info"]["name"][0])
    print("Stream Type:", stream["info"]["type"][0])
    print("Number of Channels:", stream["info"]["channel_count"][0])

    sfreq = float(stream["info"]["nominal_srate"][0])
    print("Sampling Rate:", sfreq)

    print("Number of Samples:", len(stream["time_series"]))
    print("First 5 data points:", stream["time_series"][:5])

    channel_names = [
        chan["label"][0]
        for chan in stream["info"]["desc"][0]["channels"][0]["channel"]
    ]

    print("Channel Names:", channel_names)

    channel_types = "eeg"


4.0 अतिरिक्त संसाधन

आधिकारिक दस्तावेज़

  1. GitHub पर आधिकारिक README फ़ाइल सहित ऑनलाइन दस्तावेज़ देखें

  2. अतिरिक्त संसाधन:
    • उदाहरण स्क्रिप्ट के साथ Emotiv के डिवाइसेस का उपयोग करके LSL चलाने के लिए कोड
    • YouTube पर उपयोगी LSL डेमो
    • सभी संबद्ध लाइब्रेरीज़ के लिए SCCN LSL GitHub रिपॉजिटरी
    • सबमोड्यूल्स और ऐप्स के संग्रह के लिए LSL GitHub रिपॉजिटरी

  3. हाइपरस्कैनिंग अध्ययनों के लिए HyPyP विश्लेषण पाइपलाइन

आपका स्वागत है! इस ट्यूटोरियल में हम सीखेंगे कि कई डिवाइसेस से Emotiv EEG डेटा एकत्र और सिंक्रनाइज़ करने के लिए Python में लैब स्ट्रीमिंग लेयर (LSL) का उपयोग कैसे करें। इसके लिए Python प्रोग्रामिंग भाषा के बुनियादी व्यावहारिक ज्ञान की आवश्यकता होगी।

आप क्या सीखेंगे

  1. लैब स्ट्रीमिंग लेयर (LSL) क्या है और शोधकर्ता इसका उपयोग क्यों करते हैं

  2. एक से अधिक Emotiv EEG डिवाइसेस से सिंक्रनाइज़ किया गया डेटा कैसे एकत्र करें

  3. एकत्र किए गए डेटा को कैसे इम्पोर्ट और उसका निरीक्षण करें

1.1 LSL क्या है और यह किस काम आता है?

लैब स्ट्रीमिंग लेयर (LSL) एक ओपन-सोर्स टूलबॉक्स है जिसका उपयोग विभिन्न सेंसर हार्डवेयर से न्यूरल, फिजियोलॉजिकल और बिहेवियरल डेटा स्ट्रीम को भेजने, प्राप्त करने और सिंक्रनाइज़ करने के लिए किया जा सकता है। तेजी से सक्षम, सटीक और मोबाइल मस्तिष्क और शरीर की समझ रखने वाले हार्डवेयर डिवाइसेस (जैसे Emotiv EEG सिस्टम) न्यूरोसाइंस को लैब से बाहर रीयल-टाइम डेटा की दुनिया में ला रहे हैं। जहां कभी EEG और MEG जैसे मस्तिष्क माप केवल शोध प्रयोगशालाओं तक ही सीमित थे, वहीं मोबाइल डिवाइसेस हमें अधिक प्राकृतिक वातावरण में और एक साथ कई लोगों से डेटा एकत्र करने की अनुमति देते हैं।

एक शोधकर्ता को एक ही संगीत सुनने वाले दो लोगों के बीच शारीरिक तालमेल में रुचि हो सकती है। LSL हमें दो EEG हेडसेट से अलग-अलग डेटा एकत्र करने में मदद कर सकता है जो ध्वनि की प्रस्तुति के साथ भी सिंक्रनाइज़ होता है।

LSL के अन्य उपयोगों के कुछ उदाहरण:

  1. चल रहे EEG डेटा में किसी प्रयोग से इवेंट मार्कर जोड़ना

  2. एक ही प्रतिभागी के लिए कई स्रोतों (जैसे हृदय गति, EMG, EEG) से डेटा को समय-संरेखित (Time-align) करना

  3. कई प्रतिभागियों के डेटा को समय-संरेखित करना (जैसे EEG हाइपरस्कैनिंग अध्ययन)

1.2 LSL कैसे काम करता है?

लैब स्ट्रीमिंग लेयर कई डिवाइसेस के बीच रीयल-टाइम समय-श्रृंखला (time-series) डेटा के आदान-प्रदान के लिए एक प्रोटोकॉल है। Python, MATLAB, C++, Java और अन्य प्रोग्रामिंग भाषाओं के लिए ओपन-सोर्स लाइब्रेरीज़ का उपयोग करके LSL को लागू किया जा सकता है।

इसकी मुख्य कार्यक्षमता LSL डेटा स्ट्रीम (data streams) के इर्द-गिर्द घूमती है:

1. एक एक्विजिशन डिवाइस/सॉफ्टवेयर डेटा एकत्र करता है और एक डेटा स्ट्रीम बनाता है - EEG रिकॉर्डिंग डिवाइसेस, आई-ट्रैकर्स, मोशन कैप्चर सिस्टम, हार्ट रेट मॉनीटर आदि से फिजियोलॉजिकल डेटा को LSL पर स्ट्रीम किया जा सकता है, जिसमें मेटाडेटा (सैंपलिंग रेट, डेटा प्रकार, चैनल की जानकारी आदि) शामिल होता है - प्रयोगों से इवेंट मार्कर (जैसे PsychoPy का उपयोग करके) को भी LSL का उपयोग करके डेटा स्ट्रीम के रूप में भेजा जा सकता है

2. डेटा स्ट्रीम को नेटवर्क पर पब्लिश (प्रकाशित) किया जाता है - LSL का उपयोग करके डेटा इसी तरह भेजा जाता है; डेटा स्ट्रीम पूरे नेटवर्क पर "ब्रॉडकास्ट" होती है - पब्लिश की गई स्ट्रीम नेटवर्क पर उपलब्ध होती हैं और उसी नेटवर्क पर अन्य LSL-समर्थित डिवाइसेस द्वारा खोजी जा सकती हैं - LSL एक सामान्य क्लॉक (नेटवर्क टाइम प्रोटोकॉल के बाद) के आधार पर प्रत्येक डेटा चंक या सैंपल को एक टाइमस्टैम्प असाइन करता है। - स्ट्रीम को एक "आउटलेट" के माध्यम से सैंपल-दर-सैंपल (या चंक-दर-चंक) पुश किया जाता है

3. कलेक्शन डिवाइस डेटा स्ट्रीम को "सब्सक्राइब" करते हैं - LSL का उपयोग करके डेटा इसी तरह प्राप्त किया जाता है - उसी नेटवर्क पर कलेक्शन डिवाइसेस "इनलेट्स" के माध्यम से पब्लिश की गई डेटा स्ट्रीम प्राप्त करते हैं। - प्रत्येक इनलेट केवल एक आउटलेट से स्ट्रीम सैंपल और मेटाडेटा प्राप्त करता है

4. डेटा सुरक्षित करें (Save data) - डेटा स्ट्रीम को सब्सक्राइब करने पर, आप इसे अपनी पसंदीदा प्रोग्रामिंग भाषा में एक वेरिएबल में सहेज सकते हैं, या इसे .xdf जैसे मानक फॉर्मेट में सहेजने के लिए LSL द्वारा प्रदान किए गए LabRecorder सॉफ़्टवेयर का उपयोग कर सकते हैं।

2.0 ट्यूटोरियल विवरण

इस ट्यूटोरियल में, हम एक उदाहरण प्रयोग सेटअप लेंगे और Python में LSL का उपयोग करके इसे लागू करने के लिए आवश्यक चरणों और कोड के बारे में आपका मार्गदर्शन करेंगे। हम Emotiv हेडसेट पहने दो लोगों से EEG डेटा एकत्र करते समय ध्वनि चलाने के लिए Python का उपयोग करेंगे। हम EEG डेटा एकत्र करने के लिए EmotivPRO चलाने वाले दो कंप्यूटरों का उपयोग करेंगे, और प्रत्येक स्ट्रीम को एक अलग LSL आउटलेट के माध्यम से ब्रॉडकास्ट करेंगे। हम ऑडियो फ़ाइल चलाने के लिए एक Python लाइब्रेरी का उपयोग करेंगे और साथ ही हर बार फ़ाइल शुरू होने पर एक ट्रिगर भेजेंगे।

कदम:

1. EEG डेटा (और/या मोशन, कांटेक्ट क्वालिटी, सिग्नल क्वालिटी आदि) को शामिल करने वाले LSL आउटलेट के माध्यम से डेटा स्ट्रीम करने के लिए EmotivPRO का उपयोग करें। 2. Python स्क्रिप्ट का उपयोग करके एक ऑडियो ट्रैक चलाएं, और साथ ही एक LSL इनलेट के माध्यम से तीनों डेटा स्ट्रीम को कैप्चर और सेव करने के लिए LabRecorder का उपयोग करके दूसरे LSL के माध्यम से एक ट्रिगर भेजें।

2.1 स्टेप 1 - सेटअप और इंस्टॉल

  1. डेटा एकत्र करने के लिए आपको समर्थित डेटा एक्विजिशन डिवाइसेस की आवश्यकता होगी
    • Emotiv के सभी ब्रेनवेयर डिवाइसेस EmotivPRO सॉफ़्टवेयर के माध्यम से LSL से जुड़ते हैं

  2. अपने डिवाइस पर EmotivPRO इंस्टॉल करें। LSL का उपयोग करने के लिए आपको एक वैध EmotivPRO लाइसेंस की आवश्यकता होगी।

  3. निम्नलिखित कमांड के साथ Python LSL लाइब्रेरी इंस्टॉल करें:
    pip install pylsl

  4. LabRecorder सॉफ़्टवेयर डाउनलोड करें। यह एक सरल, निःशुल्क ऐप है जिसे कमांड लाइन से या स्टैंडअलोन डाउनलोड का उपयोग करके चलाया जा सकता है

  5. हमारे प्रयोग के लिए : Python का उपयोग करके ऑडियो चलाने के लिए आवश्यक पैकेज इंस्टॉल करें
    pip install sounddevice soundfile

2.2 स्टेप 3 - EmotivPRO से LSL स्ट्रीम के माध्यम से डेटा भेजें

  1. ऐप के ऊपरी दाएं कोने में "..." ढूंढें, सेटिंग्स पर जाएं

  2. 'Lab Streaming Layer' सेक्शन और 'Outlet' सब-सेक्शन ढूंढें

  3. उन सभी डेटा प्रकारों (datatypes) को चुनें जिन्हें आप ब्रॉडकास्ट करना चाहते हैं

  4. डेटा फॉर्मेट चुनें (32-बिट फ्लोट या 64-बिट डबल)

  5. चुनें कि डेटा सैंपल-दर-सैंपल भेजना है या सैंपल के चंक्स में

  6. LSL डेटा स्ट्रीम ब्रॉडकास्ट करने के लिए 'Start' पर क्लिक करें


2.3 स्टेप 4 - ऑडियो चलाने और ट्रिगर भेजने के लिए Python स्क्रिप्ट का उपयोग करें

  1. निम्नलिखित कोडब्लॉक को कॉपी करके एक python फ़ाइल में पेस्ट करें और इसे अपने कंप्यूटर पर सहेजें।

  2. एक ऑडियो फ़ाइल (आदर्श रूप से एक .wav फ़ाइल) ढूंढें जिसे आप चलाना चाहते हैं और स्क्रिप्ट में वेरिएबल audio_filepath को अपने कंप्यूटर पर अपनी ऑडियो फ़ाइल के फ़ाइलपथ से बदलकर संपादित करें

  3. कमांड लाइन के साथ इंटरैक्ट करने के लिए एक कमांड प्रॉम्प्ट खोलें और उस फ़ोल्डर पर जाएं जहाँ आपकी Python फ़ाइल संग्रहीत है

  4. दर्ज करें: python3 filename.py
    • आपके Python इंस्टॉल के आधार पर, आप python3 के बजाय python का उपयोग कर सकते हैं

    नोट: /path/to/audio.wav को उस ऑडियो फ़ाइल के स्थान से बदलें जिसे आप अपने प्रयोग के दौरान चलाना चाहते हैं।

"""
LSL Example: Play audio and send a trigger marker

This script creates an LSL marker stream, waits for the user to
press ENTER, then plays an audio file and sends a marker that
can be synchronized with EEG data collected through LabRecorder.
"""

import sounddevice as sd
import soundfile as sf
from pylsl import StreamInfo, StreamOutlet


def wait_for_keypress():
    print("Press ENTER to start audio playback and send an LSL marker.")
    while True:
        if input() == "":
            break


def play_audio_and_send_marker(audio_file, outlet):
    data, fs = sf.read(audio_file)

    print("Playing audio and sending LSL marker...")

    marker_val = [1]
    outlet.push_sample(marker_val)

    sd.play(data, fs)
    sd.wait()

    print("Audio playback finished.")


if __name__ == "__main__":

    info = StreamInfo(
        name="AudioMarkers",
        type="Markers",
        channel_count=1,
        nominal_srate=0,
        channel_format="int32",
        source_id="uniqueMarkerID12345"
    )

    outlet = StreamOutlet(info)

    while True:
        wait_for_keypress()

        audio_filepath = "/path/to/audio.wav"

        play_audio_and_send_marker(
            audio_filepath,
            outlet
        )

2.4 स्टेप 5 - सभी LSL स्ट्रीम को देखने और सहेजने के लिए LabRecorder का उपयोग करें

  1. LabRecorder खोलें

  2. Update दबाएं। उपलब्ध LSL स्ट्रीम्स स्ट्रीम सूची में दिखाई देनी चाहिए
    • आपको दोनों EmotivPROs (आमतौर पर "Emotiv-DataStream" कहा जाता है) और मार्कर स्ट्रीम ("AudioMarkers" कहा जाता है) से स्ट्रीम देखने में सक्षम होना चाहिए

  3. डेटा स्टोर करने के लिए स्थान चुनने (और अन्य पैरामीटर सेट करने) के लिए Browse पर क्लिक करें

  4. सभी स्ट्रीम्स चुनें और रिकॉर्डिंग शुरू करने के लिए Record दबाएं

3.0 डेटा के साथ काम करना

LabRecorder एक XDF फ़ाइल (एक्सटेंसिबल डेटा फॉर्मेट) आउटपुट करता है जिसमें सभी स्ट्रीम्स का डेटा होता है। XDF फ़ाइलों को स्ट्रीम्स में संरचित किया जाता है, जिनमें से प्रत्येक में एक अलग हेडर होता है जो वर्णन करता है कि इसमें क्या है (डिवाइस का नाम, डेटा प्रकार, सैंपलिंग दर, चैनल और बहुत कुछ)। आप अपनी XDF फ़ाइल खोलने और कुछ बुनियादी जानकारी प्रदर्शित करने के लिए नीचे दिए गए कोडब्लॉक का उपयोग कर सकते हैं।

नोट: /path/to/your/file.xdf को अपनी LabRecorder XDF आउटपुट फ़ाइल के फ़ाइलपथ से बदलें।

import pyxdf
import mne
import matplotlib.pyplot as plt
import numpy as np

# Give the path to your LSL output file here.
data_path = "/path/to/your/file.xdf"

# Load the XDF file.
streams, fileheader = pyxdf.load_xdf(data_path)

print("XDF File Header:", fileheader)
print("Number of streams found:", len(streams))

for i, stream in enumerate(streams):
    print("\nStream", i + 1)
    print("Stream Name:", stream["info"]["name"][0])
    print("Stream Type:", stream["info"]["type"][0])
    print("Number of Channels:", stream["info"]["channel_count"][0])

    sfreq = float(stream["info"]["nominal_srate"][0])
    print("Sampling Rate:", sfreq)

    print("Number of Samples:", len(stream["time_series"]))
    print("First 5 data points:", stream["time_series"][:5])

    channel_names = [
        chan["label"][0]
        for chan in stream["info"]["desc"][0]["channels"][0]["channel"]
    ]

    print("Channel Names:", channel_names)

    channel_types = "eeg"


4.0 अतिरिक्त संसाधन

आधिकारिक दस्तावेज़

  1. GitHub पर आधिकारिक README फ़ाइल सहित ऑनलाइन दस्तावेज़ देखें

  2. अतिरिक्त संसाधन:
    • उदाहरण स्क्रिप्ट के साथ Emotiv के डिवाइसेस का उपयोग करके LSL चलाने के लिए कोड
    • YouTube पर उपयोगी LSL डेमो
    • सभी संबद्ध लाइब्रेरीज़ के लिए SCCN LSL GitHub रिपॉजिटरी
    • सबमोड्यूल्स और ऐप्स के संग्रह के लिए LSL GitHub रिपॉजिटरी

  3. हाइपरस्कैनिंग अध्ययनों के लिए HyPyP विश्लेषण पाइपलाइन

A technician fits an Emotiv saline EEG headset on a test participant.

पढ़ना जारी रखें

Basics of Neural Oscillations