
একাধিক ডেটা স্ট্রিম সিনক্রোনাইজ করার জন্য ল্যাব স্ট্রিমিং লেয়ার (LSL)
ডঃ রোশিনী রান্দেনিয়া এবং লুকাস ক্লাইন
সর্বশেষ আপডেট
১৭ মে, ২০২৪

একাধিক ডেটা স্ট্রিম সিনক্রোনাইজ করার জন্য ল্যাব স্ট্রিমিং লেয়ার (LSL)
ডঃ রোশিনী রান্দেনিয়া এবং লুকাস ক্লাইন
সর্বশেষ আপডেট
১৭ মে, ২০২৪

একাধিক ডেটা স্ট্রিম সিনক্রোনাইজ করার জন্য ল্যাব স্ট্রিমিং লেয়ার (LSL)
ডঃ রোশিনী রান্দেনিয়া এবং লুকাস ক্লাইন
সর্বশেষ আপডেট
১৭ মে, ২০২৪
স্বাগতম! এই টিউটোরিয়ালে আমরা শিখব কীভাবে একাধিক ডিভাইস থেকে Emotiv EEG ডাটা সংগ্রহ এবং সিঙ্ক্রোনাইজ করতে Python-এ ল্যাব স্ট্রিমিং লেয়ার (LSL) ব্যবহার করতে হয়। এর জন্য Python প্রোগ্রামিং ভাষার প্রাথমিক কার্যকারী জ্ঞান থাকা প্রয়োজন।
আপনি যা শিখবেন
ল্যাব স্ট্রিমিং লেয়ার (LSL) কী এবং গবেষকরা এটি কেন ব্যবহার করেন
কীভাবে একাধিক Emotiv EEG ডিভাইস থেকে সিঙ্ক্রোনাইজড ডাটা সংগ্রহ করতে হয়
কীভাবে সংগৃহীত ডাটা ইম্পোর্ট এবং পরীক্ষা করতে হয়
1.1 LSL কী এবং এটি কীসের জন্য ভালো?
ল্যাব স্ট্রিমিং লেয়ার (LSL) হল একটি ওপেন-সোর্স টুলবক্স যা বিভিন্ন সেন্সর হার্ডওয়্যার থেকে নিউরাল, ফিজিওলজিক্যাল এবং আচরণগত ডাটা স্ট্রিম পাঠাতে, গ্রহণ করতে এবং সিঙ্ক্রোনাইজ করতে ব্যবহার করা যেতে পারে। ক্রমবর্ধমানভাবে সক্ষম, সুনির্দিষ্ট এবং মোবাইল ব্রেন- ও বডি-সেন্সিং হার্ডওয়্যার ডিভাইসগুলি (যেমন Emotiv EEG সিস্টেম) নিউরোসায়েন্সকে ল্যাবের বাইরে রিয়েল-টাইম ডাটার জগতে নিয়ে আসছে। যেখানে EEG এবং MEG-এর মতো মস্তিষ্কের পরিমাপ একসময় গবেষণা ল্যাবগুলির মধ্যেই সীমাবদ্ধ ছিল, মোবাইল ডিভাইসগুলি আমাদের আরও স্বাভাবিক পরিবেশে এবং একসাথে একাধিক ব্যক্তির কাছ থেকে ডাটা সংগ্রহ করতে সাহায্য করে।
একজন গবেষক একই সঙ্গীত শোনার সময় দুইজনের মধ্যে শারীরবৃত্তীয় সিঙ্ক্রোনি বা সামঞ্জস্য নিয়ে আগ্রহী হতে পারেন। LSL আমাদের দুটি আলাদা EEG হেডসেট থেকে ডাটা সংগ্রহ করতে সাহায্য করতে পারে যা একই সাথে শব্দের উপস্থাপনের সাথেও সিঙ্ক্রোনাইজড থাকে।
LSL-এর অন্যান্য ব্যবহারের কিছু উদাহরণ:
একটি চলমান EEG ডাটায় কোনো পরীক্ষা থেকে ইভেন্ট মার্কার যুক্ত করা
একক অংশগ্রহীতার জন্য একাধিক উৎস থেকে প্রাপ্ত ডাটার সময় সারিবদ্ধ করা (যেমন হৃদস্পন্দন, EMG, EEG)
একাধিক অংশগ্রহীতার ডাটার সময় সারিবদ্ধ করা (যেমন EEG হাইপারস্ক্যানিং স্টাডিজ)
1.2 LSL কীভাবে কাজ করে?
ল্যাব স্ট্রিমিং লেয়ার হল একাধিক ডিভাইসের মধ্যে রিয়েল-টাইম টাইম-সিরিজ ডাটা আদান-প্রদানের একটি প্রোটোকল। Python, MATLAB, C++, Java এবং অন্যান্য প্রোগ্রামিং ভাষার ওপেন-সোর্স লাইব্রেরি ব্যবহার করে LSL কার্যকর করা যেতে পারে।

এর মূল কার্যকারিতা LSL ডাটা স্ট্রিম-কে কেন্দ্র করে আবর্তিত হয়:
1. একটি অ্যাকুইজিশন ডিভাইস/সফটওয়্যার ডাটা সংগ্রহ করে এবং একটি ডাটা স্ট্রিম তৈরি করে - ফিজিওলজিক্যাল ডাটা EEG রেকর্ডিং ডিভাইস, আই-ট্যাকার, মোশন ক্যাপচার সিস্টেম, হার্ট রেট মনিটর ইত্যাদি থেকে মেটাডাটা (স্যাম্পলিং রেট, ডাটার ধরন, চ্যানেল ইনফরমেশন ইত্যাদি) সহ LSL-এ স্ট্রিম করা যেতে পারে - পরীক্ষা থেকে পাওয়া ইভেন্ট মার্কারগুলোও (যেমন PsychoPy ব্যবহার করে) LSL ব্যবহার করে ডাটা স্ট্রিম হিসেবে পাঠানো যেতে পারে
2. ডাটা স্ট্রিমটি নেটওয়ার্কে প্রকাশিত (published) হয় - LSL ব্যবহার করে এভাবেই ডাটা পাঠানো হয়; ডাটা স্ট্রিমটি নেটওয়ার্কে "ব্রডকাস্ট" হয় - প্রকাশিত স্ট্রিমগুলো নেটওয়ার্কে উপলব্ধ থাকে এবং একই নেটওয়ার্কের অন্যান্য LSL-সমর্থিত ডিভাইসগুলো তা সনাক্ত করতে পারে - LSL একটি সাধারণ ঘড়ির ওপর ভিত্তি করে (নেটওয়ার্ক টাইম প্রোটোকল অনুসরন করে) প্রতিটি ডাটা চাঙ্ক বা স্যাম্পলকে একটি টাইমস্ট্যাম্প বরাদ্দ করে। - স্ট্রিমটি একটি "আউটলেট"-এর মাধ্যমে স্যাম্পল-বাই-স্যাম্পল (অথবা চাঙ্ক-বাই-চাঙ্ক) পুশ করা হয়
3. সংগ্রহকারী ডিভাইস(গুলি) ডাটা স্ট্রিম(গুলি)-তে "সাবস্ক্রাইব" করে - LSL ব্যবহার করে এভাবেই ডাটা গ্রহণ করা হয় - একই নেটওয়ার্কে থাকা সংগ্রহকারী ডিভাইসগুলো "ইনলেট"-এর মাধ্যমে প্রকাশিত ডাটা স্ট্রিম গ্রহণ করে। - প্রতিটি ইনলেট শুধুমাত্র একটি আউটলেট থেকে স্ট্রিম স্যাম্পল এবং মেটাডাটা গ্রহণ করে
4. ডাটা সংরক্ষণ করুন - একটি ডাটা স্ট্রিমে সাবস্ক্রাইব করার পরে, আপনি এটিকে আপনার পছন্দের প্রোগ্রামিং ভাষার একটি ভেরিয়েবলে সংরক্ষণ করতে পারেন, অথবা এটিকে .xdf-এর মতো একটি স্ট্যান্ডার্ড ফরম্যাটে সংরক্ষণ করতে LSL-এর দেওয়া LabRecorder সফটওয়্যার ব্যবহার করতে পারেন।
2.0 টিউটোরিয়াল ওভারভিউ
এই টিউটোরিয়ালে, আমরা একটি পরীক্ষামূলক সেটআপের উদাহরণ নেব এবং Python-এ LSL ব্যবহার করে এটি বাস্তবায়নের প্রয়োজনীয় ধাপ এবং কোডের মাধ্যমে আপনাকে গাইড করব। Emotiv হেডসেট পরিহিত দুই ব্যক্তির থেকে EEG ডাটা সংগ্রহ করার সময় একটি শব্দ বাজাতে আমরা Python ব্যবহার করব। আমরা EEG ডাটা সংগ্রহ করতে দুটি কম্পিউটার ব্যবহার করব যেগুলোর প্রতিটিতে EmotivPRO রান করছে এবং প্রতিটি স্ট্রিমকে একটি আলাদা LSL আউটলেটের মাধ্যমে ব্রডকাস্ট করব। আমরা একটি অডিও ফাইল বাজাতে এবং ফাইলটি শুরু হওয়ার সাথে সাথে একটি ট্রিগার পাঠাতে একটি Python লাইব্রেরি ব্যবহার করব।
ধাপসমূহ:
1. LSL আউটলেটের মাধ্যমে ডাটা স্ট্রিম করতে EmotivPRO ব্যবহার করুন যার মধ্যে EEG ডাটা (এবং/অথবা মোশন, কনট্যাক্ট কোয়ালিটি, সিগন্যাল কোয়ালিটি ইত্যাদি) অন্তর্ভুক্ত থাকবে। 2. একটি Python স্ক্রিপ্ট ব্যবহার করে একটি অডিও ট্র্যাক প্লে করুন এবং একই সাথে অন্য একটি LSL-এর মাধ্যমে একটি ট্রিগার পাঠান। একটি LSL ইনলেটের মাধ্যমে তিনটি ডাটা স্ট্রিমই ক্যাপচার এবং সেভ করতে LabRecorder ব্যবহার করুন।

2.1 ধাপ ১ - সেটআপ এবং ইনস্টল
ডাটা সংগ্রহের জন্য আপনার সমর্থিত ডাটা অ্যাকুইজিশন ডিভাইসের প্রয়োজন হবে
• Emotiv-এর সমস্ত ব্রেইনওয়্যার ডিভাইস EmotivPRO সফটওয়্যারের মাধ্যমে LSL-এর সাথে কানেক্ট হয়আপনার ডিভাইসে EmotivPRO ইনস্টল করুন। LSL ব্যবহার করার জন্য আপনার একটি বৈধ EmotivPRO লাইসেন্স প্রয়োজন হবে।
নিম্নলিখিত কমান্ডটি দিয়ে Python LSL লাইব্রেরি ইনস্টল করুন:
pip install pylslLabRecorder সফটওয়্যারটি ডাউনলোড করুন। এটি একটি সহজ, বিনামূল্যের অ্যাপ যা কমান্ড লাইন থেকে বা একটি স্ট্যান্ডঅ্যালোন ডাউনলোড ব্যবহার করে চালানো যেতে পারে
আমাদের পরীক্ষার জন্য: Python ব্যবহার করে অডিও প্লে করার জন্য প্রয়োজনীয় প্যাকেজগুলো ইনস্টল করুন
pip install sounddevice soundfile
2.2 ধাপ ৩ - EmotivPRO থেকে একটি LSL স্ট্রিমের মাধ্যমে ডাটা পাঠান
অ্যাপের উপরের ডান কোণায় "..." আইকনটি খুঁজুন এবং Settings-এ যান
‘Lab Streaming Layer’ সেকশন এবং ‘Outlet’ সাবসেকশনটি খুঁজুন
আপনি যে ধরনের ডাটা ব্রডকাস্ট করতে চান সেই সমস্ত ডাটাটাইপ সিলেক্ট করুন
ডাটা ফরম্যাট সিলেক্ট করুন (32-bit float বা 64-bit double)
ডাটা স্যাম্পল-বাই-স্যাম্পল নাকি স্যাম্পলের চাঙ্ক আকারে পাঠানো হবে তা সিলেক্ট করুন
LSL ডাটা স্ট্রিম ব্রডকাস্ট করতে ‘Start’ ক্লিক করুন
2.3 ধাপ ৪ - অডিও প্লে করতে এবং ট্রিগার পাঠাতে একটি Python স্ক্রিপ্ট ব্যবহার করুন
নিচের কোডব্লকটি কপি করে একটি python ফাইলে পেস্ট করুন এবং আপনার কম্পিউটারে সেভ করুন।
আপনি যে অডিও ফাইলটি (আদর্শভাবে একটি .wav ফাইল) প্লে করতে চান তা সন্ধান করুন এবং
audio_filepathভেরিয়েবলটি আপনার কম্পিউটারে থাকা অডিও ফাইলের ফাইলপাথ দিয়ে পরিবর্তন করে স্ক্রিপ্টটি এডিট করুন।কমান্ড লাইনের সাথে ইন্টারঅ্যাক্ট করার জন্য একটি কমান্ড প্রম্পট খুলুন এবং যেখানে আপনার Python ফাইলটি সংরক্ষিত আছে সেই ফোল্ডারে যান
লিখুন:
python3 filename.py
• আপনার Python ইনস্টলেশনের ওপর নির্ভর করে, আপনিpython3-এর পরিবর্তেpythonব্যবহার করতে পারেন
নোট: আপনার পরীক্ষা চলাকালীন আপনি যে অডিও ফাইলটি প্লে করতে চান তার লোকেশন দিয়ে/path/to/audio.wavপরিবর্তন করুন।
""" ল্যাব স্ট্রিমিং লেয়ার (LSL) উদাহরণ: অডিও প্লে করুন এবং একটি ট্রিগার মার্কার পাঠান <p>এই স্ক্রিপ্টটি একটি LSL মার্কার স্ট্রিম তৈরি করে, ব্যবহারকারীকে<br>ENTER প্রেস করার জন্য অপেক্ষা করে, তারপর একটি অডিও ফাইল প্লে করে এবং একটি মার্কার পাঠায় যা<br>LabRecorder-এর মাধ্যমে সংগৃহীত EEG ডাটার সাথে সিঙ্ক্রোনাইজ করা যেতে পারে।<br>"""</p> <p>import sounddevice as sd<br>import soundfile as sf<br>from pylsl import StreamInfo, StreamOutlet</p> <p>def wait_for_keypress():<br>print("অডিও প্লেব্যাক শুরু করতে এবং একটি LSL মার্কার পাঠাতে ENTER প্রেস করুন।")<br>while True:<br>if input() == "":<br>break</p> <p>def play_audio_and_send_marker(audio_file, outlet):<br>data, fs = sf.read(audio_file)</p> <pre><code>print("অডিও চালানো হচ্ছে এবং LSL মার্কার পাঠানো হচ্ছে...") marker_val = [1] outlet.push_sample(marker_val) sd.play(data, fs) sd.wait() print("অডিও প্লেব্যাক শেষ হয়েছে।") </code></pre> <p>if <strong>name</strong> == "<strong>main</strong>":</p> <pre><code>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 )</code></pre><h2 dir="auto">2.4 ধাপ ৫ - সমস্ত LSL স্ট্রিম দেখতে এবং সেভ করতে LabRecorder ব্যবহার করুন</h2><ol dir="auto"><li data-preset-tag="p"><p>LabRecorder ওপেন করুন</p></li><li data-preset-tag="p"><p><code>Update</code> প্রেস করুন। উপলব্ধ LSL স্ট্রিমগুলো স্ট্রিম তালিকায় দেখা যাবে• আপনি উভয় EmotivPROs থেকে স্ট্রিম (সাধারণত “Emotiv-DataStream” বলা হয়) এবং মার্কার স্ট্রিম (“AudioMarkers” বলা হয়) দেখতে পাবেন</p></li><li data-preset-tag="p"><p>ডাটা সংগ্রহের জন্য একটি লোকেশন সিলেক্ট করতে (এবং অন্যান্য প্যারামিটার সেট করতে) <code>Browse</code> ক্লিক করুন</p></li><li data-preset-tag="p"><p>সমস্ত স্ট্রিম সিলেক্ট করুন এবং রেকর্ডিং শুরু করতে <code>Record</code> প্রেস করুন</p></li></ol><h2 dir="auto">3.0 ডাটা নিয়ে কাজ করা</h2><p dir="auto">LabRecorder একটি XDF ফাইল (এক্সটেনসিবল ডাটা ফরম্যাট) আউটপুট দেয় যাতে সমস্ত স্ট্রিমের ডাটা থাকে। XDF ফাইলগুলো স্ট্রিমে সাজানো থাকে, প্রতিটির একটি আলাদা হেডার থাকে যা বর্ণনা করে এর মধ্যে কী আছে (ডিভাইসের নাম, ডাটার ধরন, স্যাম্পলিং রেট, চ্যানেল এবং আরও অনেক কিছু)। আপনার XDF ফাইলটি খুলতে এবং কিছু প্রাথমিক তথ্য প্রদর্শন করতে আপনি নীচের কোডব্লকটি ব্যবহার করতে পারেন।</p><p dir="auto"><strong>নোট: </strong><code><strong>/path/to/your/file.xdf</strong></code><strong>-কে আপনার LabRecorder XDF আউটপুট ফাইলের ফাইলপাথ দিয়ে পরিবর্তন করুন।</strong></p><pre data-language="JSX"><code>import pyxdf </code></pre> <p>import mne<br>import matplotlib.pyplot as plt<br>import numpy as np</p> <h1>আপনার LSL আউটপুট ফাইলের পাথটি এখানে দিন।</h1> <p>data_path = "/path/to/your/file.xdf"</p> <h1>XDF ফাইলটি লোড করুন।</h1> <p>streams, fileheader = pyxdf.load_xdf(data_path)</p> <p>print("XDF File Header:", fileheader)<br>print("Number of streams found:", len(streams))</p> <p>for i, stream in enumerate(streams):<br>print("\nStream", i + 1)<br>print("Stream Name:", stream["info"]["name"][0])<br>print("Stream Type:", stream["info"]["type"][0])<br>print("Number of Channels:", stream["info"]["channel_count"][0])</p> <pre><code>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"</code></pre><h3 dir="auto"><br></h3><h2 dir="auto">4.0 অতিরিক্ত রিসোর্স</h2><h4 dir="auto">অফিসিয়াল ডকুমেন্টেশন</h4><ol dir="auto"><li data-preset-tag="p"><p>GitHub-এর অফিশিয়াল README ফাইলসহ <a href="1. Check out the online documentation, including the official README file on GitHub 2. Additional resources: • Code to run LSL using Emotiv’s devices, with example scripts • Useful LSL demo on YouTube • SCCN LSL GitHub repository for all associated libraries • LSL GitHub repository for a collection a submodules and apps 3. HyPyP analysis pipeline for Hyperscanning studies" target="_blank">অনলাইন ডকুমেন্টেশন</a> দেখতে পারেন <a href="https://github.com/sccn/labstreaminglayer/" target="_blank">GitHub-এর অফিসিয়াল README ফাইলটি</a></p></li><li data-preset-tag="p"><p>অতিরিক্ত রিসোর্স:<br>• উদাহরণ স্ক্রিপ্টসহ Emotiv-এর ডিভাইস ব্যবহার করে LSL রান করার <a href="https://github.com/Emotiv/labstreaminglayer" target="_blank">কোড</a><br>• YouTube-এ দরকারী <a href="https://www.youtube.com/watch?v=Y1at7yrcFW0&list=PLVnr33MP5RMRhGwY36zHHDOmAaYTB138D" target="_blank">LSL ডেমো</a><br>• সাথে সম্পৃক্ত সমস্ত লাইব্রেরির জন্য <a href="https://github.com/sccn/labstreaminglayer" target="_blank">SCCN LSL GitHub রিপোজিটরি</a><br>• সাবমডিউল এবং অ্যাপের সংগ্রহের জন্য <a href="https://github.com/labstreaminglayer" target="_blank">LSL GitHub রিপোজিটরি</a></p></li><li data-preset-tag="p"><p>হাইপারস্ক্যানিং স্টাডিজের জন্য <a href="https://academic.oup.com/scan/article/16/1-2/72/5919711?login=false" target="_blank">HyPyP বিশ্লেষণ পাইপলাইন (analysis pipeline)</a></p></li></ol
""" ল্যাব স্ট্রিমিং লেয়ার (LSL) উদাহরণ: অডিও প্লে করুন এবং একটি ট্রিগার মার্কার পাঠান <p>এই স্ক্রিপ্টটি একটি LSL মার্কার স্ট্রিম তৈরি করে, ব্যবহারকারীকে<br>ENTER প্রেস করার জন্য অপেক্ষা করে, তারপর একটি অডিও ফাইল প্লে করে এবং একটি মার্কার পাঠায় যা<br>LabRecorder-এর মাধ্যমে সংগৃহীত EEG ডাটার সাথে সিঙ্ক্রোনাইজ করা যেতে পারে।<br>"""</p> <p>import sounddevice as sd<br>import soundfile as sf<br>from pylsl import StreamInfo, StreamOutlet</p> <p>def wait_for_keypress():<br>print("অডিও প্লেব্যাক শুরু করতে এবং একটি LSL মার্কার পাঠাতে ENTER প্রেস করুন।")<br>while True:<br>if input() == "":<br>break</p> <p>def play_audio_and_send_marker(audio_file, outlet):<br>data, fs = sf.read(audio_file)</p> <pre><code>print("অডিও চালানো হচ্ছে এবং LSL মার্কার পাঠানো হচ্ছে...") marker_val = [1] outlet.push_sample(marker_val) sd.play(data, fs) sd.wait() print("অডিও প্লেব্যাক শেষ হয়েছে।") </code></pre> <p>if <strong>name</strong> == "<strong>main</strong>":</p> <pre><code>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 )</code></pre><h2 dir="auto">2.4 ধাপ ৫ - সমস্ত LSL স্ট্রিম দেখতে এবং সেভ করতে LabRecorder ব্যবহার করুন</h2><ol dir="auto"><li data-preset-tag="p"><p>LabRecorder ওপেন করুন</p></li><li data-preset-tag="p"><p><code>Update</code> প্রেস করুন। উপলব্ধ LSL স্ট্রিমগুলো স্ট্রিম তালিকায় দেখা যাবে• আপনি উভয় EmotivPROs থেকে স্ট্রিম (সাধারণত “Emotiv-DataStream” বলা হয়) এবং মার্কার স্ট্রিম (“AudioMarkers” বলা হয়) দেখতে পাবেন</p></li><li data-preset-tag="p"><p>ডাটা সংগ্রহের জন্য একটি লোকেশন সিলেক্ট করতে (এবং অন্যান্য প্যারামিটার সেট করতে) <code>Browse</code> ক্লিক করুন</p></li><li data-preset-tag="p"><p>সমস্ত স্ট্রিম সিলেক্ট করুন এবং রেকর্ডিং শুরু করতে <code>Record</code> প্রেস করুন</p></li></ol><h2 dir="auto">3.0 ডাটা নিয়ে কাজ করা</h2><p dir="auto">LabRecorder একটি XDF ফাইল (এক্সটেনসিবল ডাটা ফরম্যাট) আউটপুট দেয় যাতে সমস্ত স্ট্রিমের ডাটা থাকে। XDF ফাইলগুলো স্ট্রিমে সাজানো থাকে, প্রতিটির একটি আলাদা হেডার থাকে যা বর্ণনা করে এর মধ্যে কী আছে (ডিভাইসের নাম, ডাটার ধরন, স্যাম্পলিং রেট, চ্যানেল এবং আরও অনেক কিছু)। আপনার XDF ফাইলটি খুলতে এবং কিছু প্রাথমিক তথ্য প্রদর্শন করতে আপনি নীচের কোডব্লকটি ব্যবহার করতে পারেন।</p><p dir="auto"><strong>নোট: </strong><code><strong>/path/to/your/file.xdf</strong></code><strong>-কে আপনার LabRecorder XDF আউটপুট ফাইলের ফাইলপাথ দিয়ে পরিবর্তন করুন।</strong></p><pre data-language="JSX"><code>import pyxdf </code></pre> <p>import mne<br>import matplotlib.pyplot as plt<br>import numpy as np</p> <h1>আপনার LSL আউটপুট ফাইলের পাথটি এখানে দিন।</h1> <p>data_path = "/path/to/your/file.xdf"</p> <h1>XDF ফাইলটি লোড করুন।</h1> <p>streams, fileheader = pyxdf.load_xdf(data_path)</p> <p>print("XDF File Header:", fileheader)<br>print("Number of streams found:", len(streams))</p> <p>for i, stream in enumerate(streams):<br>print("\nStream", i + 1)<br>print("Stream Name:", stream["info"]["name"][0])<br>print("Stream Type:", stream["info"]["type"][0])<br>print("Number of Channels:", stream["info"]["channel_count"][0])</p> <pre><code>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"</code></pre><h3 dir="auto"><br></h3><h2 dir="auto">4.0 অতিরিক্ত রিসোর্স</h2><h4 dir="auto">অফিসিয়াল ডকুমেন্টেশন</h4><ol dir="auto"><li data-preset-tag="p"><p>GitHub-এর অফিশিয়াল README ফাইলসহ <a href="1. Check out the online documentation, including the official README file on GitHub 2. Additional resources: • Code to run LSL using Emotiv’s devices, with example scripts • Useful LSL demo on YouTube • SCCN LSL GitHub repository for all associated libraries • LSL GitHub repository for a collection a submodules and apps 3. HyPyP analysis pipeline for Hyperscanning studies" target="_blank">অনলাইন ডকুমেন্টেশন</a> দেখতে পারেন <a href="https://github.com/sccn/labstreaminglayer/" target="_blank">GitHub-এর অফিসিয়াল README ফাইলটি</a></p></li><li data-preset-tag="p"><p>অতিরিক্ত রিসোর্স:<br>• উদাহরণ স্ক্রিপ্টসহ Emotiv-এর ডিভাইস ব্যবহার করে LSL রান করার <a href="https://github.com/Emotiv/labstreaminglayer" target="_blank">কোড</a><br>• YouTube-এ দরকারী <a href="https://www.youtube.com/watch?v=Y1at7yrcFW0&list=PLVnr33MP5RMRhGwY36zHHDOmAaYTB138D" target="_blank">LSL ডেমো</a><br>• সাথে সম্পৃক্ত সমস্ত লাইব্রেরির জন্য <a href="https://github.com/sccn/labstreaminglayer" target="_blank">SCCN LSL GitHub রিপোজিটরি</a><br>• সাবমডিউল এবং অ্যাপের সংগ্রহের জন্য <a href="https://github.com/labstreaminglayer" target="_blank">LSL GitHub রিপোজিটরি</a></p></li><li data-preset-tag="p"><p>হাইপারস্ক্যানিং স্টাডিজের জন্য <a href="https://academic.oup.com/scan/article/16/1-2/72/5919711?login=false" target="_blank">HyPyP বিশ্লেষণ পাইপলাইন (analysis pipeline)</a></p></li></ol
""" ল্যাব স্ট্রিমিং লেয়ার (LSL) উদাহরণ: অডিও প্লে করুন এবং একটি ট্রিগার মার্কার পাঠান <p>এই স্ক্রিপ্টটি একটি LSL মার্কার স্ট্রিম তৈরি করে, ব্যবহারকারীকে<br>ENTER প্রেস করার জন্য অপেক্ষা করে, তারপর একটি অডিও ফাইল প্লে করে এবং একটি মার্কার পাঠায় যা<br>LabRecorder-এর মাধ্যমে সংগৃহীত EEG ডাটার সাথে সিঙ্ক্রোনাইজ করা যেতে পারে।<br>"""</p> <p>import sounddevice as sd<br>import soundfile as sf<br>from pylsl import StreamInfo, StreamOutlet</p> <p>def wait_for_keypress():<br>print("অডিও প্লেব্যাক শুরু করতে এবং একটি LSL মার্কার পাঠাতে ENTER প্রেস করুন।")<br>while True:<br>if input() == "":<br>break</p> <p>def play_audio_and_send_marker(audio_file, outlet):<br>data, fs = sf.read(audio_file)</p> <pre><code>print("অডিও চালানো হচ্ছে এবং LSL মার্কার পাঠানো হচ্ছে...") marker_val = [1] outlet.push_sample(marker_val) sd.play(data, fs) sd.wait() print("অডিও প্লেব্যাক শেষ হয়েছে।") </code></pre> <p>if <strong>name</strong> == "<strong>main</strong>":</p> <pre><code>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 )</code></pre><h2 dir="auto">2.4 ধাপ ৫ - সমস্ত LSL স্ট্রিম দেখতে এবং সেভ করতে LabRecorder ব্যবহার করুন</h2><ol dir="auto"><li data-preset-tag="p"><p>LabRecorder ওপেন করুন</p></li><li data-preset-tag="p"><p><code>Update</code> প্রেস করুন। উপলব্ধ LSL স্ট্রিমগুলো স্ট্রিম তালিকায় দেখা যাবে• আপনি উভয় EmotivPROs থেকে স্ট্রিম (সাধারণত “Emotiv-DataStream” বলা হয়) এবং মার্কার স্ট্রিম (“AudioMarkers” বলা হয়) দেখতে পাবেন</p></li><li data-preset-tag="p"><p>ডাটা সংগ্রহের জন্য একটি লোকেশন সিলেক্ট করতে (এবং অন্যান্য প্যারামিটার সেট করতে) <code>Browse</code> ক্লিক করুন</p></li><li data-preset-tag="p"><p>সমস্ত স্ট্রিম সিলেক্ট করুন এবং রেকর্ডিং শুরু করতে <code>Record</code> প্রেস করুন</p></li></ol><h2 dir="auto">3.0 ডাটা নিয়ে কাজ করা</h2><p dir="auto">LabRecorder একটি XDF ফাইল (এক্সটেনসিবল ডাটা ফরম্যাট) আউটপুট দেয় যাতে সমস্ত স্ট্রিমের ডাটা থাকে। XDF ফাইলগুলো স্ট্রিমে সাজানো থাকে, প্রতিটির একটি আলাদা হেডার থাকে যা বর্ণনা করে এর মধ্যে কী আছে (ডিভাইসের নাম, ডাটার ধরন, স্যাম্পলিং রেট, চ্যানেল এবং আরও অনেক কিছু)। আপনার XDF ফাইলটি খুলতে এবং কিছু প্রাথমিক তথ্য প্রদর্শন করতে আপনি নীচের কোডব্লকটি ব্যবহার করতে পারেন।</p><p dir="auto"><strong>নোট: </strong><code><strong>/path/to/your/file.xdf</strong></code><strong>-কে আপনার LabRecorder XDF আউটপুট ফাইলের ফাইলপাথ দিয়ে পরিবর্তন করুন।</strong></p><pre data-language="JSX"><code>import pyxdf </code></pre> <p>import mne<br>import matplotlib.pyplot as plt<br>import numpy as np</p> <h1>আপনার LSL আউটপুট ফাইলের পাথটি এখানে দিন।</h1> <p>data_path = "/path/to/your/file.xdf"</p> <h1>XDF ফাইলটি লোড করুন।</h1> <p>streams, fileheader = pyxdf.load_xdf(data_path)</p> <p>print("XDF File Header:", fileheader)<br>print("Number of streams found:", len(streams))</p> <p>for i, stream in enumerate(streams):<br>print("\nStream", i + 1)<br>print("Stream Name:", stream["info"]["name"][0])<br>print("Stream Type:", stream["info"]["type"][0])<br>print("Number of Channels:", stream["info"]["channel_count"][0])</p> <pre><code>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"</code></pre><h3 dir="auto"><br></h3><h2 dir="auto">4.0 অতিরিক্ত রিসোর্স</h2><h4 dir="auto">অফিসিয়াল ডকুমেন্টেশন</h4><ol dir="auto"><li data-preset-tag="p"><p>GitHub-এর অফিশিয়াল README ফাইলসহ <a href="1. Check out the online documentation, including the official README file on GitHub 2. Additional resources: • Code to run LSL using Emotiv’s devices, with example scripts • Useful LSL demo on YouTube • SCCN LSL GitHub repository for all associated libraries • LSL GitHub repository for a collection a submodules and apps 3. HyPyP analysis pipeline for Hyperscanning studies" target="_blank">অনলাইন ডকুমেন্টেশন</a> দেখতে পারেন <a href="https://github.com/sccn/labstreaminglayer/" target="_blank">GitHub-এর অফিসিয়াল README ফাইলটি</a></p></li><li data-preset-tag="p"><p>অতিরিক্ত রিসোর্স:<br>• উদাহরণ স্ক্রিপ্টসহ Emotiv-এর ডিভাইস ব্যবহার করে LSL রান করার <a href="https://github.com/Emotiv/labstreaminglayer" target="_blank">কোড</a><br>• YouTube-এ দরকারী <a href="https://www.youtube.com/watch?v=Y1at7yrcFW0&list=PLVnr33MP5RMRhGwY36zHHDOmAaYTB138D" target="_blank">LSL ডেমো</a><br>• সাথে সম্পৃক্ত সমস্ত লাইব্রেরির জন্য <a href="https://github.com/sccn/labstreaminglayer" target="_blank">SCCN LSL GitHub রিপোজিটরি</a><br>• সাবমডিউল এবং অ্যাপের সংগ্রহের জন্য <a href="https://github.com/labstreaminglayer" target="_blank">LSL GitHub রিপোজিটরি</a></p></li><li data-preset-tag="p"><p>হাইপারস্ক্যানিং স্টাডিজের জন্য <a href="https://academic.oup.com/scan/article/16/1-2/72/5919711?login=false" target="_blank">HyPyP বিশ্লেষণ পাইপলাইন (analysis pipeline)</a></p></li></ol
স্বাগতম! এই টিউটোরিয়ালে আমরা শিখব কীভাবে একাধিক ডিভাইস থেকে Emotiv EEG ডাটা সংগ্রহ এবং সিঙ্ক্রোনাইজ করতে Python-এ ল্যাব স্ট্রিমিং লেয়ার (LSL) ব্যবহার করতে হয়। এর জন্য Python প্রোগ্রামিং ভাষার প্রাথমিক কার্যকারী জ্ঞান থাকা প্রয়োজন।
আপনি যা শিখবেন
ল্যাব স্ট্রিমিং লেয়ার (LSL) কী এবং গবেষকরা এটি কেন ব্যবহার করেন
কীভাবে একাধিক Emotiv EEG ডিভাইস থেকে সিঙ্ক্রোনাইজড ডাটা সংগ্রহ করতে হয়
কীভাবে সংগৃহীত ডাটা ইম্পোর্ট এবং পরীক্ষা করতে হয়
1.1 LSL কী এবং এটি কীসের জন্য ভালো?
ল্যাব স্ট্রিমিং লেয়ার (LSL) হল একটি ওপেন-সোর্স টুলবক্স যা বিভিন্ন সেন্সর হার্ডওয়্যার থেকে নিউরাল, ফিজিওলজিক্যাল এবং আচরণগত ডাটা স্ট্রিম পাঠাতে, গ্রহণ করতে এবং সিঙ্ক্রোনাইজ করতে ব্যবহার করা যেতে পারে। ক্রমবর্ধমানভাবে সক্ষম, সুনির্দিষ্ট এবং মোবাইল ব্রেন- ও বডি-সেন্সিং হার্ডওয়্যার ডিভাইসগুলি (যেমন Emotiv EEG সিস্টেম) নিউরোসায়েন্সকে ল্যাবের বাইরে রিয়েল-টাইম ডাটার জগতে নিয়ে আসছে। যেখানে EEG এবং MEG-এর মতো মস্তিষ্কের পরিমাপ একসময় গবেষণা ল্যাবগুলির মধ্যেই সীমাবদ্ধ ছিল, মোবাইল ডিভাইসগুলি আমাদের আরও স্বাভাবিক পরিবেশে এবং একসাথে একাধিক ব্যক্তির কাছ থেকে ডাটা সংগ্রহ করতে সাহায্য করে।
একজন গবেষক একই সঙ্গীত শোনার সময় দুইজনের মধ্যে শারীরবৃত্তীয় সিঙ্ক্রোনি বা সামঞ্জস্য নিয়ে আগ্রহী হতে পারেন। LSL আমাদের দুটি আলাদা EEG হেডসেট থেকে ডাটা সংগ্রহ করতে সাহায্য করতে পারে যা একই সাথে শব্দের উপস্থাপনের সাথেও সিঙ্ক্রোনাইজড থাকে।
LSL-এর অন্যান্য ব্যবহারের কিছু উদাহরণ:
একটি চলমান EEG ডাটায় কোনো পরীক্ষা থেকে ইভেন্ট মার্কার যুক্ত করা
একক অংশগ্রহীতার জন্য একাধিক উৎস থেকে প্রাপ্ত ডাটার সময় সারিবদ্ধ করা (যেমন হৃদস্পন্দন, EMG, EEG)
একাধিক অংশগ্রহীতার ডাটার সময় সারিবদ্ধ করা (যেমন EEG হাইপারস্ক্যানিং স্টাডিজ)
1.2 LSL কীভাবে কাজ করে?
ল্যাব স্ট্রিমিং লেয়ার হল একাধিক ডিভাইসের মধ্যে রিয়েল-টাইম টাইম-সিরিজ ডাটা আদান-প্রদানের একটি প্রোটোকল। Python, MATLAB, C++, Java এবং অন্যান্য প্রোগ্রামিং ভাষার ওপেন-সোর্স লাইব্রেরি ব্যবহার করে LSL কার্যকর করা যেতে পারে।

এর মূল কার্যকারিতা LSL ডাটা স্ট্রিম-কে কেন্দ্র করে আবর্তিত হয়:
1. একটি অ্যাকুইজিশন ডিভাইস/সফটওয়্যার ডাটা সংগ্রহ করে এবং একটি ডাটা স্ট্রিম তৈরি করে - ফিজিওলজিক্যাল ডাটা EEG রেকর্ডিং ডিভাইস, আই-ট্যাকার, মোশন ক্যাপচার সিস্টেম, হার্ট রেট মনিটর ইত্যাদি থেকে মেটাডাটা (স্যাম্পলিং রেট, ডাটার ধরন, চ্যানেল ইনফরমেশন ইত্যাদি) সহ LSL-এ স্ট্রিম করা যেতে পারে - পরীক্ষা থেকে পাওয়া ইভেন্ট মার্কারগুলোও (যেমন PsychoPy ব্যবহার করে) LSL ব্যবহার করে ডাটা স্ট্রিম হিসেবে পাঠানো যেতে পারে
2. ডাটা স্ট্রিমটি নেটওয়ার্কে প্রকাশিত (published) হয় - LSL ব্যবহার করে এভাবেই ডাটা পাঠানো হয়; ডাটা স্ট্রিমটি নেটওয়ার্কে "ব্রডকাস্ট" হয় - প্রকাশিত স্ট্রিমগুলো নেটওয়ার্কে উপলব্ধ থাকে এবং একই নেটওয়ার্কের অন্যান্য LSL-সমর্থিত ডিভাইসগুলো তা সনাক্ত করতে পারে - LSL একটি সাধারণ ঘড়ির ওপর ভিত্তি করে (নেটওয়ার্ক টাইম প্রোটোকল অনুসরন করে) প্রতিটি ডাটা চাঙ্ক বা স্যাম্পলকে একটি টাইমস্ট্যাম্প বরাদ্দ করে। - স্ট্রিমটি একটি "আউটলেট"-এর মাধ্যমে স্যাম্পল-বাই-স্যাম্পল (অথবা চাঙ্ক-বাই-চাঙ্ক) পুশ করা হয়
3. সংগ্রহকারী ডিভাইস(গুলি) ডাটা স্ট্রিম(গুলি)-তে "সাবস্ক্রাইব" করে - LSL ব্যবহার করে এভাবেই ডাটা গ্রহণ করা হয় - একই নেটওয়ার্কে থাকা সংগ্রহকারী ডিভাইসগুলো "ইনলেট"-এর মাধ্যমে প্রকাশিত ডাটা স্ট্রিম গ্রহণ করে। - প্রতিটি ইনলেট শুধুমাত্র একটি আউটলেট থেকে স্ট্রিম স্যাম্পল এবং মেটাডাটা গ্রহণ করে
4. ডাটা সংরক্ষণ করুন - একটি ডাটা স্ট্রিমে সাবস্ক্রাইব করার পরে, আপনি এটিকে আপনার পছন্দের প্রোগ্রামিং ভাষার একটি ভেরিয়েবলে সংরক্ষণ করতে পারেন, অথবা এটিকে .xdf-এর মতো একটি স্ট্যান্ডার্ড ফরম্যাটে সংরক্ষণ করতে LSL-এর দেওয়া LabRecorder সফটওয়্যার ব্যবহার করতে পারেন।
2.0 টিউটোরিয়াল ওভারভিউ
এই টিউটোরিয়ালে, আমরা একটি পরীক্ষামূলক সেটআপের উদাহরণ নেব এবং Python-এ LSL ব্যবহার করে এটি বাস্তবায়নের প্রয়োজনীয় ধাপ এবং কোডের মাধ্যমে আপনাকে গাইড করব। Emotiv হেডসেট পরিহিত দুই ব্যক্তির থেকে EEG ডাটা সংগ্রহ করার সময় একটি শব্দ বাজাতে আমরা Python ব্যবহার করব। আমরা EEG ডাটা সংগ্রহ করতে দুটি কম্পিউটার ব্যবহার করব যেগুলোর প্রতিটিতে EmotivPRO রান করছে এবং প্রতিটি স্ট্রিমকে একটি আলাদা LSL আউটলেটের মাধ্যমে ব্রডকাস্ট করব। আমরা একটি অডিও ফাইল বাজাতে এবং ফাইলটি শুরু হওয়ার সাথে সাথে একটি ট্রিগার পাঠাতে একটি Python লাইব্রেরি ব্যবহার করব।
ধাপসমূহ:
1. LSL আউটলেটের মাধ্যমে ডাটা স্ট্রিম করতে EmotivPRO ব্যবহার করুন যার মধ্যে EEG ডাটা (এবং/অথবা মোশন, কনট্যাক্ট কোয়ালিটি, সিগন্যাল কোয়ালিটি ইত্যাদি) অন্তর্ভুক্ত থাকবে। 2. একটি Python স্ক্রিপ্ট ব্যবহার করে একটি অডিও ট্র্যাক প্লে করুন এবং একই সাথে অন্য একটি LSL-এর মাধ্যমে একটি ট্রিগার পাঠান। একটি LSL ইনলেটের মাধ্যমে তিনটি ডাটা স্ট্রিমই ক্যাপচার এবং সেভ করতে LabRecorder ব্যবহার করুন।

2.1 ধাপ ১ - সেটআপ এবং ইনস্টল
ডাটা সংগ্রহের জন্য আপনার সমর্থিত ডাটা অ্যাকুইজিশন ডিভাইসের প্রয়োজন হবে
• Emotiv-এর সমস্ত ব্রেইনওয়্যার ডিভাইস EmotivPRO সফটওয়্যারের মাধ্যমে LSL-এর সাথে কানেক্ট হয়আপনার ডিভাইসে EmotivPRO ইনস্টল করুন। LSL ব্যবহার করার জন্য আপনার একটি বৈধ EmotivPRO লাইসেন্স প্রয়োজন হবে।
নিম্নলিখিত কমান্ডটি দিয়ে Python LSL লাইব্রেরি ইনস্টল করুন:
pip install pylslLabRecorder সফটওয়্যারটি ডাউনলোড করুন। এটি একটি সহজ, বিনামূল্যের অ্যাপ যা কমান্ড লাইন থেকে বা একটি স্ট্যান্ডঅ্যালোন ডাউনলোড ব্যবহার করে চালানো যেতে পারে
আমাদের পরীক্ষার জন্য: Python ব্যবহার করে অডিও প্লে করার জন্য প্রয়োজনীয় প্যাকেজগুলো ইনস্টল করুন
pip install sounddevice soundfile
2.2 ধাপ ৩ - EmotivPRO থেকে একটি LSL স্ট্রিমের মাধ্যমে ডাটা পাঠান
অ্যাপের উপরের ডান কোণায় "..." আইকনটি খুঁজুন এবং Settings-এ যান
‘Lab Streaming Layer’ সেকশন এবং ‘Outlet’ সাবসেকশনটি খুঁজুন
আপনি যে ধরনের ডাটা ব্রডকাস্ট করতে চান সেই সমস্ত ডাটাটাইপ সিলেক্ট করুন
ডাটা ফরম্যাট সিলেক্ট করুন (32-bit float বা 64-bit double)
ডাটা স্যাম্পল-বাই-স্যাম্পল নাকি স্যাম্পলের চাঙ্ক আকারে পাঠানো হবে তা সিলেক্ট করুন
LSL ডাটা স্ট্রিম ব্রডকাস্ট করতে ‘Start’ ক্লিক করুন
2.3 ধাপ ৪ - অডিও প্লে করতে এবং ট্রিগার পাঠাতে একটি Python স্ক্রিপ্ট ব্যবহার করুন
নিচের কোডব্লকটি কপি করে একটি python ফাইলে পেস্ট করুন এবং আপনার কম্পিউটারে সেভ করুন।
আপনি যে অডিও ফাইলটি (আদর্শভাবে একটি .wav ফাইল) প্লে করতে চান তা সন্ধান করুন এবং
audio_filepathভেরিয়েবলটি আপনার কম্পিউটারে থাকা অডিও ফাইলের ফাইলপাথ দিয়ে পরিবর্তন করে স্ক্রিপ্টটি এডিট করুন।কমান্ড লাইনের সাথে ইন্টারঅ্যাক্ট করার জন্য একটি কমান্ড প্রম্পট খুলুন এবং যেখানে আপনার Python ফাইলটি সংরক্ষিত আছে সেই ফোল্ডারে যান
লিখুন:
python3 filename.py
• আপনার Python ইনস্টলেশনের ওপর নির্ভর করে, আপনিpython3-এর পরিবর্তেpythonব্যবহার করতে পারেন
নোট: আপনার পরীক্ষা চলাকালীন আপনি যে অডিও ফাইলটি প্লে করতে চান তার লোকেশন দিয়ে/path/to/audio.wavপরিবর্তন করুন।
""" ল্যাব স্ট্রিমিং লেয়ার (LSL) উদাহরণ: অডিও প্লে করুন এবং একটি ট্রিগার মার্কার পাঠান <p>এই স্ক্রিপ্টটি একটি LSL মার্কার স্ট্রিম তৈরি করে, ব্যবহারকারীকে<br>ENTER প্রেস করার জন্য অপেক্ষা করে, তারপর একটি অডিও ফাইল প্লে করে এবং একটি মার্কার পাঠায় যা<br>LabRecorder-এর মাধ্যমে সংগৃহীত EEG ডাটার সাথে সিঙ্ক্রোনাইজ করা যেতে পারে।<br>"""</p> <p>import sounddevice as sd<br>import soundfile as sf<br>from pylsl import StreamInfo, StreamOutlet</p> <p>def wait_for_keypress():<br>print("অডিও প্লেব্যাক শুরু করতে এবং একটি LSL মার্কার পাঠাতে ENTER প্রেস করুন।")<br>while True:<br>if input() == "":<br>break</p> <p>def play_audio_and_send_marker(audio_file, outlet):<br>data, fs = sf.read(audio_file)</p> <pre><code>print("অডিও চালানো হচ্ছে এবং LSL মার্কার পাঠানো হচ্ছে...") marker_val = [1] outlet.push_sample(marker_val) sd.play(data, fs) sd.wait() print("অডিও প্লেব্যাক শেষ হয়েছে।") </code></pre> <p>if <strong>name</strong> == "<strong>main</strong>":</p> <pre><code>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 )</code></pre><h2 dir="auto">2.4 ধাপ ৫ - সমস্ত LSL স্ট্রিম দেখতে এবং সেভ করতে LabRecorder ব্যবহার করুন</h2><ol dir="auto"><li data-preset-tag="p"><p>LabRecorder ওপেন করুন</p></li><li data-preset-tag="p"><p><code>Update</code> প্রেস করুন। উপলব্ধ LSL স্ট্রিমগুলো স্ট্রিম তালিকায় দেখা যাবে• আপনি উভয় EmotivPROs থেকে স্ট্রিম (সাধারণত “Emotiv-DataStream” বলা হয়) এবং মার্কার স্ট্রিম (“AudioMarkers” বলা হয়) দেখতে পাবেন</p></li><li data-preset-tag="p"><p>ডাটা সংগ্রহের জন্য একটি লোকেশন সিলেক্ট করতে (এবং অন্যান্য প্যারামিটার সেট করতে) <code>Browse</code> ক্লিক করুন</p></li><li data-preset-tag="p"><p>সমস্ত স্ট্রিম সিলেক্ট করুন এবং রেকর্ডিং শুরু করতে <code>Record</code> প্রেস করুন</p></li></ol><h2 dir="auto">3.0 ডাটা নিয়ে কাজ করা</h2><p dir="auto">LabRecorder একটি XDF ফাইল (এক্সটেনসিবল ডাটা ফরম্যাট) আউটপুট দেয় যাতে সমস্ত স্ট্রিমের ডাটা থাকে। XDF ফাইলগুলো স্ট্রিমে সাজানো থাকে, প্রতিটির একটি আলাদা হেডার থাকে যা বর্ণনা করে এর মধ্যে কী আছে (ডিভাইসের নাম, ডাটার ধরন, স্যাম্পলিং রেট, চ্যানেল এবং আরও অনেক কিছু)। আপনার XDF ফাইলটি খুলতে এবং কিছু প্রাথমিক তথ্য প্রদর্শন করতে আপনি নীচের কোডব্লকটি ব্যবহার করতে পারেন।</p><p dir="auto"><strong>নোট: </strong><code><strong>/path/to/your/file.xdf</strong></code><strong>-কে আপনার LabRecorder XDF আউটপুট ফাইলের ফাইলপাথ দিয়ে পরিবর্তন করুন।</strong></p><pre data-language="JSX"><code>import pyxdf </code></pre> <p>import mne<br>import matplotlib.pyplot as plt<br>import numpy as np</p> <h1>আপনার LSL আউটপুট ফাইলের পাথটি এখানে দিন।</h1> <p>data_path = "/path/to/your/file.xdf"</p> <h1>XDF ফাইলটি লোড করুন।</h1> <p>streams, fileheader = pyxdf.load_xdf(data_path)</p> <p>print("XDF File Header:", fileheader)<br>print("Number of streams found:", len(streams))</p> <p>for i, stream in enumerate(streams):<br>print("\nStream", i + 1)<br>print("Stream Name:", stream["info"]["name"][0])<br>print("Stream Type:", stream["info"]["type"][0])<br>print("Number of Channels:", stream["info"]["channel_count"][0])</p> <pre><code>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"</code></pre><h3 dir="auto"><br></h3><h2 dir="auto">4.0 অতিরিক্ত রিসোর্স</h2><h4 dir="auto">অফিসিয়াল ডকুমেন্টেশন</h4><ol dir="auto"><li data-preset-tag="p"><p>GitHub-এর অফিশিয়াল README ফাইলসহ <a href="1. Check out the online documentation, including the official README file on GitHub 2. Additional resources: • Code to run LSL using Emotiv’s devices, with example scripts • Useful LSL demo on YouTube • SCCN LSL GitHub repository for all associated libraries • LSL GitHub repository for a collection a submodules and apps 3. HyPyP analysis pipeline for Hyperscanning studies" target="_blank">অনলাইন ডকুমেন্টেশন</a> দেখতে পারেন <a href="https://github.com/sccn/labstreaminglayer/" target="_blank">GitHub-এর অফিসিয়াল README ফাইলটি</a></p></li><li data-preset-tag="p"><p>অতিরিক্ত রিসোর্স:<br>• উদাহরণ স্ক্রিপ্টসহ Emotiv-এর ডিভাইস ব্যবহার করে LSL রান করার <a href="https://github.com/Emotiv/labstreaminglayer" target="_blank">কোড</a><br>• YouTube-এ দরকারী <a href="https://www.youtube.com/watch?v=Y1at7yrcFW0&list=PLVnr33MP5RMRhGwY36zHHDOmAaYTB138D" target="_blank">LSL ডেমো</a><br>• সাথে সম্পৃক্ত সমস্ত লাইব্রেরির জন্য <a href="https://github.com/sccn/labstreaminglayer" target="_blank">SCCN LSL GitHub রিপোজিটরি</a><br>• সাবমডিউল এবং অ্যাপের সংগ্রহের জন্য <a href="https://github.com/labstreaminglayer" target="_blank">LSL GitHub রিপোজিটরি</a></p></li><li data-preset-tag="p"><p>হাইপারস্ক্যানিং স্টাডিজের জন্য <a href="https://academic.oup.com/scan/article/16/1-2/72/5919711?login=false" target="_blank">HyPyP বিশ্লেষণ পাইপলাইন (analysis pipeline)</a></p></li></ol
স্বাগতম! এই টিউটোরিয়ালে আমরা শিখব কীভাবে একাধিক ডিভাইস থেকে Emotiv EEG ডাটা সংগ্রহ এবং সিঙ্ক্রোনাইজ করতে Python-এ ল্যাব স্ট্রিমিং লেয়ার (LSL) ব্যবহার করতে হয়। এর জন্য Python প্রোগ্রামিং ভাষার প্রাথমিক কার্যকারী জ্ঞান থাকা প্রয়োজন।
আপনি যা শিখবেন
ল্যাব স্ট্রিমিং লেয়ার (LSL) কী এবং গবেষকরা এটি কেন ব্যবহার করেন
কীভাবে একাধিক Emotiv EEG ডিভাইস থেকে সিঙ্ক্রোনাইজড ডাটা সংগ্রহ করতে হয়
কীভাবে সংগৃহীত ডাটা ইম্পোর্ট এবং পরীক্ষা করতে হয়
1.1 LSL কী এবং এটি কীসের জন্য ভালো?
ল্যাব স্ট্রিমিং লেয়ার (LSL) হল একটি ওপেন-সোর্স টুলবক্স যা বিভিন্ন সেন্সর হার্ডওয়্যার থেকে নিউরাল, ফিজিওলজিক্যাল এবং আচরণগত ডাটা স্ট্রিম পাঠাতে, গ্রহণ করতে এবং সিঙ্ক্রোনাইজ করতে ব্যবহার করা যেতে পারে। ক্রমবর্ধমানভাবে সক্ষম, সুনির্দিষ্ট এবং মোবাইল ব্রেন- ও বডি-সেন্সিং হার্ডওয়্যার ডিভাইসগুলি (যেমন Emotiv EEG সিস্টেম) নিউরোসায়েন্সকে ল্যাবের বাইরে রিয়েল-টাইম ডাটার জগতে নিয়ে আসছে। যেখানে EEG এবং MEG-এর মতো মস্তিষ্কের পরিমাপ একসময় গবেষণা ল্যাবগুলির মধ্যেই সীমাবদ্ধ ছিল, মোবাইল ডিভাইসগুলি আমাদের আরও স্বাভাবিক পরিবেশে এবং একসাথে একাধিক ব্যক্তির কাছ থেকে ডাটা সংগ্রহ করতে সাহায্য করে।
একজন গবেষক একই সঙ্গীত শোনার সময় দুইজনের মধ্যে শারীরবৃত্তীয় সিঙ্ক্রোনি বা সামঞ্জস্য নিয়ে আগ্রহী হতে পারেন। LSL আমাদের দুটি আলাদা EEG হেডসেট থেকে ডাটা সংগ্রহ করতে সাহায্য করতে পারে যা একই সাথে শব্দের উপস্থাপনের সাথেও সিঙ্ক্রোনাইজড থাকে।
LSL-এর অন্যান্য ব্যবহারের কিছু উদাহরণ:
একটি চলমান EEG ডাটায় কোনো পরীক্ষা থেকে ইভেন্ট মার্কার যুক্ত করা
একক অংশগ্রহীতার জন্য একাধিক উৎস থেকে প্রাপ্ত ডাটার সময় সারিবদ্ধ করা (যেমন হৃদস্পন্দন, EMG, EEG)
একাধিক অংশগ্রহীতার ডাটার সময় সারিবদ্ধ করা (যেমন EEG হাইপারস্ক্যানিং স্টাডিজ)
1.2 LSL কীভাবে কাজ করে?
ল্যাব স্ট্রিমিং লেয়ার হল একাধিক ডিভাইসের মধ্যে রিয়েল-টাইম টাইম-সিরিজ ডাটা আদান-প্রদানের একটি প্রোটোকল। Python, MATLAB, C++, Java এবং অন্যান্য প্রোগ্রামিং ভাষার ওপেন-সোর্স লাইব্রেরি ব্যবহার করে LSL কার্যকর করা যেতে পারে।

এর মূল কার্যকারিতা LSL ডাটা স্ট্রিম-কে কেন্দ্র করে আবর্তিত হয়:
1. একটি অ্যাকুইজিশন ডিভাইস/সফটওয়্যার ডাটা সংগ্রহ করে এবং একটি ডাটা স্ট্রিম তৈরি করে - ফিজিওলজিক্যাল ডাটা EEG রেকর্ডিং ডিভাইস, আই-ট্যাকার, মোশন ক্যাপচার সিস্টেম, হার্ট রেট মনিটর ইত্যাদি থেকে মেটাডাটা (স্যাম্পলিং রেট, ডাটার ধরন, চ্যানেল ইনফরমেশন ইত্যাদি) সহ LSL-এ স্ট্রিম করা যেতে পারে - পরীক্ষা থেকে পাওয়া ইভেন্ট মার্কারগুলোও (যেমন PsychoPy ব্যবহার করে) LSL ব্যবহার করে ডাটা স্ট্রিম হিসেবে পাঠানো যেতে পারে
2. ডাটা স্ট্রিমটি নেটওয়ার্কে প্রকাশিত (published) হয় - LSL ব্যবহার করে এভাবেই ডাটা পাঠানো হয়; ডাটা স্ট্রিমটি নেটওয়ার্কে "ব্রডকাস্ট" হয় - প্রকাশিত স্ট্রিমগুলো নেটওয়ার্কে উপলব্ধ থাকে এবং একই নেটওয়ার্কের অন্যান্য LSL-সমর্থিত ডিভাইসগুলো তা সনাক্ত করতে পারে - LSL একটি সাধারণ ঘড়ির ওপর ভিত্তি করে (নেটওয়ার্ক টাইম প্রোটোকল অনুসরন করে) প্রতিটি ডাটা চাঙ্ক বা স্যাম্পলকে একটি টাইমস্ট্যাম্প বরাদ্দ করে। - স্ট্রিমটি একটি "আউটলেট"-এর মাধ্যমে স্যাম্পল-বাই-স্যাম্পল (অথবা চাঙ্ক-বাই-চাঙ্ক) পুশ করা হয়
3. সংগ্রহকারী ডিভাইস(গুলি) ডাটা স্ট্রিম(গুলি)-তে "সাবস্ক্রাইব" করে - LSL ব্যবহার করে এভাবেই ডাটা গ্রহণ করা হয় - একই নেটওয়ার্কে থাকা সংগ্রহকারী ডিভাইসগুলো "ইনলেট"-এর মাধ্যমে প্রকাশিত ডাটা স্ট্রিম গ্রহণ করে। - প্রতিটি ইনলেট শুধুমাত্র একটি আউটলেট থেকে স্ট্রিম স্যাম্পল এবং মেটাডাটা গ্রহণ করে
4. ডাটা সংরক্ষণ করুন - একটি ডাটা স্ট্রিমে সাবস্ক্রাইব করার পরে, আপনি এটিকে আপনার পছন্দের প্রোগ্রামিং ভাষার একটি ভেরিয়েবলে সংরক্ষণ করতে পারেন, অথবা এটিকে .xdf-এর মতো একটি স্ট্যান্ডার্ড ফরম্যাটে সংরক্ষণ করতে LSL-এর দেওয়া LabRecorder সফটওয়্যার ব্যবহার করতে পারেন।
2.0 টিউটোরিয়াল ওভারভিউ
এই টিউটোরিয়ালে, আমরা একটি পরীক্ষামূলক সেটআপের উদাহরণ নেব এবং Python-এ LSL ব্যবহার করে এটি বাস্তবায়নের প্রয়োজনীয় ধাপ এবং কোডের মাধ্যমে আপনাকে গাইড করব। Emotiv হেডসেট পরিহিত দুই ব্যক্তির থেকে EEG ডাটা সংগ্রহ করার সময় একটি শব্দ বাজাতে আমরা Python ব্যবহার করব। আমরা EEG ডাটা সংগ্রহ করতে দুটি কম্পিউটার ব্যবহার করব যেগুলোর প্রতিটিতে EmotivPRO রান করছে এবং প্রতিটি স্ট্রিমকে একটি আলাদা LSL আউটলেটের মাধ্যমে ব্রডকাস্ট করব। আমরা একটি অডিও ফাইল বাজাতে এবং ফাইলটি শুরু হওয়ার সাথে সাথে একটি ট্রিগার পাঠাতে একটি Python লাইব্রেরি ব্যবহার করব।
ধাপসমূহ:
1. LSL আউটলেটের মাধ্যমে ডাটা স্ট্রিম করতে EmotivPRO ব্যবহার করুন যার মধ্যে EEG ডাটা (এবং/অথবা মোশন, কনট্যাক্ট কোয়ালিটি, সিগন্যাল কোয়ালিটি ইত্যাদি) অন্তর্ভুক্ত থাকবে। 2. একটি Python স্ক্রিপ্ট ব্যবহার করে একটি অডিও ট্র্যাক প্লে করুন এবং একই সাথে অন্য একটি LSL-এর মাধ্যমে একটি ট্রিগার পাঠান। একটি LSL ইনলেটের মাধ্যমে তিনটি ডাটা স্ট্রিমই ক্যাপচার এবং সেভ করতে LabRecorder ব্যবহার করুন।

2.1 ধাপ ১ - সেটআপ এবং ইনস্টল
ডাটা সংগ্রহের জন্য আপনার সমর্থিত ডাটা অ্যাকুইজিশন ডিভাইসের প্রয়োজন হবে
• Emotiv-এর সমস্ত ব্রেইনওয়্যার ডিভাইস EmotivPRO সফটওয়্যারের মাধ্যমে LSL-এর সাথে কানেক্ট হয়আপনার ডিভাইসে EmotivPRO ইনস্টল করুন। LSL ব্যবহার করার জন্য আপনার একটি বৈধ EmotivPRO লাইসেন্স প্রয়োজন হবে।
নিম্নলিখিত কমান্ডটি দিয়ে Python LSL লাইব্রেরি ইনস্টল করুন:
pip install pylslLabRecorder সফটওয়্যারটি ডাউনলোড করুন। এটি একটি সহজ, বিনামূল্যের অ্যাপ যা কমান্ড লাইন থেকে বা একটি স্ট্যান্ডঅ্যালোন ডাউনলোড ব্যবহার করে চালানো যেতে পারে
আমাদের পরীক্ষার জন্য: Python ব্যবহার করে অডিও প্লে করার জন্য প্রয়োজনীয় প্যাকেজগুলো ইনস্টল করুন
pip install sounddevice soundfile
2.2 ধাপ ৩ - EmotivPRO থেকে একটি LSL স্ট্রিমের মাধ্যমে ডাটা পাঠান
অ্যাপের উপরের ডান কোণায় "..." আইকনটি খুঁজুন এবং Settings-এ যান
‘Lab Streaming Layer’ সেকশন এবং ‘Outlet’ সাবসেকশনটি খুঁজুন
আপনি যে ধরনের ডাটা ব্রডকাস্ট করতে চান সেই সমস্ত ডাটাটাইপ সিলেক্ট করুন
ডাটা ফরম্যাট সিলেক্ট করুন (32-bit float বা 64-bit double)
ডাটা স্যাম্পল-বাই-স্যাম্পল নাকি স্যাম্পলের চাঙ্ক আকারে পাঠানো হবে তা সিলেক্ট করুন
LSL ডাটা স্ট্রিম ব্রডকাস্ট করতে ‘Start’ ক্লিক করুন
2.3 ধাপ ৪ - অডিও প্লে করতে এবং ট্রিগার পাঠাতে একটি Python স্ক্রিপ্ট ব্যবহার করুন
নিচের কোডব্লকটি কপি করে একটি python ফাইলে পেস্ট করুন এবং আপনার কম্পিউটারে সেভ করুন।
আপনি যে অডিও ফাইলটি (আদর্শভাবে একটি .wav ফাইল) প্লে করতে চান তা সন্ধান করুন এবং
audio_filepathভেরিয়েবলটি আপনার কম্পিউটারে থাকা অডিও ফাইলের ফাইলপাথ দিয়ে পরিবর্তন করে স্ক্রিপ্টটি এডিট করুন।কমান্ড লাইনের সাথে ইন্টারঅ্যাক্ট করার জন্য একটি কমান্ড প্রম্পট খুলুন এবং যেখানে আপনার Python ফাইলটি সংরক্ষিত আছে সেই ফোল্ডারে যান
লিখুন:
python3 filename.py
• আপনার Python ইনস্টলেশনের ওপর নির্ভর করে, আপনিpython3-এর পরিবর্তেpythonব্যবহার করতে পারেন
নোট: আপনার পরীক্ষা চলাকালীন আপনি যে অডিও ফাইলটি প্লে করতে চান তার লোকেশন দিয়ে/path/to/audio.wavপরিবর্তন করুন।
""" ল্যাব স্ট্রিমিং লেয়ার (LSL) উদাহরণ: অডিও প্লে করুন এবং একটি ট্রিগার মার্কার পাঠান <p>এই স্ক্রিপ্টটি একটি LSL মার্কার স্ট্রিম তৈরি করে, ব্যবহারকারীকে<br>ENTER প্রেস করার জন্য অপেক্ষা করে, তারপর একটি অডিও ফাইল প্লে করে এবং একটি মার্কার পাঠায় যা<br>LabRecorder-এর মাধ্যমে সংগৃহীত EEG ডাটার সাথে সিঙ্ক্রোনাইজ করা যেতে পারে।<br>"""</p> <p>import sounddevice as sd<br>import soundfile as sf<br>from pylsl import StreamInfo, StreamOutlet</p> <p>def wait_for_keypress():<br>print("অডিও প্লেব্যাক শুরু করতে এবং একটি LSL মার্কার পাঠাতে ENTER প্রেস করুন।")<br>while True:<br>if input() == "":<br>break</p> <p>def play_audio_and_send_marker(audio_file, outlet):<br>data, fs = sf.read(audio_file)</p> <pre><code>print("অডিও চালানো হচ্ছে এবং LSL মার্কার পাঠানো হচ্ছে...") marker_val = [1] outlet.push_sample(marker_val) sd.play(data, fs) sd.wait() print("অডিও প্লেব্যাক শেষ হয়েছে।") </code></pre> <p>if <strong>name</strong> == "<strong>main</strong>":</p> <pre><code>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 )</code></pre><h2 dir="auto">2.4 ধাপ ৫ - সমস্ত LSL স্ট্রিম দেখতে এবং সেভ করতে LabRecorder ব্যবহার করুন</h2><ol dir="auto"><li data-preset-tag="p"><p>LabRecorder ওপেন করুন</p></li><li data-preset-tag="p"><p><code>Update</code> প্রেস করুন। উপলব্ধ LSL স্ট্রিমগুলো স্ট্রিম তালিকায় দেখা যাবে• আপনি উভয় EmotivPROs থেকে স্ট্রিম (সাধারণত “Emotiv-DataStream” বলা হয়) এবং মার্কার স্ট্রিম (“AudioMarkers” বলা হয়) দেখতে পাবেন</p></li><li data-preset-tag="p"><p>ডাটা সংগ্রহের জন্য একটি লোকেশন সিলেক্ট করতে (এবং অন্যান্য প্যারামিটার সেট করতে) <code>Browse</code> ক্লিক করুন</p></li><li data-preset-tag="p"><p>সমস্ত স্ট্রিম সিলেক্ট করুন এবং রেকর্ডিং শুরু করতে <code>Record</code> প্রেস করুন</p></li></ol><h2 dir="auto">3.0 ডাটা নিয়ে কাজ করা</h2><p dir="auto">LabRecorder একটি XDF ফাইল (এক্সটেনসিবল ডাটা ফরম্যাট) আউটপুট দেয় যাতে সমস্ত স্ট্রিমের ডাটা থাকে। XDF ফাইলগুলো স্ট্রিমে সাজানো থাকে, প্রতিটির একটি আলাদা হেডার থাকে যা বর্ণনা করে এর মধ্যে কী আছে (ডিভাইসের নাম, ডাটার ধরন, স্যাম্পলিং রেট, চ্যানেল এবং আরও অনেক কিছু)। আপনার XDF ফাইলটি খুলতে এবং কিছু প্রাথমিক তথ্য প্রদর্শন করতে আপনি নীচের কোডব্লকটি ব্যবহার করতে পারেন।</p><p dir="auto"><strong>নোট: </strong><code><strong>/path/to/your/file.xdf</strong></code><strong>-কে আপনার LabRecorder XDF আউটপুট ফাইলের ফাইলপাথ দিয়ে পরিবর্তন করুন।</strong></p><pre data-language="JSX"><code>import pyxdf </code></pre> <p>import mne<br>import matplotlib.pyplot as plt<br>import numpy as np</p> <h1>আপনার LSL আউটপুট ফাইলের পাথটি এখানে দিন।</h1> <p>data_path = "/path/to/your/file.xdf"</p> <h1>XDF ফাইলটি লোড করুন।</h1> <p>streams, fileheader = pyxdf.load_xdf(data_path)</p> <p>print("XDF File Header:", fileheader)<br>print("Number of streams found:", len(streams))</p> <p>for i, stream in enumerate(streams):<br>print("\nStream", i + 1)<br>print("Stream Name:", stream["info"]["name"][0])<br>print("Stream Type:", stream["info"]["type"][0])<br>print("Number of Channels:", stream["info"]["channel_count"][0])</p> <pre><code>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"</code></pre><h3 dir="auto"><br></h3><h2 dir="auto">4.0 অতিরিক্ত রিসোর্স</h2><h4 dir="auto">অফিসিয়াল ডকুমেন্টেশন</h4><ol dir="auto"><li data-preset-tag="p"><p>GitHub-এর অফিশিয়াল README ফাইলসহ <a href="1. Check out the online documentation, including the official README file on GitHub 2. Additional resources: • Code to run LSL using Emotiv’s devices, with example scripts • Useful LSL demo on YouTube • SCCN LSL GitHub repository for all associated libraries • LSL GitHub repository for a collection a submodules and apps 3. HyPyP analysis pipeline for Hyperscanning studies" target="_blank">অনলাইন ডকুমেন্টেশন</a> দেখতে পারেন <a href="https://github.com/sccn/labstreaminglayer/" target="_blank">GitHub-এর অফিসিয়াল README ফাইলটি</a></p></li><li data-preset-tag="p"><p>অতিরিক্ত রিসোর্স:<br>• উদাহরণ স্ক্রিপ্টসহ Emotiv-এর ডিভাইস ব্যবহার করে LSL রান করার <a href="https://github.com/Emotiv/labstreaminglayer" target="_blank">কোড</a><br>• YouTube-এ দরকারী <a href="https://www.youtube.com/watch?v=Y1at7yrcFW0&list=PLVnr33MP5RMRhGwY36zHHDOmAaYTB138D" target="_blank">LSL ডেমো</a><br>• সাথে সম্পৃক্ত সমস্ত লাইব্রেরির জন্য <a href="https://github.com/sccn/labstreaminglayer" target="_blank">SCCN LSL GitHub রিপোজিটরি</a><br>• সাবমডিউল এবং অ্যাপের সংগ্রহের জন্য <a href="https://github.com/labstreaminglayer" target="_blank">LSL GitHub রিপোজিটরি</a></p></li><li data-preset-tag="p"><p>হাইপারস্ক্যানিং স্টাডিজের জন্য <a href="https://academic.oup.com/scan/article/16/1-2/72/5919711?login=false" target="_blank">HyPyP বিশ্লেষণ পাইপলাইন (analysis pipeline)</a></p></li></ol

পড়তে থাকুন