
Birden Fazla Veri Akışını Senkronize Etmek için Lab Streaming Layer (LSL)
Dr. Roshini Randeniya ve Lucas Kleine
Güncelleme tarihi
17 May 2024

Birden Fazla Veri Akışını Senkronize Etmek için Lab Streaming Layer (LSL)
Dr. Roshini Randeniya ve Lucas Kleine
Güncelleme tarihi
17 May 2024

Birden Fazla Veri Akışını Senkronize Etmek için Lab Streaming Layer (LSL)
Dr. Roshini Randeniya ve Lucas Kleine
Güncelleme tarihi
17 May 2024
Hoş geldiniz! Bu eğitimde, birden fazla cihazdan Emotiv EEG verilerini toplamak ve senkronize etmek için Python'da Lab Streaming Layer (LSL) kullanmayı öğreneceğiz. Python programlama dili hakkında temel düzeyde çalışma bilgisi gerektirecektir.
Neler Öğreneceksiniz?
Lab Streaming Layer (LSL) nedir ve araştırmacılar bunu neden kullanır?
Ekipmanlar arası senkronize verileri birden fazla Emotiv EEG cihazından toplama
Toplanan verileri içe aktarma ve inceleme
1.1 LSL Nedir ve Ne İşe Yarar?
Lab streaming layer (LSL), çeşitli sensör donanımlarından gelen nöral, fizyolojik ve davranışsal veri akışlarını göndermek, almak ve senkronize etmek için kullanılabilen açık kaynaklı bir araç kutusudur. Giderek daha yetenekli, hassas ve taşınabilir beyin ve vücut algılama donanım cihazları (Emotiv EEG sistemleri gibi), sinirbilimi laboratuvar dışına, gerçek zamanlı veri dünyasına taşımaktadır. EEG ve MEG gibi beyin ölçümleri bir zamanlar araştırma laboratuvarları ile sınırlıyken, mobil cihazlar daha doğal ortamlarda ve aynı anda birden fazla kişiden birden çok veri toplamamıza olanak tanır.
Bir araştırmacı, aynı müziği dinleyen iki kişi arasındaki fizyolojik senkronizasyonla ilgilenebilir. LSL, iki EEG başlığından ayrı ayrı veri toplamamıza yardımcı olabilir ve bu veriler ses sunumuyla da senkronize edilir.
LSL'nin diğer kullanımlarına ilişkin bazı örnekler:
Bir deneyden devam eden EEG verilerine olay işaretçileri ekleme
Tek bir katılımcı için birden fazla kaynaktan gelen verileri zaman hizalama (örneğin kalp atış hızı, EMG, EEG)
Birden fazla katılımcıdan gelen verileri zaman hizalama (örneğin EEG Hiperskanlama Çalışmaları)
1.2 LSL Nasıl Çalışır?
Lab Streaming Layer, birden fazla cihaz arasında zaman serisi verilerinin gerçek zamanlı değişimi için bir protokoldür. LSL; Python, MATLAB, C++, Java ve diğer programlama dilleri için açık kaynaklı kütüphaneler kullanılarak uygulanabilir.

Çekirdek işlevsellik, LSL veri akışları etrafında döner:
1. Bir alım cihazı/yazılımı veri toplar ve bir veri akışı oluşturur - EEG kayıt cihazlarından, göz takip cihazlarından, hareket yakalama sistemlerinden, kalp atış hızı monitörlerinden vb. gelen fizyolojik veriler, meta veriler (örnekleme hızı, veri türü, kanal bilgisi vb.) dahil olmak üzere LSL'ye aktarılabilir - Deneylerden gelen olay işaretçileri de (örneğin PsychoPy kullanarak) LSL kullanılarak bir veri akışı olarak gönderilebilir
2. Veri akışı ağda yayınlanır - Veriler LSL kullanılarak bu şekilde gönderilir; veri akışı ağa "yayınlanır" - Yayınlanan akışlar ağda mevcuttur ve aynı ağ üzerindeki diğer LSL destekli cihazlar tarafından keşfedilebilir - LSL, ortak bir saate göre (NNetwork Time Protocol'ü takip ederek) her veri yığınına veya örneğine bir zaman damgası atar. - Akış, bir "çıkış" (outlet) aracılığıyla örnek örnek (veya yığın yığın) itilir
3. Toplama cihazı/cihazları veri akış(lar)ına “abone olur” - Veriler LSL kullanılarak bu şekilde alınır - Aynı ağdaki toplama cihazları, yayınlanan veri akışlarını “girişler” (inlets) aracılığıyla alır. - Her giriş, akış örneklerini ve meta verileri yalnızca bir çıkıştan alır
4. Verileri kaydetme - Bir veri akışına abone olduktan sonra, bunu tercih ettiğiniz programlama dilinde bir değişkene kaydedebilir veya .xdf gibi standart bir biçimde kaydetmek için LSL'nin sağladığı LabRecorder yazılımını kullanabilirsiniz.
2.0 Eğitime genel bakış
Bu eğitimde, örnek bir deneysel kurulum ele alacağız ve Python'da LSL kullanarak bunu uygulamak için gerekli adımlar ve kodlar konusunda size rehberlik edeceğiz. Emotiv kulaklığı takan iki kişiden EEG verisi toplarken ses çalmak için Python kullanacağız. EEG verilerini toplamak ve her akışı ayrı bir LSL çıkışı üzerinden yayınlamak için her biri EmotivPRO çalıştıran iki bilgisayar kullanacağız. Bir ses dosyasını oynatmak ve dosya her başladığında eş zamanlı olarak bir tetikleyici göndermek için bir Python kütüphanesi kullanacağız.
ADIMLAR:
1. EEG verilerini (ve/veya hareket, temas kalitesi, sinyal kalitesi vb.) içeren LSL çıkışları aracılığıyla veri akışı sağlamak için EmotivPRO'yu kullanın. 2. Bir Python betiği kullanarak bir ses parçası çalın ve aynı anda başka bir LSL aracılığıyla bir tetikleyici gönderin. Bir LSL girişi aracılığıyla her üç veri akışını yakalamak ve kaydetmek için LabRecorder'ı kullanın.

2.1 ADIM 1 - Kurulum ve yükleme
Veri toplamak için desteklenen veri toplama cihazlarına ihtiyacınız olacak
• Emotiv’in tüm beyin donanım cihazları, EmotivPRO yazılımı aracılığıyla LSL'ye bağlanırCihaz(lar)ınıza EmotivPRO yükleyin. LSL'yi kullanmak için geçerli bir EmotivPRO lisansına ihtiyacınız olacaktır.
Aşağıdaki komutla Python LSL kütüphanesini yükleyin:
pip install pylslLabRecorder yazılımını indirin. Bu, komut satırından veya bağımsız bir indirme kullanılarak çalıştırılabilen basit, ücretsiz bir uygulamadır
Deneyimiz için: Python kullanarak ses çalmak için gerekli paketleri yükleyin
pip install sounddevice soundfile
2.2 ADIM 3 - Verileri EmotivPRO'dan bir LSL akışı yoluyla gönderme
Uygulamanın sağ üst köşesindeki “…” simgesini bulun, Ayarlar'a gidin
‘Lab Streaming Layer’ bölümünü ve ‘Outlet’ alt bölümünü bulun
Yayınlamak istediğiniz tüm veri türlerini seçin
Veri biçimini seçin (32-bit float veya 64-bit double)
Verilerin örnek örnek mi yoksa örnek yığınları halinde mi gönderileceğini seçin
Bir LSL veri akışı yayınlamak için 'Başlat'a tıklayın
2.3 ADIM 4 - Ses çalmak ve tetikleyiciler göndermek için bir Python betiği kullanma
Aşağıdaki kod bloğunu kopyalayıp bir python dosyasına yapıştırın ve bilgisayarınıza kaydediniz.
Çalmak istediğiniz bir ses dosyasını (tercihen bir .wav dosyası) bulun ve
audio_filepathdeğişkenini bilgisayarınızdaki ses dosyanızın dosya yolu ile değiştirerek betiği düzenleyinKomut satırıyla etkileşime girmek için bir komut istemi açın ve Python dosyanızın depolandığı klasöre gidin
Şunu girin:
python3 filename.py
• Python kurulumunuza bağlı olarak,python3yerinepythonkullanabilirsiniz
Not: Deneyiniz sırasında çalmak istediğiniz ses dosyasının konumuyla/path/to/audio.wavkısmını değiştirin.
""" 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 ADIM 5 - Tüm LSL akışlarını görüntülemek ve kaydetmek için LabRecorder kullanın
LabRecorder'ı açın
Updatedüğmesine basın. Kullanılabilir LSL akışları, akış listesinde görünür olmalıdır
• Her iki EmotivPRO'dan gelen akışları (genellikle “Emotiv-DataStream” olarak adlandırılır) ve marker akışını (“AudioMarkers” olarak adlandırılır) görebilmeniz gerekirVerileri depolamak için bir konum seçmek amacıyla
Browsedüğmesine tıklayın (ve diğer parametreleri ayarlayın)Tüm akışları seçin ve kaydetmeye başlamak için
Recorddüğmesine basın
3.0 Verilerle çalışma
LabRecorder tüm akışlardan gelen verileri içeren bir XDF dosyası (Extensible Data Format) çıktısı verir. XDF dosyaları, her biri ne içerdiğini açıklayan farklı bir başlığa sahip akışlar halinde yapılandırılmıştır (cihaz adı, veri türü, örnekleme hızı, kanallar ve daha fazlası). XDF dosyanızı açmak ve bazı temel bilgileri görüntülemek için aşağıdaki kod bloğunu kullanabilirsiniz.
Not: /path/to/your/file.xdf kısmını LabRecorder XDF çıktı dosyanızın dosya yolu ile değiştirin.
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 Ek Kaynaklar
Resmi Belgeler
GitHub'daki resmi README dosyası da dahil olmak üzere, çevrimiçi belgelere göz atın
Ek kaynaklar:
• Emotiv cihazlarını kullanarak LSL'yi çalıştırmak için örnek komut dosyaları içeren kod
• YouTube'da faydalı LSL demosu
• İlgili tüm kütüphaneler için SCCN LSL GitHub deposu
• Alt modüller ve uygulamalar koleksiyonu için LSL GitHub deposuHiperskanlama çalışmaları için HyPyP analiz boru hattı
Hoş geldiniz! Bu eğitimde, birden fazla cihazdan Emotiv EEG verilerini toplamak ve senkronize etmek için Python'da Lab Streaming Layer (LSL) kullanmayı öğreneceğiz. Python programlama dili hakkında temel düzeyde çalışma bilgisi gerektirecektir.
Neler Öğreneceksiniz?
Lab Streaming Layer (LSL) nedir ve araştırmacılar bunu neden kullanır?
Ekipmanlar arası senkronize verileri birden fazla Emotiv EEG cihazından toplama
Toplanan verileri içe aktarma ve inceleme
1.1 LSL Nedir ve Ne İşe Yarar?
Lab streaming layer (LSL), çeşitli sensör donanımlarından gelen nöral, fizyolojik ve davranışsal veri akışlarını göndermek, almak ve senkronize etmek için kullanılabilen açık kaynaklı bir araç kutusudur. Giderek daha yetenekli, hassas ve taşınabilir beyin ve vücut algılama donanım cihazları (Emotiv EEG sistemleri gibi), sinirbilimi laboratuvar dışına, gerçek zamanlı veri dünyasına taşımaktadır. EEG ve MEG gibi beyin ölçümleri bir zamanlar araştırma laboratuvarları ile sınırlıyken, mobil cihazlar daha doğal ortamlarda ve aynı anda birden fazla kişiden birden çok veri toplamamıza olanak tanır.
Bir araştırmacı, aynı müziği dinleyen iki kişi arasındaki fizyolojik senkronizasyonla ilgilenebilir. LSL, iki EEG başlığından ayrı ayrı veri toplamamıza yardımcı olabilir ve bu veriler ses sunumuyla da senkronize edilir.
LSL'nin diğer kullanımlarına ilişkin bazı örnekler:
Bir deneyden devam eden EEG verilerine olay işaretçileri ekleme
Tek bir katılımcı için birden fazla kaynaktan gelen verileri zaman hizalama (örneğin kalp atış hızı, EMG, EEG)
Birden fazla katılımcıdan gelen verileri zaman hizalama (örneğin EEG Hiperskanlama Çalışmaları)
1.2 LSL Nasıl Çalışır?
Lab Streaming Layer, birden fazla cihaz arasında zaman serisi verilerinin gerçek zamanlı değişimi için bir protokoldür. LSL; Python, MATLAB, C++, Java ve diğer programlama dilleri için açık kaynaklı kütüphaneler kullanılarak uygulanabilir.

Çekirdek işlevsellik, LSL veri akışları etrafında döner:
1. Bir alım cihazı/yazılımı veri toplar ve bir veri akışı oluşturur - EEG kayıt cihazlarından, göz takip cihazlarından, hareket yakalama sistemlerinden, kalp atış hızı monitörlerinden vb. gelen fizyolojik veriler, meta veriler (örnekleme hızı, veri türü, kanal bilgisi vb.) dahil olmak üzere LSL'ye aktarılabilir - Deneylerden gelen olay işaretçileri de (örneğin PsychoPy kullanarak) LSL kullanılarak bir veri akışı olarak gönderilebilir
2. Veri akışı ağda yayınlanır - Veriler LSL kullanılarak bu şekilde gönderilir; veri akışı ağa "yayınlanır" - Yayınlanan akışlar ağda mevcuttur ve aynı ağ üzerindeki diğer LSL destekli cihazlar tarafından keşfedilebilir - LSL, ortak bir saate göre (NNetwork Time Protocol'ü takip ederek) her veri yığınına veya örneğine bir zaman damgası atar. - Akış, bir "çıkış" (outlet) aracılığıyla örnek örnek (veya yığın yığın) itilir
3. Toplama cihazı/cihazları veri akış(lar)ına “abone olur” - Veriler LSL kullanılarak bu şekilde alınır - Aynı ağdaki toplama cihazları, yayınlanan veri akışlarını “girişler” (inlets) aracılığıyla alır. - Her giriş, akış örneklerini ve meta verileri yalnızca bir çıkıştan alır
4. Verileri kaydetme - Bir veri akışına abone olduktan sonra, bunu tercih ettiğiniz programlama dilinde bir değişkene kaydedebilir veya .xdf gibi standart bir biçimde kaydetmek için LSL'nin sağladığı LabRecorder yazılımını kullanabilirsiniz.
2.0 Eğitime genel bakış
Bu eğitimde, örnek bir deneysel kurulum ele alacağız ve Python'da LSL kullanarak bunu uygulamak için gerekli adımlar ve kodlar konusunda size rehberlik edeceğiz. Emotiv kulaklığı takan iki kişiden EEG verisi toplarken ses çalmak için Python kullanacağız. EEG verilerini toplamak ve her akışı ayrı bir LSL çıkışı üzerinden yayınlamak için her biri EmotivPRO çalıştıran iki bilgisayar kullanacağız. Bir ses dosyasını oynatmak ve dosya her başladığında eş zamanlı olarak bir tetikleyici göndermek için bir Python kütüphanesi kullanacağız.
ADIMLAR:
1. EEG verilerini (ve/veya hareket, temas kalitesi, sinyal kalitesi vb.) içeren LSL çıkışları aracılığıyla veri akışı sağlamak için EmotivPRO'yu kullanın. 2. Bir Python betiği kullanarak bir ses parçası çalın ve aynı anda başka bir LSL aracılığıyla bir tetikleyici gönderin. Bir LSL girişi aracılığıyla her üç veri akışını yakalamak ve kaydetmek için LabRecorder'ı kullanın.

2.1 ADIM 1 - Kurulum ve yükleme
Veri toplamak için desteklenen veri toplama cihazlarına ihtiyacınız olacak
• Emotiv’in tüm beyin donanım cihazları, EmotivPRO yazılımı aracılığıyla LSL'ye bağlanırCihaz(lar)ınıza EmotivPRO yükleyin. LSL'yi kullanmak için geçerli bir EmotivPRO lisansına ihtiyacınız olacaktır.
Aşağıdaki komutla Python LSL kütüphanesini yükleyin:
pip install pylslLabRecorder yazılımını indirin. Bu, komut satırından veya bağımsız bir indirme kullanılarak çalıştırılabilen basit, ücretsiz bir uygulamadır
Deneyimiz için: Python kullanarak ses çalmak için gerekli paketleri yükleyin
pip install sounddevice soundfile
2.2 ADIM 3 - Verileri EmotivPRO'dan bir LSL akışı yoluyla gönderme
Uygulamanın sağ üst köşesindeki “…” simgesini bulun, Ayarlar'a gidin
‘Lab Streaming Layer’ bölümünü ve ‘Outlet’ alt bölümünü bulun
Yayınlamak istediğiniz tüm veri türlerini seçin
Veri biçimini seçin (32-bit float veya 64-bit double)
Verilerin örnek örnek mi yoksa örnek yığınları halinde mi gönderileceğini seçin
Bir LSL veri akışı yayınlamak için 'Başlat'a tıklayın
2.3 ADIM 4 - Ses çalmak ve tetikleyiciler göndermek için bir Python betiği kullanma
Aşağıdaki kod bloğunu kopyalayıp bir python dosyasına yapıştırın ve bilgisayarınıza kaydediniz.
Çalmak istediğiniz bir ses dosyasını (tercihen bir .wav dosyası) bulun ve
audio_filepathdeğişkenini bilgisayarınızdaki ses dosyanızın dosya yolu ile değiştirerek betiği düzenleyinKomut satırıyla etkileşime girmek için bir komut istemi açın ve Python dosyanızın depolandığı klasöre gidin
Şunu girin:
python3 filename.py
• Python kurulumunuza bağlı olarak,python3yerinepythonkullanabilirsiniz
Not: Deneyiniz sırasında çalmak istediğiniz ses dosyasının konumuyla/path/to/audio.wavkısmını değiştirin.
""" 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 ADIM 5 - Tüm LSL akışlarını görüntülemek ve kaydetmek için LabRecorder kullanın
LabRecorder'ı açın
Updatedüğmesine basın. Kullanılabilir LSL akışları, akış listesinde görünür olmalıdır
• Her iki EmotivPRO'dan gelen akışları (genellikle “Emotiv-DataStream” olarak adlandırılır) ve marker akışını (“AudioMarkers” olarak adlandırılır) görebilmeniz gerekirVerileri depolamak için bir konum seçmek amacıyla
Browsedüğmesine tıklayın (ve diğer parametreleri ayarlayın)Tüm akışları seçin ve kaydetmeye başlamak için
Recorddüğmesine basın
3.0 Verilerle çalışma
LabRecorder tüm akışlardan gelen verileri içeren bir XDF dosyası (Extensible Data Format) çıktısı verir. XDF dosyaları, her biri ne içerdiğini açıklayan farklı bir başlığa sahip akışlar halinde yapılandırılmıştır (cihaz adı, veri türü, örnekleme hızı, kanallar ve daha fazlası). XDF dosyanızı açmak ve bazı temel bilgileri görüntülemek için aşağıdaki kod bloğunu kullanabilirsiniz.
Not: /path/to/your/file.xdf kısmını LabRecorder XDF çıktı dosyanızın dosya yolu ile değiştirin.
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 Ek Kaynaklar
Resmi Belgeler
GitHub'daki resmi README dosyası da dahil olmak üzere, çevrimiçi belgelere göz atın
Ek kaynaklar:
• Emotiv cihazlarını kullanarak LSL'yi çalıştırmak için örnek komut dosyaları içeren kod
• YouTube'da faydalı LSL demosu
• İlgili tüm kütüphaneler için SCCN LSL GitHub deposu
• Alt modüller ve uygulamalar koleksiyonu için LSL GitHub deposuHiperskanlama çalışmaları için HyPyP analiz boru hattı
Hoş geldiniz! Bu eğitimde, birden fazla cihazdan Emotiv EEG verilerini toplamak ve senkronize etmek için Python'da Lab Streaming Layer (LSL) kullanmayı öğreneceğiz. Python programlama dili hakkında temel düzeyde çalışma bilgisi gerektirecektir.
Neler Öğreneceksiniz?
Lab Streaming Layer (LSL) nedir ve araştırmacılar bunu neden kullanır?
Ekipmanlar arası senkronize verileri birden fazla Emotiv EEG cihazından toplama
Toplanan verileri içe aktarma ve inceleme
1.1 LSL Nedir ve Ne İşe Yarar?
Lab streaming layer (LSL), çeşitli sensör donanımlarından gelen nöral, fizyolojik ve davranışsal veri akışlarını göndermek, almak ve senkronize etmek için kullanılabilen açık kaynaklı bir araç kutusudur. Giderek daha yetenekli, hassas ve taşınabilir beyin ve vücut algılama donanım cihazları (Emotiv EEG sistemleri gibi), sinirbilimi laboratuvar dışına, gerçek zamanlı veri dünyasına taşımaktadır. EEG ve MEG gibi beyin ölçümleri bir zamanlar araştırma laboratuvarları ile sınırlıyken, mobil cihazlar daha doğal ortamlarda ve aynı anda birden fazla kişiden birden çok veri toplamamıza olanak tanır.
Bir araştırmacı, aynı müziği dinleyen iki kişi arasındaki fizyolojik senkronizasyonla ilgilenebilir. LSL, iki EEG başlığından ayrı ayrı veri toplamamıza yardımcı olabilir ve bu veriler ses sunumuyla da senkronize edilir.
LSL'nin diğer kullanımlarına ilişkin bazı örnekler:
Bir deneyden devam eden EEG verilerine olay işaretçileri ekleme
Tek bir katılımcı için birden fazla kaynaktan gelen verileri zaman hizalama (örneğin kalp atış hızı, EMG, EEG)
Birden fazla katılımcıdan gelen verileri zaman hizalama (örneğin EEG Hiperskanlama Çalışmaları)
1.2 LSL Nasıl Çalışır?
Lab Streaming Layer, birden fazla cihaz arasında zaman serisi verilerinin gerçek zamanlı değişimi için bir protokoldür. LSL; Python, MATLAB, C++, Java ve diğer programlama dilleri için açık kaynaklı kütüphaneler kullanılarak uygulanabilir.

Çekirdek işlevsellik, LSL veri akışları etrafında döner:
1. Bir alım cihazı/yazılımı veri toplar ve bir veri akışı oluşturur - EEG kayıt cihazlarından, göz takip cihazlarından, hareket yakalama sistemlerinden, kalp atış hızı monitörlerinden vb. gelen fizyolojik veriler, meta veriler (örnekleme hızı, veri türü, kanal bilgisi vb.) dahil olmak üzere LSL'ye aktarılabilir - Deneylerden gelen olay işaretçileri de (örneğin PsychoPy kullanarak) LSL kullanılarak bir veri akışı olarak gönderilebilir
2. Veri akışı ağda yayınlanır - Veriler LSL kullanılarak bu şekilde gönderilir; veri akışı ağa "yayınlanır" - Yayınlanan akışlar ağda mevcuttur ve aynı ağ üzerindeki diğer LSL destekli cihazlar tarafından keşfedilebilir - LSL, ortak bir saate göre (NNetwork Time Protocol'ü takip ederek) her veri yığınına veya örneğine bir zaman damgası atar. - Akış, bir "çıkış" (outlet) aracılığıyla örnek örnek (veya yığın yığın) itilir
3. Toplama cihazı/cihazları veri akış(lar)ına “abone olur” - Veriler LSL kullanılarak bu şekilde alınır - Aynı ağdaki toplama cihazları, yayınlanan veri akışlarını “girişler” (inlets) aracılığıyla alır. - Her giriş, akış örneklerini ve meta verileri yalnızca bir çıkıştan alır
4. Verileri kaydetme - Bir veri akışına abone olduktan sonra, bunu tercih ettiğiniz programlama dilinde bir değişkene kaydedebilir veya .xdf gibi standart bir biçimde kaydetmek için LSL'nin sağladığı LabRecorder yazılımını kullanabilirsiniz.
2.0 Eğitime genel bakış
Bu eğitimde, örnek bir deneysel kurulum ele alacağız ve Python'da LSL kullanarak bunu uygulamak için gerekli adımlar ve kodlar konusunda size rehberlik edeceğiz. Emotiv kulaklığı takan iki kişiden EEG verisi toplarken ses çalmak için Python kullanacağız. EEG verilerini toplamak ve her akışı ayrı bir LSL çıkışı üzerinden yayınlamak için her biri EmotivPRO çalıştıran iki bilgisayar kullanacağız. Bir ses dosyasını oynatmak ve dosya her başladığında eş zamanlı olarak bir tetikleyici göndermek için bir Python kütüphanesi kullanacağız.
ADIMLAR:
1. EEG verilerini (ve/veya hareket, temas kalitesi, sinyal kalitesi vb.) içeren LSL çıkışları aracılığıyla veri akışı sağlamak için EmotivPRO'yu kullanın. 2. Bir Python betiği kullanarak bir ses parçası çalın ve aynı anda başka bir LSL aracılığıyla bir tetikleyici gönderin. Bir LSL girişi aracılığıyla her üç veri akışını yakalamak ve kaydetmek için LabRecorder'ı kullanın.

2.1 ADIM 1 - Kurulum ve yükleme
Veri toplamak için desteklenen veri toplama cihazlarına ihtiyacınız olacak
• Emotiv’in tüm beyin donanım cihazları, EmotivPRO yazılımı aracılığıyla LSL'ye bağlanırCihaz(lar)ınıza EmotivPRO yükleyin. LSL'yi kullanmak için geçerli bir EmotivPRO lisansına ihtiyacınız olacaktır.
Aşağıdaki komutla Python LSL kütüphanesini yükleyin:
pip install pylslLabRecorder yazılımını indirin. Bu, komut satırından veya bağımsız bir indirme kullanılarak çalıştırılabilen basit, ücretsiz bir uygulamadır
Deneyimiz için: Python kullanarak ses çalmak için gerekli paketleri yükleyin
pip install sounddevice soundfile
2.2 ADIM 3 - Verileri EmotivPRO'dan bir LSL akışı yoluyla gönderme
Uygulamanın sağ üst köşesindeki “…” simgesini bulun, Ayarlar'a gidin
‘Lab Streaming Layer’ bölümünü ve ‘Outlet’ alt bölümünü bulun
Yayınlamak istediğiniz tüm veri türlerini seçin
Veri biçimini seçin (32-bit float veya 64-bit double)
Verilerin örnek örnek mi yoksa örnek yığınları halinde mi gönderileceğini seçin
Bir LSL veri akışı yayınlamak için 'Başlat'a tıklayın
2.3 ADIM 4 - Ses çalmak ve tetikleyiciler göndermek için bir Python betiği kullanma
Aşağıdaki kod bloğunu kopyalayıp bir python dosyasına yapıştırın ve bilgisayarınıza kaydediniz.
Çalmak istediğiniz bir ses dosyasını (tercihen bir .wav dosyası) bulun ve
audio_filepathdeğişkenini bilgisayarınızdaki ses dosyanızın dosya yolu ile değiştirerek betiği düzenleyinKomut satırıyla etkileşime girmek için bir komut istemi açın ve Python dosyanızın depolandığı klasöre gidin
Şunu girin:
python3 filename.py
• Python kurulumunuza bağlı olarak,python3yerinepythonkullanabilirsiniz
Not: Deneyiniz sırasında çalmak istediğiniz ses dosyasının konumuyla/path/to/audio.wavkısmını değiştirin.
""" 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 ADIM 5 - Tüm LSL akışlarını görüntülemek ve kaydetmek için LabRecorder kullanın
LabRecorder'ı açın
Updatedüğmesine basın. Kullanılabilir LSL akışları, akış listesinde görünür olmalıdır
• Her iki EmotivPRO'dan gelen akışları (genellikle “Emotiv-DataStream” olarak adlandırılır) ve marker akışını (“AudioMarkers” olarak adlandırılır) görebilmeniz gerekirVerileri depolamak için bir konum seçmek amacıyla
Browsedüğmesine tıklayın (ve diğer parametreleri ayarlayın)Tüm akışları seçin ve kaydetmeye başlamak için
Recorddüğmesine basın
3.0 Verilerle çalışma
LabRecorder tüm akışlardan gelen verileri içeren bir XDF dosyası (Extensible Data Format) çıktısı verir. XDF dosyaları, her biri ne içerdiğini açıklayan farklı bir başlığa sahip akışlar halinde yapılandırılmıştır (cihaz adı, veri türü, örnekleme hızı, kanallar ve daha fazlası). XDF dosyanızı açmak ve bazı temel bilgileri görüntülemek için aşağıdaki kod bloğunu kullanabilirsiniz.
Not: /path/to/your/file.xdf kısmını LabRecorder XDF çıktı dosyanızın dosya yolu ile değiştirin.
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 Ek Kaynaklar
Resmi Belgeler
GitHub'daki resmi README dosyası da dahil olmak üzere, çevrimiçi belgelere göz atın
Ek kaynaklar:
• Emotiv cihazlarını kullanarak LSL'yi çalıştırmak için örnek komut dosyaları içeren kod
• YouTube'da faydalı LSL demosu
• İlgili tüm kütüphaneler için SCCN LSL GitHub deposu
• Alt modüller ve uygulamalar koleksiyonu için LSL GitHub deposuHiperskanlama çalışmaları için HyPyP analiz boru hattı

Okumaya devam et