المحطة 2 · الدرس 2
مواقع الأقطاب
S001R03.set (D2) · ما طُبّق عليه قبل هذا الدرس: استيراد ملف خام: EDF و BDF و BrainVisionتنزيل البيانات (يفتح في نافذة جديدة)سكربت الوصول لهذه الحالة
[ALLEEG, EEG, CURRENTSET, ALLCOM] = eeglab;
% Folder where you keep the course data (change it)
dataFolder = 'C:\Users\me\Documents\eeg-course';
EEG = pop_loadset('filename', 'S001R03.set', 'filepath', dataFolder);
[ALLEEG, EEG, CURRENTSET] = pop_newset(ALLEEG, EEG, 0, 'setname', 'S001R03', 'gui', 'off');
eeglab redraw;زر الرجوع في متصفحك يعيدك لنفس المكان الذي كنت فيه، فافتح ما تشاء بلا قلق.
الفكرة باختصار
داتاستdatasetملف بيانات EEG واحد محمّل في EEGLAB مع معلوماته. (dataset) الآن تعرف أسماء قناةchannelالإشارة المسجّلة من قطب واحد، وهي ما يعرضه EEGLAB. (channel) فقط. لا تعرف أين يقع كل قطبelectrodeالقطعة المعدنية التي توضع على الرأس لالتقاط الإشارة. (electrode) على الرأس. كل خريطة رأس (خريطة الرأسscalp mapرسم يبيّن توزيع قيمة على الرأس من الأعلى.)، وكل خطوة تستخدم القنوات المجاورة (مثل الاستيفاءinterpolationتقدير إشارة قناة محذوفة من القنوات المحيطة بها. (interpolation) قناة سيئةbad channelقناة إشارتها مسطّحة أو مليئة بالضوضاء طوال التسجيل تقريباً.)، وخرائط مكوّنات ICAطريقة تفصل الإشارة المسجّلة إلى مصادر مستقلة، بعضها دماغي وبعضها آرتفاكت.، كلها تحتاج هذه المواقع.
قبل وبعد
قبل / بعد
الصورة تُضاف قريباً.
قبل: نافذة EEGLAB الرئيسية وفيها S001R03، وسطر Channel locations يعرض No (labels only). بنفس حجم النافذة وإطارها في صورة “بعد” تماماً، حتى يتطابق المنزلق. لقطة واجهة حقيقية من EEGLAB 2026.1 (source: eeglab-ui).
الصورة تُضاف قريباً.
بعد: نفس نافذة EEGLAB الرئيسية بعد جلب المواقع، وسطر Channel locations يعرض Yes. باقي الأسطر (64 قناة، 160 هرتز) لم تتغيّر. بنفس حجم النافذة وإطارها في صورة “قبل” تماماً. لقطة واجهة حقيقية من EEGLAB 2026.1 (source: eeglab-ui).
ماذا يعني ما رأيته؟

ماذا يعني ما رأيته؟

أسئلتك بعد هذا، كل جواب في قسمه:
لماذا أحتاج هذه الخطوة؟
السبب بالتفصيل، والمصطلحات التي تحتاجها
يجد EEGLAB المواقع بمطابقة اسم كل قناة مع ملف قالب فيه الأسماء القياسية، مثل FC5 أو Cz. والمطابقة تنجح فقط إذا كُتبت الأسماء بالطريقة القياسية.
في S001R03.edf تنتهي الأسماء بنقاط زائدة: Fc5. و Cz.. و T10.. النقاط تكمّل كل اسم إلى أربعة أحرف. واسم مثل Cz.. لا يطابق Cz في القالب، فلا يجد له EEGLAB موقعاً. هذه مشكلة حقيقية ستقابلها مع ملفات أجهزة أخرى، لذلك نصلحها هنا أولاً.
لماذا أحتاج هذه الخطوة؟
يجد EEGLAB المواقع بمطابقة اسم كل قناة مع ملف قالب فيه الأسماء القياسية، مثل FC5 أو Cz. والمطابقة تنجح فقط إذا كُتبت الأسماء بالطريقة القياسية.
في S001R03.edf تنتهي الأسماء بنقاط زائدة: Fc5. و Cz.. و T10.. النقاط تكمّل كل اسم إلى أربعة أحرف. واسم مثل Cz.. لا يطابق Cz في القالب، فلا يجد له EEGLAB موقعاً. هذه مشكلة حقيقية ستقابلها مع ملفات أجهزة أخرى، لذلك نصلحها هنا أولاً.
كيف أطبّقها في EEGLAB؟
9 خطوة من القوائم
1. شاهد المشكلة
- افتح الداتاست
S001R03.setالتي حفظتها في الدرس السابق. - في النافذة الرئيسية، سطر Channel locations يعرض
No (labels only). - اكتب في الـ Command Window:
{EEG.chanlocs(1:3).labels}. الناتج'Fc5.''Fc3.''Fc1.': كل اسم ينتهي بنقطة.
2. احذف النقاط من الأسماء
تستطيع تغيير اسم واحد يدوياً في Edit ثم Channel locations، في خانةfield (in a dialog)مكان في نافذة نكتب فيه قيمة أو نختارها. Channel label (“label”). لكن الأسماء 64، فالأسرع أن تحذف النقاط منها كلها بأربعة أسطر في الـ Command Window:
for iChan = 1:EEG.nbchan
EEG.chanlocs(iChan).labels = strrep(EEG.chanlocs(iChan).labels, '.', '');
end
[ALLEEG, EEG, CURRENTSET] = eeg_store(ALLEEG, EEG, CURRENTSET); eeglab redraw;اكتب {EEG.chanlocs(1:3).labels} مرة أخرى. الناتج الآن 'Fc5' 'Fc3' 'Fc1'.
3. اجلب المواقع
- افتح Edit ثم Channel locations.
- لأن القنوات بلا مواقع بعد، يفتح EEGLAB أولاً نافذة عنوانها Look up channel locations?.
- أبقِ الاختيار الافتراضي في : use MNI coordinate file for BEM dipfit model. والملف تحته
standard_1005.elc. - اترك خانة Import file instead and erase all channels غير مفعّلة.
- اضغط OK. يطبع الـ Command Window السطر
64 channel with the same label found and imported. - تفتح نافذة تعديل القنوات، وفيها كل قناة بإحداثياتها. اضغط OK في أسفلها لتغلقها. التغييرات لا تُطبَّق إلا بعد إغلاق هذه النافذة.
4. تحقّق من المواقع على الرأس
افتح Plot ثم Channel locations ثم By name. يظهر رأس من الأعلى، والأنف في الأعلى، واسم كل قطب في مكانه.
5. احفظ
افتح File ثم Resave current dataset(s). يكتب هذا الأسماء المصحّحة والمواقع في نفس الملف S001R03.set في مجلد الدروس.
كيف أطبّقها في EEGLAB؟
1. شاهد المشكلة
- افتح الداتاست
S001R03.setالتي حفظتها في الدرس السابق. - في النافذة الرئيسية، سطر Channel locations يعرض
No (labels only). - اكتب في الـ Command Window:
{EEG.chanlocs(1:3).labels}. الناتج'Fc5.''Fc3.''Fc1.': كل اسم ينتهي بنقطة.
2. احذف النقاط من الأسماء
تستطيع تغيير اسم واحد يدوياً في Edit ثم Channel locations، في خانة Channel label (“label”). لكن الأسماء 64، فالأسرع أن تحذف النقاط منها كلها بأربعة أسطر في الـ Command Window:
for iChan = 1:EEG.nbchan
EEG.chanlocs(iChan).labels = strrep(EEG.chanlocs(iChan).labels, '.', '');
end
[ALLEEG, EEG, CURRENTSET] = eeg_store(ALLEEG, EEG, CURRENTSET); eeglab redraw;اكتب {EEG.chanlocs(1:3).labels} مرة أخرى. الناتج الآن 'Fc5' 'Fc3' 'Fc1'.
3. اجلب المواقع
- افتح Edit ثم Channel locations.
- لأن القنوات بلا مواقع بعد، يفتح EEGLAB أولاً نافذة عنوانها Look up channel locations?.
- أبقِ الاختيار الافتراضي في القائمة: use MNI coordinate file for BEM dipfit model. والملف تحته
standard_1005.elc. - اترك خانة Import file instead and erase all channels غير مفعّلة.
- اضغط OK. يطبع الـ Command Window السطر
64 channel with the same label found and imported. - تفتح نافذة تعديل القنوات، وفيها كل قناة بإحداثياتها. اضغط OK في أسفلها لتغلقها. التغييرات لا تُطبَّق إلا بعد إغلاق هذه النافذة.
4. تحقّق من المواقع على الرأس
افتح Plot ثم Channel locations ثم By name. يظهر رأس من الأعلى، والأنف في الأعلى، واسم كل قطب في مكانه.
5. احفظ
افتح File ثم Resave current dataset(s). يكتب هذا الأسماء المصحّحة والمواقع في نفس الملف S001R03.set في مجلد الدروس.
كيف أكتبها بالكود؟
نفس الخطوات في 20 أسطر MATLAB
% Start EEGLAB and load the file from the previous lesson
[ALLEEG, EEG, CURRENTSET, ALLCOM] = eeglab;
dataFolder = 'C:\Users\me\Documents\eeg-course'; % change it
EEG = pop_loadset('filename', 'S001R03.set', 'filepath', dataFolder);
[ALLEEG, EEG, CURRENTSET] = eeg_store(ALLEEG, EEG, 0);
% Remove the trailing dots from the names (Fc5. -> Fc5, Cz.. -> Cz)
for iChan = 1:EEG.nbchan
EEG.chanlocs(iChan).labels = strrep(EEG.chanlocs(iChan).labels, '.', '');
end
% Look up the positions in the standard MNI template
% (case does not matter: Fc5 matches FC5)
EEG = pop_chanedit(EEG, 'lookup', 'standard_1005.elc');
EEG = eeg_checkset(EEG);
% Plot the electrodes by name (same as Plot > Channel locations > By name)
figure; topoplot([], EEG.chanlocs, 'style', 'blank', ...
'electrodes', 'labelpoint', 'chaninfo', EEG.chaninfo);
% Save over the lesson file and show the result in the main window
EEG = pop_saveset(EEG, 'savemode', 'resave');
[ALLEEG, EEG, CURRENTSET] = eeg_store(ALLEEG, EEG, CURRENTSET);
eeglab redrawstrrep(text, '.', '')تستبدل كل نقطة في النص بلا شيء.'lookup', 'standard_1005.elc'هو نفس الاختيار الافتراضي في نافذة الجلب. يجد EEGLAB هذا الملف داخل pluginحزمة تضيف وظائف أو قوائم جديدة إلى EEGLAB. (plugin) dipfit التي تأتي مع EEGLAB.
كيف أكتبها بالكود؟
% Start EEGLAB and load the file from the previous lesson
[ALLEEG, EEG, CURRENTSET, ALLCOM] = eeglab;
dataFolder = 'C:\Users\me\Documents\eeg-course'; % change it
EEG = pop_loadset('filename', 'S001R03.set', 'filepath', dataFolder);
[ALLEEG, EEG, CURRENTSET] = eeg_store(ALLEEG, EEG, 0);
% Remove the trailing dots from the names (Fc5. -> Fc5, Cz.. -> Cz)
for iChan = 1:EEG.nbchan
EEG.chanlocs(iChan).labels = strrep(EEG.chanlocs(iChan).labels, '.', '');
end
% Look up the positions in the standard MNI template
% (case does not matter: Fc5 matches FC5)
EEG = pop_chanedit(EEG, 'lookup', 'standard_1005.elc');
EEG = eeg_checkset(EEG);
% Plot the electrodes by name (same as Plot > Channel locations > By name)
figure; topoplot([], EEG.chanlocs, 'style', 'blank', ...
'electrodes', 'labelpoint', 'chaninfo', EEG.chaninfo);
% Save over the lesson file and show the result in the main window
EEG = pop_saveset(EEG, 'savemode', 'resave');
[ALLEEG, EEG, CURRENTSET] = eeg_store(ALLEEG, EEG, CURRENTSET);
eeglab redrawstrrep(text, '.', '')تستبدل كل نقطة في النص بلا شيء.'lookup', 'standard_1005.elc'هو نفس الاختيار الافتراضي في نافذة الجلب. يجد EEGLAB هذا الملف داخل إضافة (plugin) dipfit التي تأتي مع EEGLAB.
أي قيمة أختار؟
القيم المناسبة حسب هدف تحليلك
الاختيار الأساسي: من أين تأتي المواقع؟
| المصدر | متى تستخدمه | كيف |
|---|---|---|
قالب MNI القياسي (standard_1005.elc) | قبعتك تستخدم أسماء 10-20 أو 10-10 القياسية، ولم تقِس المواقع. هذه حالتنا. | الاختيار الافتراضي في Look up channel locations? |
| ملف المواقع الخاص بقبعتك (من الشركة المصنّعة) | أسماء القنوات في جهازك غير قياسية، مثل الأرقام E1 و E2 | Read locations في نافذة تعديل القنوات |
| مواقع مقيسة على رأس مشاركparticipantالشخص الذي سُجّلت بياناته في التجربة. | قِست مواقع الأقطاب بجهاز تحديد المواقع (digitizer) في جلسة التسجيل | Read locations مع ملف ذلك الجهاز |
الأحرف الكبيرة والصغيرة لا تهم. يقارن EEGLAB الأسماء بالأحرف الصغيرة، فـ Fc5 يجد FC5 في القالب. أما الأحرف الزائدة مثل النقاط أو المسافات فتهم.
أي قيمة أختار؟
الاختيار الأساسي: من أين تأتي المواقع؟
| المصدر | متى تستخدمه | كيف |
|---|---|---|
قالب MNI القياسي (standard_1005.elc) | قبعتك تستخدم أسماء 10-20 أو 10-10 القياسية، ولم تقِس المواقع. هذه حالتنا. | الاختيار الافتراضي في Look up channel locations? |
| ملف المواقع الخاص بقبعتك (من الشركة المصنّعة) | أسماء القنوات في جهازك غير قياسية، مثل الأرقام E1 و E2 | Read locations في نافذة تعديل القنوات |
| مواقع مقيسة على رأس المشارك | قِست مواقع الأقطاب بجهاز تحديد المواقع (digitizer) في جلسة التسجيل | Read locations مع ملف ذلك الجهاز |
الأحرف الكبيرة والصغيرة لا تهم. يقارن EEGLAB الأسماء بالأحرف الصغيرة، فـ Fc5 يجد FC5 في القالب. أما الأحرف الزائدة مثل النقاط أو المسافات فتهم.
كيف أتأكد أنها نجحت؟
4 فحوص سريعة
- سطر Channel locations في النافذة الرئيسية يعرض
Yes. - طبع الـ Command Window السطر
64 channel with the same label found and imported. - Plot ثم Channel locations ثم By name يعرض 64 قطباً:
Czفي الوسط، وFpzفي الأمام، وOzفي الخلف. all(~cellfun(@isempty, {EEG.chanlocs.X}))يعطي1: لكل قناة إحداثيات.
احتفظ بـ S001R03.set. الدرس التالي (حدثeventعلامة في التسجيل تحدد لحظة شيء مهم، مثل ظهور مثير.) يكمل عليه.
كيف أتأكد أنها نجحت؟
- سطر Channel locations في النافذة الرئيسية يعرض
Yes. - طبع الـ Command Window السطر
64 channel with the same label found and imported. - Plot ثم Channel locations ثم By name يعرض 64 قطباً:
Czفي الوسط، وFpzفي الأمام، وOzفي الخلف. all(~cellfun(@isempty, {EEG.chanlocs.X}))يعطي1: لكل قناة إحداثيات.
احتفظ بـ S001R03.set. الدرس التالي (الأحداث) يكمل عليه.
ما الأخطاء التي يقع فيها كثيرون؟
5 أخطاء، وكيف تتجنّبها
- الجلب قبل حذف النقاط. لا يطابق أي اسم، ولا يظهر أي تحذير. ويبقى سطر Channel locations على
No (labels only). احذف النقاط، ثم اجلب المواقع من جديد. - عدم إغلاق نافذة تعديل القنوات بزر OK. التغييرات لا تُطبَّق إلا بعد إغلاقها.
- ظنّ أن الأقطاب خارج الدائرة خطأ. الدائرة تمثّل المستوى الأفقي المارّ بمركز الرأس. الأقطاب تحت هذا المستوى، حول الحافة السفلى للقبعة (مثل
T7وT8وT9وT10وIz)، تُرسم عليها أو خارجها. هذا متوقع. - تفعيل خانة Import file instead and erase all channels. هذا يستبدل قنواتك بكل قنوات القالب (مئات الأسماء). اتركها غير مفعّلة.
- افتراض أن ترتيب القنوات في الملف يتبع الرأس. في
S001R03.edfالقناة الأولىFc5لاFp1. ابحث عن القناة باسمها دائماً، لا برقمها.
ما الأخطاء التي يقع فيها كثيرون؟
- الجلب قبل حذف النقاط. لا يطابق أي اسم، ولا يظهر أي تحذير. ويبقى سطر Channel locations على
No (labels only). احذف النقاط، ثم اجلب المواقع من جديد. - عدم إغلاق نافذة تعديل القنوات بزر OK. التغييرات لا تُطبَّق إلا بعد إغلاقها.
- ظنّ أن الأقطاب خارج الدائرة خطأ. الدائرة تمثّل المستوى الأفقي المارّ بمركز الرأس. الأقطاب تحت هذا المستوى، حول الحافة السفلى للقبعة (مثل
T7وT8وT9وT10وIz)، تُرسم عليها أو خارجها. هذا متوقع. - تفعيل خانة Import file instead and erase all channels. هذا يستبدل قنواتك بكل قنوات القالب (مئات الأسماء). اتركها غير مفعّلة.
- افتراض أن ترتيب القنوات في الملف يتبع الرأس. في
S001R03.edfالقناة الأولىFc5لاFp1. ابحث عن القناة باسمها دائماً، لا برقمها.
متصفحك لا يسمح بحفظ التقدّم. كل الدروس متاحة، لكن علامات الإكمال لن تُحفظ.
تم. حُفظ تقدّمك في هذا المتصفح.تراجعكيف أكتبها في ورقتي؟
قالب Methods: عدّل البيانات والإعدادات والإصدارات لتطابق ما نفّذته
قالب: عدّل البيانات والإعدادات والإصدارات لتطابق ما نفّذته.
Channel labels were cleaned of trailing periods and matched to the standard 10-5 template in MNI space (standard_1005.elc) with pop_chanedit (EEGLAB 2026.1).كيف أكتبها في ورقتي؟
قالب: عدّل البيانات والإعدادات والإصدارات لتطابق ما نفّذته.
Channel labels were cleaned of trailing periods and matched to the standard 10-5 template in MNI space (standard_1005.elc) with pop_chanedit (EEGLAB 2026.1).أين أقرأ أكثر؟
3 مراجع: التوثيق الرسمي أولاً
- EEGLAB Tutorialتوثيقc. Channel Locations: Command-line channel location look up example; Why are electrodes plotted outside of the head limits?
- EEGLAB preprocessing #2: Events and channel locationsفيديوالفيديو كاملاً · 11:40
- EEG Motor Movement/Imagery Dataset (PhysioNet)Montage
مكتوب لـ EEGLAB 2026.1 · 2026-10-28
للتوسّع
- EEGLAB Tutorial: https://eeglab.org/tutorials/04_Import/Channel_Locations.html (c. Channel Locations: Command-line channel location look up example; Why are electrodes plotted outside of the head limits?)
- EEGLAB preprocessing #2: Events and channel locations: https://www.youtube.com/watch?v=2CPmmPG5Beo (الفيديو كاملاً)
- EEG Motor Movement/Imagery Dataset (PhysioNet): https://physionet.org/content/eegmmidb/1.0.0/ (Montage)
تحتاج مساعدة؟
اسأل، أو شاركنا رأيك، أو بلّغ عن خطأ
- بلّغ عن خطأ علمي · يحتاج حساباً على GitHub. لا تملك حساباً؟ استخدم "شاركنا رأيك".