المحطة 9 · الدرس 1
الأمر eegh وسجل الأوامر
eeglab_data.set (D1) · لا شيء: البيانات كما نزّلتها.تنزيل البيانات (يفتح في نافذة جديدة)سكربت الوصول لهذه الحالة
% Start a fresh EEGLAB session so the history begins empty
clear
[ALLEEG, EEG, CURRENTSET, ALLCOM] = eeglab;زر الرجوع في متصفحك يعيدك لنفس المكان الذي كنت فيه، فافتح ما تشاء بلا قلق.
الفكرة باختصار
كل ضغطة في واجهة EEGLAB تنفّذ في الخلفية سطراً من MATLAB. EEGLAB يحفظ هذه الأسطر بالترتيب في سجل الأوامرcommand historyقائمة الأوامر التي نفّذتها الواجهة، ويعرضها الأمر eegh. (command history)، والأمر eegh يعرضها لك.
هذا السجل هو أول سكربتscriptملف أوامر MATLAB ينفّذ خطوات المعالجة بالترتيب. لك، ولم تكتب منه حرفاً. تحفظه في ملف، فتعيد نفس التحليل بضغطة واحدة، أو تطبّقه على مشاركparticipantالشخص الذي سُجّلت بياناته في التجربة. آخر.
قبل وبعد

ماذا يعني ما رأيته؟
بعد أن تضغط Ok في هذه النافذة، اكتب eegh في نافذة الأوامر. السطر المقابل هو:
EEG = pop_eegfiltnew(EEG, 'locutoff',0.1,'plotfreqz',1);كل خانةfield (in a dialog)مكان في نافذة نكتب فيه قيمة أو نختارها. ملأتها في النافذة موجودة في السطر: 'locutoff',0.1 هو حدthresholdقيمة إذا تجاوزتها الإشارة اعتُبرت مشكلة. الأدنى، و 'plotfreqz',1 هو خانة Plot frequency response المفعّلة.
ماذا يعني ما رأيته؟
بعد أن تضغط Ok في هذه النافذة، اكتب eegh في نافذة الأوامر. السطر المقابل هو:
EEG = pop_eegfiltnew(EEG, 'locutoff',0.1,'plotfreqz',1);كل خانة ملأتها في النافذة موجودة في السطر: 'locutoff',0.1 هو الحد الأدنى، و 'plotfreqz',1 هو خانة Plot frequency response المفعّلة.
أسئلتك بعد هذا، كل جواب في قسمه:
لماذا أحتاج هذه الخطوة؟
السبب بالتفصيل، والمصطلحات التي تحتاجها
والسجل أيضاً توثيق دقيق لما فعلته. بعد شهر لن تتذكر أي حد فلترfilterأداة تُضعف ترددات معيّنة في الإشارة وتُبقي غيرها. اخترت، لكن السجل يتذكر.
لماذا أحتاج هذه الخطوة؟
والسجل أيضاً توثيق دقيق لما فعلته. بعد شهر لن تتذكر أي حد فلتر اخترت، لكن السجل يتذكر.
كيف أطبّقها في EEGLAB؟
11 خطوة من القوائم
ابدأ بجلسة جديدة كما في “نقطة البداية”: الأمر clear ثم eeglab. تشغيل eeglab يبدأ سجلاً جديداً فارغاً، فلا يختلط بأوامر جلسة سابقة.
أولاً: نفّذ بعض الخطوات من الواجهةGUIالنوافذ والقوائم التي نستخدمها بالفأرة بدل كتابة الأوامر.
- افتح File ثم Load existing dataset، واختر
eeglab_data.setمن مجلدsample_dataداخل مجلد EEGLAB. - افتح Tools ثم Filter the data ثم Basic FIR filter (new, default). اكتب
0.1في Lower edge of the frequency pass band (Hz)، واضغط Ok. أغلق نافذة استجابة الفلتر، وسمِّ داتاستdatasetملف بيانات EEG واحد محمّل في EEGLAB مع معلوماته.D1 hp0.1. - افتح نفس مرة ثانية لإزالة ضوضاء الكهرباءline noiseتداخل من شبكة الكهرباء عند 60 هرتز في السعودية أو 50 هرتز في بلدان أخرى. عند 60 هرتز. اكتب
58في Lower edge of the frequency pass band (Hz) و62في Higher edge of the frequency pass band (Hz)، وفعّل Notch filter the data instead of pass band. اضغط Ok، وسمِّ الداتاستD1 hp0.1 notch60. - افتح Plot ثم Channel data (scroll)، ثم أغلق النافذة.
ثانياً: اعرض السجل
- في نافذة أوامر MATLAB اكتب
eeghواضغط Enter. يطبع EEGLAB كل أوامر الجلسة من الأقدم إلى الأحدث. ستشبه هذا (المسار عندك مختلف):
[ALLEEG EEG CURRENTSET ALLCOM] = eeglab;
EEG = pop_loadset('filename','eeglab_data.set','filepath','C:\eeglab2026.1\sample_data\');
[ALLEEG, EEG, CURRENTSET] = eeg_store( ALLEEG, EEG, 0 );
EEG = pop_eegfiltnew(EEG, 'locutoff',0.1,'plotfreqz',1);
[ALLEEG EEG CURRENTSET] = pop_newset(ALLEEG, EEG, 1,'setname','D1 hp0.1','gui','off');
EEG = pop_eegfiltnew(EEG, 'locutoff',58,'hicutoff',62,'revfilt',1,'plotfreqz',1);
[ALLEEG EEG CURRENTSET] = pop_newset(ALLEEG, EEG, 2,'setname','D1 hp0.1 notch60','gui','off');
pop_eegplot( EEG, 1, 1, 1);- طابق كل سطر بخطوته. لاحظ أن خانة Notch filter the data instead of pass band صارت
'revfilt',1، وأن خانة Plot frequency response صارت'plotfreqz',1. هكذا تتعلّم اسم كل خيار في السكربت من الواجهة نفسها.
ثالثاً: احفظ السجل في ملف
- افتح File ثم History scripts ثم Save session history script. الاسم المقترح
eeglabhist.m. غيّره إلىmy_first_history.mواحفظه في مجلد عملك. - اكتب في نافذة الأوامر
EEG.history. هذا سجل الداتاست: أوامر الداتاست الحالية فقط، بدون أوامر إدارة الداتاست. في أوله أسطر لم تكتبها أنت، بمسارات مثل/Users/arno/...: هذا تاريخ الملف عند من صنعه، لأن السجل يُحفظ داخل ملف.setوينتقل معه. بعدها سطر يسجّل إصدار EEGLAB، ثم سطرا الفلتر، وفي آخره سطرpop_eegplotلأنك فتحت نافذة العرض من القائمة. - لحفظه في ملف، افتح File ثم History scripts ثم Save dataset history script.
رابعاً: شغّل السجل
- أغلق EEGLAB، واكتب
clearثمclose all. - افتح
my_first_history.mفي محرر MATLAB واضغط Run. تتكرر الخطوات كلها وحدها، وتنفتح نافذة العرض في النهاية. يمكنك أيضاً تشغيله من File ثم History scripts ثم Run script.
سجل الجلسة أم سجل الداتاست؟
سجل الجلسة (eegh) يحفظ كل ما فعلته في الجلسة لكل الداتاست، ويضيع عند تشغيل eeglab من جديد إذا لم تحفظه. سجل الداتاست (EEG.history) يحفظ ما غيّر هذه الداتاست فقط، ويُحفظ داخل ملف .set، فتجده بعد سنة إذا فتحت الملف.
سجل الجلسة أم سجل الداتاست؟
سجل الجلسة (eegh) يحفظ كل ما فعلته في الجلسة لكل الداتاست، ويضيع عند تشغيل eeglab من جديد إذا لم تحفظه. سجل الداتاست (EEG.history) يحفظ ما غيّر هذه الداتاست فقط، ويُحفظ داخل ملف .set، فتجده بعد سنة إذا فتحت الملف.
كيف أطبّقها في EEGLAB؟
ابدأ بجلسة جديدة كما في “نقطة البداية”: الأمر clear ثم eeglab. تشغيل eeglab يبدأ سجلاً جديداً فارغاً، فلا يختلط بأوامر جلسة سابقة.
أولاً: نفّذ بعض الخطوات من الواجهة
- افتح File ثم Load existing dataset، واختر
eeglab_data.setمن مجلدsample_dataداخل مجلد EEGLAB. - افتح Tools ثم Filter the data ثم Basic FIR filter (new, default). اكتب
0.1في Lower edge of the frequency pass band (Hz)، واضغط Ok. أغلق نافذة استجابة الفلتر، وسمِّ الداتاستD1 hp0.1. - افتح نفس القائمة مرة ثانية لإزالة ضوضاء الكهرباء عند 60 هرتز. اكتب
58في Lower edge of the frequency pass band (Hz) و62في Higher edge of the frequency pass band (Hz)، وفعّل Notch filter the data instead of pass band. اضغط Ok، وسمِّ الداتاستD1 hp0.1 notch60. - افتح Plot ثم Channel data (scroll)، ثم أغلق النافذة.
ثانياً: اعرض السجل
- في نافذة أوامر MATLAB اكتب
eeghواضغط Enter. يطبع EEGLAB كل أوامر الجلسة من الأقدم إلى الأحدث. ستشبه هذا (المسار عندك مختلف):
[ALLEEG EEG CURRENTSET ALLCOM] = eeglab;
EEG = pop_loadset('filename','eeglab_data.set','filepath','C:\eeglab2026.1\sample_data\');
[ALLEEG, EEG, CURRENTSET] = eeg_store( ALLEEG, EEG, 0 );
EEG = pop_eegfiltnew(EEG, 'locutoff',0.1,'plotfreqz',1);
[ALLEEG EEG CURRENTSET] = pop_newset(ALLEEG, EEG, 1,'setname','D1 hp0.1','gui','off');
EEG = pop_eegfiltnew(EEG, 'locutoff',58,'hicutoff',62,'revfilt',1,'plotfreqz',1);
[ALLEEG EEG CURRENTSET] = pop_newset(ALLEEG, EEG, 2,'setname','D1 hp0.1 notch60','gui','off');
pop_eegplot( EEG, 1, 1, 1);- طابق كل سطر بخطوته. لاحظ أن خانة Notch filter the data instead of pass band صارت
'revfilt',1، وأن خانة Plot frequency response صارت'plotfreqz',1. هكذا تتعلّم اسم كل خيار في السكربت من الواجهة نفسها.
ثالثاً: احفظ السجل في ملف
- افتح File ثم History scripts ثم Save session history script. الاسم المقترح
eeglabhist.m. غيّره إلىmy_first_history.mواحفظه في مجلد عملك. - اكتب في نافذة الأوامر
EEG.history. هذا سجل الداتاست: أوامر الداتاست الحالية فقط، بدون أوامر إدارة الداتاست. في أوله أسطر لم تكتبها أنت، بمسارات مثل/Users/arno/...: هذا تاريخ الملف عند من صنعه، لأن السجل يُحفظ داخل ملف.setوينتقل معه. بعدها سطر يسجّل إصدار EEGLAB، ثم سطرا الفلتر، وفي آخره سطرpop_eegplotلأنك فتحت نافذة العرض من القائمة. - لحفظه في ملف، افتح File ثم History scripts ثم Save dataset history script.
رابعاً: شغّل السجل
- أغلق EEGLAB، واكتب
clearثمclose all. - افتح
my_first_history.mفي محرر MATLAB واضغط Run. تتكرر الخطوات كلها وحدها، وتنفتح نافذة العرض في النهاية. يمكنك أيضاً تشغيله من File ثم History scripts ثم Run script.
سجل الجلسة أم سجل الداتاست؟
سجل الجلسة (eegh) يحفظ كل ما فعلته في الجلسة لكل الداتاست، ويضيع عند تشغيل eeglab من جديد إذا لم تحفظه. سجل الداتاست (EEG.history) يحفظ ما غيّر هذه الداتاست فقط، ويُحفظ داخل ملف .set، فتجده بعد سنة إذا فتحت الملف.
سجل الجلسة أم سجل الداتاست؟
سجل الجلسة (eegh) يحفظ كل ما فعلته في الجلسة لكل الداتاست، ويضيع عند تشغيل eeglab من جديد إذا لم تحفظه. سجل الداتاست (EEG.history) يحفظ ما غيّر هذه الداتاست فقط، ويُحفظ داخل ملف .set، فتجده بعد سنة إذا فتحت الملف.
كيف أكتبها بالكود؟
نفس الخطوات في 15 أسطر MATLAB
سكربت السجل يعمل كما هو، لكنه مكتوب للآلة لا لك. نظّفه قبل أن تعتمد عليه. هذا نفس السجل بعد التنظيف:
% Rebuilt from the EEGLAB session history (eegh)
eeglab nogui
eeglabRoot = fileparts(which('eeglab'));
% Load the sample dataset (portable path, works on any computer)
EEG = pop_loadset('filename', 'eeglab_data.set', 'filepath', fullfile(eeglabRoot, 'sample_data'));
% High-pass: passband edge at 0.1 Hz
[EEG, com] = pop_eegfiltnew(EEG, 'locutoff', 0.1);
EEG = eeg_hist(EEG, com);
% Line noise: notch between 58 and 62 Hz
[EEG, com] = pop_eegfiltnew(EEG, 'locutoff', 58, 'hicutoff', 62, 'revfilt', 1);
EEG = eeg_hist(EEG, com);
EEG.setname = 'D1 hp0.1 notch60';
EEG = eeg_checkset(EEG);
% Save the dataset history to a file, for your records
pop_saveh(EEG.history, 'D1_hp0.1_notch60_history.m', pwd);ما تغيّر عن السجل الخام:
- المسار الثابت صار
fullfile(eeglabRoot, 'sample_data')، فيعمل السكربت على أي جهاز. 'plotfreqz',1حُذف، فلا تتوقف كل خطوة عند نافذة رسم.- أسطر
eeg_storeوpop_newsetحُذفت، لأنها لإدارة الداتاست في الواجهة. السكربت يعمل على متغيّرEEGواحد، والاسم يُكتب فيEEG.setname. eeglab noguiبدلeeglab، فيحمّل EEGLAB دواله بدون فتح النافذة الرئيسية.- التعليقات أضفناها، لأن سطر الكود يقول ماذا يفعل، والتعليق يقول لماذا.
[EEG, com]وeeg_histأضفناهما. دوالpop_تُرجع سطر أمرها في المخرج الثانيcom، وeeg_histيضيفه إلىEEG.history. بدونهما يبقى سجل الداتاست فارغاً من خطوات السكربت، لأن EEGLAB يكتب السجل تلقائياً للأوامر المنفّذة من القوائم فقط.
pop_saveh من سكربت
pop_saveh هو نفس ما يفعله البند Save dataset history script. ولحفظ سجل الجلسة من سكربت اكتب pop_saveh(ALLCOM, 'session_history.m', pwd).
pop_saveh من سكربت
pop_saveh هو نفس ما يفعله البند Save dataset history script. ولحفظ سجل الجلسة من سكربت اكتب pop_saveh(ALLCOM, 'session_history.m', pwd).
كيف أكتبها بالكود؟
سكربت السجل يعمل كما هو، لكنه مكتوب للآلة لا لك. نظّفه قبل أن تعتمد عليه. هذا نفس السجل بعد التنظيف:
% Rebuilt from the EEGLAB session history (eegh)
eeglab nogui
eeglabRoot = fileparts(which('eeglab'));
% Load the sample dataset (portable path, works on any computer)
EEG = pop_loadset('filename', 'eeglab_data.set', 'filepath', fullfile(eeglabRoot, 'sample_data'));
% High-pass: passband edge at 0.1 Hz
[EEG, com] = pop_eegfiltnew(EEG, 'locutoff', 0.1);
EEG = eeg_hist(EEG, com);
% Line noise: notch between 58 and 62 Hz
[EEG, com] = pop_eegfiltnew(EEG, 'locutoff', 58, 'hicutoff', 62, 'revfilt', 1);
EEG = eeg_hist(EEG, com);
EEG.setname = 'D1 hp0.1 notch60';
EEG = eeg_checkset(EEG);
% Save the dataset history to a file, for your records
pop_saveh(EEG.history, 'D1_hp0.1_notch60_history.m', pwd);ما تغيّر عن السجل الخام:
- المسار الثابت صار
fullfile(eeglabRoot, 'sample_data')، فيعمل السكربت على أي جهاز. 'plotfreqz',1حُذف، فلا تتوقف كل خطوة عند نافذة رسم.- أسطر
eeg_storeوpop_newsetحُذفت، لأنها لإدارة الداتاست في الواجهة. السكربت يعمل على متغيّرEEGواحد، والاسم يُكتب فيEEG.setname. eeglab noguiبدلeeglab، فيحمّل EEGLAB دواله بدون فتح النافذة الرئيسية.- التعليقات أضفناها، لأن سطر الكود يقول ماذا يفعل، والتعليق يقول لماذا.
[EEG, com]وeeg_histأضفناهما. دوالpop_تُرجع سطر أمرها في المخرج الثانيcom، وeeg_histيضيفه إلىEEG.history. بدونهما يبقى سجل الداتاست فارغاً من خطوات السكربت، لأن EEGLAB يكتب السجل تلقائياً للأوامر المنفّذة من القوائم فقط.
pop_saveh من سكربت
pop_saveh هو نفس ما يفعله البند Save dataset history script. ولحفظ سجل الجلسة من سكربت اكتب pop_saveh(ALLCOM, 'session_history.m', pwd).
pop_saveh من سكربت
pop_saveh هو نفس ما يفعله البند Save dataset history script. ولحفظ سجل الجلسة من سكربت اكتب pop_saveh(ALLCOM, 'session_history.m', pwd).
أي قيمة أختار؟
القيم المناسبة حسب هدف تحليلك
| تريد أن | استخدم | لماذا |
|---|---|---|
| تعيد كل ما فعلته اليوم، بكل الداتاست | سجل الجلسة: eegh أو Save session history script | فيه أوامر التحميل والحفظ وإدارة الداتاست، فيعيد الجلسة كاملة. |
تعرف كيف صُنع ملف .set معيّن | سجل الداتاست: EEG.history | يُحفظ داخل الملف نفسه، فيبقى مع البيانات (توثيق EEGLAB الرسمي، قسم EEGLAB dataset history). |
| تبني سكربتاً لمشاركين آخرين | سجل الداتاست بعد تنظيفه | أقصر، ولا يحوي أوامر الواجهة، فينقل بسهولة لحلقة على مشاركين (درس معالجة الدفعات). |
أي قيمة أختار؟
| تريد أن | استخدم | لماذا |
|---|---|---|
| تعيد كل ما فعلته اليوم، بكل الداتاست | سجل الجلسة: eegh أو Save session history script | فيه أوامر التحميل والحفظ وإدارة الداتاست، فيعيد الجلسة كاملة. |
تعرف كيف صُنع ملف .set معيّن | سجل الداتاست: EEG.history | يُحفظ داخل الملف نفسه، فيبقى مع البيانات (توثيق EEGLAB الرسمي، قسم EEGLAB dataset history). |
| تبني سكربتاً لمشاركين آخرين | سجل الداتاست بعد تنظيفه | أقصر، ولا يحوي أوامر الواجهة، فينقل بسهولة لحلقة على مشاركين (درس معالجة الدفعات). |
كيف أتأكد أنها نجحت؟
3 فحوص سريعة
- السكربت يعمل وحده. شغّل السكربت النظيف في جلسة جديدة. يجب أن ينتهي بدون أي خطأ وبدون أن يطلب منك ضغطة.
- نفس المعالجة. بعد تشغيله اكتب
EEG.history. يجب أن ترى سطري الفلتر بنفس الأرقام التي اخترتها في الواجهة:0.1، ثم58و62مع'revfilt',1. - ملف السجل موجود. في مجلد عملك يجب أن تجد
D1_hp0.1_notch60_history.m. افتحه، وستجد فيه نفس سطري الفلتر.
كيف أتأكد أنها نجحت؟
- السكربت يعمل وحده. شغّل السكربت النظيف في جلسة جديدة. يجب أن ينتهي بدون أي خطأ وبدون أن يطلب منك ضغطة.
- نفس المعالجة. بعد تشغيله اكتب
EEG.history. يجب أن ترى سطري الفلتر بنفس الأرقام التي اخترتها في الواجهة:0.1، ثم58و62مع'revfilt',1. - ملف السجل موجود. في مجلد عملك يجب أن تجد
D1_hp0.1_notch60_history.m. افتحه، وستجد فيه نفس سطري الفلتر.
ما الأخطاء التي يقع فيها كثيرون؟
4 أخطاء، وكيف تتجنّبها
- تشغيل
eeglabمن جديد قبل حفظ سجل الجلسة.eeglabيبدأ سجلاً فارغاً. احفظ السجل أولاً، أو اعتمد علىEEG.historyالمحفوظ مع الداتاست. - مشاركة السكربت بمسار ثابت. سطر مثل
'filepath','C:\Users\...'لا يعمل على جهاز زميلك. استبدله بـfullfileكما في السكربت أعلاه. - توقّع أن يُسجَّل ما نُفّذ خارج القوائم. EEGLAB يكتب السجل للأوامر المنفّذة من القوائم فقط. ما تكتبه بيدك في نافذة الأوامر لا يظهر في
eegh، وتشغيلpop_eegfiltnewمن سكربت لا يغيّرEEG.history. إذا أردت أن يحمل الملف المحفوظ تاريخه، أضفEEG = eeg_hist(EEG, com);بعد كل خطوة كما في السكربت أعلاه. - تشغيل سجل الداتاست كما هو. في أوله أسطر قديمة من صانع الملف بمسارات من جهازه، فيتوقف عند أول سطر. انسخ منه أسطر المعالجة فقط، وابدأ سكربتك بأمر تحميل بمسار من جهازك.
ما الأخطاء التي يقع فيها كثيرون؟
- تشغيل
eeglabمن جديد قبل حفظ سجل الجلسة.eeglabيبدأ سجلاً فارغاً. احفظ السجل أولاً، أو اعتمد علىEEG.historyالمحفوظ مع الداتاست. - مشاركة السكربت بمسار ثابت. سطر مثل
'filepath','C:\Users\...'لا يعمل على جهاز زميلك. استبدله بـfullfileكما في السكربت أعلاه. - توقّع أن يُسجَّل ما نُفّذ خارج القوائم. EEGLAB يكتب السجل للأوامر المنفّذة من القوائم فقط. ما تكتبه بيدك في نافذة الأوامر لا يظهر في
eegh، وتشغيلpop_eegfiltnewمن سكربت لا يغيّرEEG.history. إذا أردت أن يحمل الملف المحفوظ تاريخه، أضفEEG = eeg_hist(EEG, com);بعد كل خطوة كما في السكربت أعلاه. - تشغيل سجل الداتاست كما هو. في أوله أسطر قديمة من صانع الملف بمسارات من جهازه، فيتوقف عند أول سطر. انسخ منه أسطر المعالجة فقط، وابدأ سكربتك بأمر تحميل بمسار من جهازك.
متصفحك لا يسمح بحفظ التقدّم. كل الدروس متاحة، لكن علامات الإكمال لن تُحفظ.
تم. حُفظ تقدّمك في هذا المتصفح.تراجعأين أقرأ أكثر؟
2 مراجع: التوثيق الرسمي أولاً
- EEGLAB Tutorialتوثيق11. Write scripts > a. Using EEGLAB history
- EEGLAB TutorialتوثيقEEGLAB functions
مكتوب لـ EEGLAB 2026.1 · 2026-10-28
للتوسّع
- EEGLAB Tutorial: https://eeglab.org/tutorials/11_Scripting/Using_EEGLAB_history.html (11. Write scripts > a. Using EEGLAB history)
- EEGLAB Tutorial: https://eeglab.org/tutorials/ConceptsGuide/EEGLAB_functions.html (EEGLAB functions)
تحتاج مساعدة؟
اسأل، أو شاركنا رأيك، أو بلّغ عن خطأ
- بلّغ عن خطأ علمي · يحتاج حساباً على GitHub. لا تملك حساباً؟ استخدم "شاركنا رأيك".