المحطة 9 · الدرس 1

الأمر eegh وسجل الأوامر

أساسي10 دقائققبل هذا الدرس: استخراج epochsاطبع البطاقة
تبدأ من: eeglab_data.set (D1) · لا شيء: البيانات كما نزّلتها.تنزيل البيانات (يفتح في نافذة جديدة)
سكربت الوصول لهذه الحالة
MATLAB
% 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الشخص الذي سُجّلت بياناته في التجربة. آخر.

قبل وبعد

نافذة Filter the data -- pop_eegfiltnew() وفي خانة Lower edge of the frequency pass band (Hz) القيمة 0.1، وخانة Plot frequency response مفعّلة.
EEGLAB 2026.1لقطة من واجهة EEGLAB (SCCN)
ماذا يعني ما رأيته؟

بعد أن تضغط Ok في هذه النافذة، اكتب eegh في نافذة الأوامر. السطر المقابل هو:

MATLAB
EEG = pop_eegfiltnew(EEG, 'locutoff',0.1,'plotfreqz',1);

كل خانةfield (in a dialog)مكان في نافذة نكتب فيه قيمة أو نختارها. ملأتها في النافذة موجودة في السطر: 'locutoff',0.1 هو حدthresholdقيمة إذا تجاوزتها الإشارة اعتُبرت مشكلة. الأدنى، و 'plotfreqz',1 هو خانة Plot frequency response المفعّلة.

أسئلتك بعد هذا، كل جواب في قسمه:

لماذا أحتاج هذه الخطوة؟

السبب بالتفصيل، والمصطلحات التي تحتاجها

والسجل أيضاً توثيق دقيق لما فعلته. بعد شهر لن تتذكر أي حد فلترfilterأداة تُضعف ترددات معيّنة في الإشارة وتُبقي غيرها. اخترت، لكن السجل يتذكر.

كيف أطبّقها في EEGLAB؟

11 خطوة من القوائم

ابدأ بجلسة جديدة كما في “نقطة البداية”: الأمر clear ثم eeglab. تشغيل eeglab يبدأ سجلاً جديداً فارغاً، فلا يختلط بأوامر جلسة سابقة.

أولاً: نفّذ بعض الخطوات من الواجهةGUIالنوافذ والقوائم التي نستخدمها بالفأرة بدل كتابة الأوامر.

  1. افتح File ثم Load existing dataset، واختر eeglab_data.set من مجلد sample_data داخل مجلد EEGLAB.
  2. افتح 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.
  3. افتح نفس قائمةmenuمجموعة أوامر تظهر عند الضغط على اسمها في أعلى النافذة. مرة ثانية لإزالة ضوضاء الكهرباء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.
  4. افتح Plot ثم Channel data (scroll)، ثم أغلق النافذة.

ثانياً: اعرض السجل

  1. في نافذة أوامر MATLAB اكتب eegh واضغط Enter. يطبع EEGLAB كل أوامر الجلسة من الأقدم إلى الأحدث. ستشبه هذا (المسار عندك مختلف):
MATLAB
[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);
  1. طابق كل سطر بخطوته. لاحظ أن خانة Notch filter the data instead of pass band صارت 'revfilt',1، وأن خانة Plot frequency response صارت 'plotfreqz',1. هكذا تتعلّم اسم كل خيار في السكربت من الواجهة نفسها.

ثالثاً: احفظ السجل في ملف

  1. افتح File ثم History scripts ثم Save session history script. الاسم المقترح eeglabhist.m. غيّره إلى my_first_history.m واحفظه في مجلد عملك.
  2. اكتب في نافذة الأوامر EEG.history. هذا سجل الداتاست: أوامر الداتاست الحالية فقط، بدون أوامر إدارة الداتاست. في أوله أسطر لم تكتبها أنت، بمسارات مثل /Users/arno/...: هذا تاريخ الملف عند من صنعه، لأن السجل يُحفظ داخل ملف .set وينتقل معه. بعدها سطر يسجّل إصدار EEGLAB، ثم سطرا الفلتر، وفي آخره سطر pop_eegplot لأنك فتحت نافذة العرض من القائمة.
  3. لحفظه في ملف، افتح File ثم History scripts ثم Save dataset history script.

رابعاً: شغّل السجل

  1. أغلق EEGLAB، واكتب clear ثم close all.
  2. افتح my_first_history.m في محرر MATLAB واضغط Run. تتكرر الخطوات كلها وحدها، وتنفتح نافذة العرض في النهاية. يمكنك أيضاً تشغيله من File ثم History scripts ثم Run script.
سجل الجلسة أم سجل الداتاست؟

سجل الجلسة (eegh) يحفظ كل ما فعلته في الجلسة لكل الداتاست، ويضيع عند تشغيل eeglab من جديد إذا لم تحفظه. سجل الداتاست (EEG.history) يحفظ ما غيّر هذه الداتاست فقط، ويُحفظ داخل ملف .set، فتجده بعد سنة إذا فتحت الملف.

كيف أكتبها بالكود؟

نفس الخطوات في 15 أسطر MATLAB

سكربت السجل يعمل كما هو، لكنه مكتوب للآلة لا لك. نظّفه قبل أن تعتمد عليه. هذا نفس السجل بعد التنظيف:

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).

أي قيمة أختار؟

القيم المناسبة حسب هدف تحليلك
تريد أناستخدملماذا
تعيد كل ما فعلته اليوم، بكل الداتاستسجل الجلسة: eegh أو Save session history scriptفيه أوامر التحميل والحفظ وإدارة الداتاست، فيعيد الجلسة كاملة.
تعرف كيف صُنع ملف .set معيّنسجل الداتاست: EEG.historyيُحفظ داخل الملف نفسه، فيبقى مع البيانات (توثيق EEGLAB الرسمي، قسم EEGLAB dataset history).
تبني سكربتاً لمشاركين آخرينسجل الداتاست بعد تنظيفهأقصر، ولا يحوي أوامر الواجهة، فينقل بسهولة لحلقة على مشاركين (درس معالجة الدفعات).

كيف أتأكد أنها نجحت؟

3 فحوص سريعة
  1. السكربت يعمل وحده. شغّل السكربت النظيف في جلسة جديدة. يجب أن ينتهي بدون أي خطأ وبدون أن يطلب منك ضغطة.
  2. نفس المعالجة. بعد تشغيله اكتب EEG.history. يجب أن ترى سطري الفلتر بنفس الأرقام التي اخترتها في الواجهة: 0.1، ثم 58 و62 مع 'revfilt',1.
  3. ملف السجل موجود. في مجلد عملك يجب أن تجد 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); بعد كل خطوة كما في السكربت أعلاه.
  • تشغيل سجل الداتاست كما هو. في أوله أسطر قديمة من صانع الملف بمسارات من جهازه، فيتوقف عند أول سطر. انسخ منه أسطر المعالجة فقط، وابدأ سكربتك بأمر تحميل بمسار من جهازك.

أين أقرأ أكثر؟

2 مراجع: التوثيق الرسمي أولاً

مكتوب لـ EEGLAB 2026.1 · 2026-10-28

تحتاج مساعدة؟

اسأل، أو شاركنا رأيك، أو بلّغ عن خطأ