المحطة 1 · الدرس 3
بنية EEG struct
eeglab_data.set (D1) · لا شيء: البيانات كما نزّلتها.تنزيل البيانات (يفتح في نافذة جديدة)سكربت الوصول لهذه الحالة
[ALLEEG, EEG, CURRENTSET, ALLCOM] = eeglab;
sampleFolder = fullfile(fileparts(which('eeglab')), 'sample_data');
EEG = pop_loadset('filename', 'eeglab_data.set', 'filepath', sampleFolder);
[ALLEEG, EEG, CURRENTSET] = pop_newset(ALLEEG, EEG, 0, 'setname', 'Continuous EEG Data', 'gui', 'off');
eeglab redraw;زر الرجوع في متصفحك يعيدك لنفس المكان الذي كنت فيه، فافتح ما تشاء بلا قلق.
الفكرة باختصار
كل ما تراه في نافذة EEGLAB محفوظ في متغيّر واحد في MATLAB اسمه EEG. هذا المتغيّر من نوع structمتغيّر في MATLAB يجمع عدة حقول مسمّاة في مكان واحد.، أي صندوق فيه حقلfield (in a struct)جزء مسمّى داخل struct يحمل قيمة، مثل EEG.srate. لكل منها اسم.
النافذة الرئيسية تعرض ملخصاً فقط. أما سكربتscriptملف أوامر MATLAB ينفّذ خطوات المعالجة بالترتيب. فتقرأ من EEG وتكتب فيه مباشرة. إذا فهمت حقوله الأساسية، تستطيع فحص أي خطوة بنفسك.
قبل وبعد
أسئلتك بعد هذا، كل جواب في قسمه:
لماذا أحتاج هذه الخطوة؟
السبب بالتفصيل، والمصطلحات التي تحتاجها
ستستخدم نفس طريقة النقطة التي استخدمتها مع المتغيّر demo في درس أساسيات MATLAB: EEG.srate تعني الحقل srate داخل EEG.
لماذا أحتاج هذه الخطوة؟
ستستخدم نفس طريقة النقطة التي استخدمتها مع المتغيّر demo في درس أساسيات MATLAB: EEG.srate تعني الحقل srate داخل EEG.
كيف أطبّقها في EEGLAB؟
7 خطوة من القوائم
1. افتح الحقول في الـ Workspace
- افتح داتاستdatasetملف بيانات EEG واحد محمّل في EEGLAB مع معلوماته. (dataset) كما في الدرس السابق.
- في لوحة Workspace في MATLAB، اضغط مرتين على
EEG. - تظهر حقول
EEGفي جدول. اضغط مرتين على أي حقل لتفتحه، مثلchanlocsأوevent.
2. اقرأ الأحداث من EEGLAB
- افتح Edit ثم Event values.
- تظهر نافذة تعرض حدثاً (حدثeventعلامة في التسجيل تحدد لحظة شيء مهم، مثل ظهور مثير.) واحداً في كل مرة:
typeوpositionوlatency. (الحقلureventلا يظهر في هذه النافذة.) - لاحظ أن عنوان حقل التوقيتlatency (event)موضع الحدث في التسجيل، ويُخزَّن في EEGLAB بالعيّنات. (latency) في النافذة latency (sec): النافذة تعرض التوقيت بالثواني، أما
EEG.eventفيحفظه عيّنةsampleقيمة واحدة للإشارة في لحظة زمنية واحدة.. أول حدث يظهر هنا عند حوالي 1.0001 ثانية. - أغلق النافذة بزر Cancel حتى لا تغيّر شيئاً.
3. اقرأ معلومات الداتاست
افتح Edit ثم Dataset info. تظهر قيم مثل اسم الداتاست معدل العيّناتsampling rateعدد العيّنات المسجّلة في الثانية لكل قناة. (sampling rate). أغلقها بـ Cancel.
كيف أطبّقها في EEGLAB؟
1. افتح الحقول في الـ Workspace
- افتح الداتاست (dataset) كما في الدرس السابق.
- في لوحة Workspace في MATLAB، اضغط مرتين على
EEG. - تظهر حقول
EEGفي جدول. اضغط مرتين على أي حقل لتفتحه، مثلchanlocsأوevent.
2. اقرأ الأحداث من EEGLAB
- افتح Edit ثم Event values.
- تظهر نافذة تعرض حدثاً (event) واحداً في كل مرة:
typeوpositionوlatency. (الحقلureventلا يظهر في هذه النافذة.) - لاحظ أن عنوان حقل التوقيت (latency) في النافذة latency (sec): النافذة تعرض التوقيت بالثواني، أما
EEG.eventفيحفظه بالعيّنات. أول حدث يظهر هنا عند حوالي 1.0001 ثانية. - أغلق النافذة بزر Cancel حتى لا تغيّر شيئاً.
3. اقرأ معلومات الداتاست
افتح Edit ثم Dataset info. تظهر قيم مثل اسم الداتاست ومعدل العيّنات (sampling rate). أغلقها بـ Cancel.
كيف أكتبها بالكود؟
نفس الخطوات في 18 أسطر MATLAB
اكتب هذه الأسطر في الـ Command Window، سطراً سطراً، وقارن الناتج بالتعليق:
% Basic information
EEG.setname % 'Continuous EEG Data'
EEG.nbchan % 32 channels
EEG.srate % 128 samples per second
EEG.pnts % 30504 samples per channel
(EEG.pnts - 1) / EEG.srate % 238.3047 seconds (same as EEG.xmax)
% The signal: channels x samples
size(EEG.data) % 32 30504
class(EEG.data) % 'single'
EEG.data(1, 1:5) % first 5 samples of channel 1 (microvolts)
% Channel names
{EEG.chanlocs(1:3).labels} % 'FPz' 'EOG1' 'F3'
% First event: type and latency
EEG.event(1).type % 'square'
EEG.event(1).latency % 129.0087 (in samples)
(EEG.event(1).latency - 1) / EEG.srate % 1.0001 (in seconds)
% Empty until ICA is computed
isempty(EEG.icaweights) % 1 (true)- لماذا نطرح 1؟ في MATLAB أول عيّنة رقمها 1 وتقع عند الزمن صفر. لذلك الزمن بالثواني = (رقم العيّنة − 1) ÷ معدل العيّنات.
EEG.data(1, 1:5): الرقم الأول يختار قناةchannelالإشارة المسجّلة من قطب واحد، وهي ما يعرضه EEGLAB. (channel)، أي الصف، والثاني يختار العيّنات (الأعمدة).
كيف أكتبها بالكود؟
اكتب هذه الأسطر في الـ Command Window، سطراً سطراً، وقارن الناتج بالتعليق:
% Basic information
EEG.setname % 'Continuous EEG Data'
EEG.nbchan % 32 channels
EEG.srate % 128 samples per second
EEG.pnts % 30504 samples per channel
(EEG.pnts - 1) / EEG.srate % 238.3047 seconds (same as EEG.xmax)
% The signal: channels x samples
size(EEG.data) % 32 30504
class(EEG.data) % 'single'
EEG.data(1, 1:5) % first 5 samples of channel 1 (microvolts)
% Channel names
{EEG.chanlocs(1:3).labels} % 'FPz' 'EOG1' 'F3'
% First event: type and latency
EEG.event(1).type % 'square'
EEG.event(1).latency % 129.0087 (in samples)
(EEG.event(1).latency - 1) / EEG.srate % 1.0001 (in seconds)
% Empty until ICA is computed
isempty(EEG.icaweights) % 1 (true)- لماذا نطرح 1؟ في MATLAB أول عيّنة رقمها 1 وتقع عند الزمن صفر. لذلك الزمن بالثواني = (رقم العيّنة − 1) ÷ معدل العيّنات.
EEG.data(1, 1:5): الرقم الأول يختار القناة (channel)، أي الصف، والثاني يختار العيّنات (الأعمدة).
أي قيمة أختار؟
القيم المناسبة حسب هدف تحليلك
لا توجد قيمة تختارها هنا. هذه الحقول الأساسية التي ستعود لها في كل الدروس:
| الحقل | ماذا يحفظ | الوحدة | القيمة في eeglab_data.set |
|---|---|---|---|
EEG.nbchan | عدد القنوات | قناة | 32 |
EEG.srate | معدل العيّنات | هرتز | 128 |
EEG.pnts | عدد العيّنات في كل قناة | عيّنة | 30504 |
EEG.trials | عدد المقاطع (1 = بيانات مستمرة) | مقطع | 1 |
EEG.xmin و EEG.xmax | زمن أول عيّنة وآخر عيّنة | ثانية | 0 و 238.3047 (آخر عيّنة) |
EEG.times | زمن كل عيّنة | ميلي ثانية | من 0 إلى 238304.6875 |
EEG.data | إشارةsignalقيم تتغيّر مع الزمن، مثل الجهد المسجّل في قناة. نفسها | ميكروفولت | مصفوفة 32 × 30504 |
EEG.chanlocs | اسم كل قناة وموقعها | — | 32 عنصراً |
EEG.event | الأحداث: النوع والتوقيت | التوقيت بالعيّنات | 154 حدثاً (80 square و 74 rt) |
EEG.icaweights | أوزان ICAطريقة تفصل الإشارة المسجّلة إلى مصادر مستقلة، بعضها دماغي وبعضها آرتفاكت. | — | فارغ |
أي قيمة أختار؟
لا توجد قيمة تختارها هنا. هذه الحقول الأساسية التي ستعود لها في كل الدروس:
| الحقل | ماذا يحفظ | الوحدة | القيمة في eeglab_data.set |
|---|---|---|---|
EEG.nbchan | عدد القنوات | قناة | 32 |
EEG.srate | معدل العيّنات | هرتز | 128 |
EEG.pnts | عدد العيّنات في كل قناة | عيّنة | 30504 |
EEG.trials | عدد المقاطع (1 = بيانات مستمرة) | مقطع | 1 |
EEG.xmin و EEG.xmax | زمن أول عيّنة وآخر عيّنة | ثانية | 0 و 238.3047 (آخر عيّنة) |
EEG.times | زمن كل عيّنة | ميلي ثانية | من 0 إلى 238304.6875 |
EEG.data | الإشارة نفسها | ميكروفولت | مصفوفة 32 × 30504 |
EEG.chanlocs | اسم كل قناة وموقعها | — | 32 عنصراً |
EEG.event | الأحداث: النوع والتوقيت | التوقيت بالعيّنات | 154 حدثاً (80 square و 74 rt) |
EEG.icaweights | أوزان ICA | — | فارغ |
كيف أتأكد أنها نجحت؟
4 فحوص سريعة
size(EEG.data)يعطي32 30504.(EEG.pnts - 1) / EEG.srateيعطي238.3047، وهو نفسEEG.xmaxونفس Epoch end (sec) في النافذة الرئيسية (تعرضه مقرّباً238.305).EEG.event(1).typeيعطي'square'، والتوقيت المحوّل يعطي حوالي1.0001ثانية، ويطابق ما رأيته في Edit ثم Event values.numel(EEG.event)يعطي154، ويطابق سطر Events في النافذة الرئيسية.
كيف أتأكد أنها نجحت؟
size(EEG.data)يعطي32 30504.(EEG.pnts - 1) / EEG.srateيعطي238.3047، وهو نفسEEG.xmaxونفس Epoch end (sec) في النافذة الرئيسية (تعرضه مقرّباً238.305).EEG.event(1).typeيعطي'square'، والتوقيت المحوّل يعطي حوالي1.0001ثانية، ويطابق ما رأيته في Edit ثم Event values.numel(EEG.event)يعطي154، ويطابق سطر Events في النافذة الرئيسية.
ما الأخطاء التي يقع فيها كثيرون؟
5 أخطاء، وكيف تتجنّبها
- قلب الأبعاد. في EEGLAB القنوات في الصفوف والعيّنات في الأعمدة.
EEG.data(:, 1)هي كل القنوات عند أول عيّنة، لا القناة الأولى كاملة. القناة الأولى كاملة هيEEG.data(1, :). - قراءة
latencyعلى أنها ثوانٍ. فيEEG.eventالتوقيت بالعيّنات. حوّله بالمعادلة أعلاه، ولا تنسَ طرح 1. - نسيان أن
EEG.timesبالميلي ثانية. بينماEEG.xminوEEG.xmaxبالثواني. - تعديل
EEGيدوياً ثم نسيان إبلاغ EEGLAB. إذا غيّرت حقلاً بنفسك، شغّلEEG = eeg_checkset(EEG);ثم خزّنه بـ[ALLEEG, EEG, CURRENTSET] = eeg_store(ALLEEG, EEG, CURRENTSET);وeeglab redraw. وإلا قد تعرض النافذة الرئيسية قيماً قديمة. - الخلط بين القناة قطبelectrodeالقطعة المعدنية التي توضع على الرأس لالتقاط الإشارة. (electrode).
EEG.chanlocs(5)هي القناة الخامسة في البيانات، وموقعها هو موقع القطب الذي سجّلها. ترتيب القنوات في الملف لا يتبع ترتيباً على الرأس.
ما الأخطاء التي يقع فيها كثيرون؟
- قلب الأبعاد. في EEGLAB القنوات في الصفوف والعيّنات في الأعمدة.
EEG.data(:, 1)هي كل القنوات عند أول عيّنة، لا القناة الأولى كاملة. القناة الأولى كاملة هيEEG.data(1, :). - قراءة
latencyعلى أنها ثوانٍ. فيEEG.eventالتوقيت بالعيّنات. حوّله بالمعادلة أعلاه، ولا تنسَ طرح 1. - نسيان أن
EEG.timesبالميلي ثانية. بينماEEG.xminوEEG.xmaxبالثواني. - تعديل
EEGيدوياً ثم نسيان إبلاغ EEGLAB. إذا غيّرت حقلاً بنفسك، شغّلEEG = eeg_checkset(EEG);ثم خزّنه بـ[ALLEEG, EEG, CURRENTSET] = eeg_store(ALLEEG, EEG, CURRENTSET);وeeglab redraw. وإلا قد تعرض النافذة الرئيسية قيماً قديمة. - الخلط بين القناة والقطب (electrode).
EEG.chanlocs(5)هي القناة الخامسة في البيانات، وموقعها هو موقع القطب الذي سجّلها. ترتيب القنوات في الملف لا يتبع ترتيباً على الرأس.
متصفحك لا يسمح بحفظ التقدّم. كل الدروس متاحة، لكن علامات الإكمال لن تُحفظ.
تم. حُفظ تقدّمك في هذا المتصفح.تراجعأين أقرأ أكثر؟
2 مراجع: التوثيق الرسمي أولاً
- EEGLAB TutorialتوثيقEEGLAB Data Structures: EEG.event, Event latencies
- EEGLAB TutorialتوثيقExploring event values
مكتوب لـ EEGLAB 2026.1 · 2026-10-28
للتوسّع
- EEGLAB Tutorial: https://eeglab.org/tutorials/ConceptsGuide/Data_Structures.html (EEGLAB Data Structures: EEG.event, Event latencies)
- EEGLAB Tutorial: https://eeglab.org/tutorials/02_Quickstart/quickstart.html (Exploring event values)
تحتاج مساعدة؟
اسأل، أو شاركنا رأيك، أو بلّغ عن خطأ
- بلّغ عن خطأ علمي · يحتاج حساباً على GitHub. لا تملك حساباً؟ استخدم "شاركنا رأيك".