المحطة 5 · الدرس 2
تصحيح baseline
eeglab_data.set (D1) · ما طُبّق عليه قبل هذا الدرس: فلترة high-pass و low-pass، إزالة ضوضاء الكهرباء (50 أو 60 هرتز)، القنوات السيئة، الاستيفاء (interpolation)، إعادة المرجع (re-referencing)، تشغيل ICA، فلتر 1 هرتز قبل ICA ونسخ الأوزان، ICLabel وحذف المكوّنات، استخراج epochsتنزيل البيانات (يفتح في نافذة جديدة)سكربت الوصول لهذه الحالة
% Shortcut: if you saved D1_main_clean_lp30.set in the ICLabel lesson, keep
% the first line and the last three lines, and replace every line between them with:
% EEG = pop_loadset('D1_main_clean_lp30.set', pwd);
[ALLEEG, EEG, CURRENTSET, ALLCOM] = eeglab;
eeglabRoot = fileparts(which('eeglab'));
EEG = pop_loadset('eeglab_data.set', fullfile(eeglabRoot, 'sample_data'));
fullLocs = EEG.chanlocs;
% Main dataset: high-pass at 0.1 Hz, then 60 Hz line-noise removal
EEG = pop_eegfiltnew(EEG, 'locutoff', 0.1);
EEG = pop_eegfiltnew(EEG, 'locutoff', 58, 'hicutoff', 62, 'revfilt', 1);
% Bad channels you removed earlier, e.g. {'T7'}; leave empty if none
badChans = {};
if ~isempty(badChans)
EEG = pop_select(EEG, 'rmchannel', badChans);
EEG = pop_interp(EEG, fullLocs, 'spherical');
end
% Average reference, EOG channels excluded
eogIdx = find(ismember({EEG.chanlocs.labels}, {'EOG1', 'EOG2'}));
EEG = pop_reref(EEG, [], 'exclude', eogIdx);
% ICA on a 1-Hz copy, then copy the weights back
EEG_ica = pop_eegfiltnew(EEG, 'locutoff', 1);
EEG_ica = pop_runica(EEG_ica, 'icatype', 'runica', 'extended', 1);
EEG.icaweights = EEG_ica.icaweights;
EEG.icasphere = EEG_ica.icasphere;
EEG.icachansind = EEG_ica.icachansind;
EEG.icawinv = [];
EEG.icaact = [];
EEG = eeg_checkset(EEG);
% Remove components ICLabel rates above 90% Eye or Muscle
EEG = pop_iclabel(EEG, 'default');
EEG = pop_icflag(EEG, [NaN NaN; 0.9 1; 0.9 1; NaN NaN; NaN NaN; NaN NaN; NaN NaN]);
artifactComps = find(EEG.reject.gcompreject);
if ~isempty(artifactComps)
EEG = pop_subcomp(EEG, artifactComps, 0);
end
% Low-pass at 30 Hz
EEG = pop_eegfiltnew(EEG, 'hicutoff', 30);
EEG.setname = 'D1 main clean lp30';
% Epochs around 'square'
EEG = pop_epoch(EEG, {'square'}, [-1 2], 'newname', 'D1 epochs', 'epochinfo', 'yes');
EEG = eeg_checkset(EEG);
EEG.filename = ''; EEG.filepath = ''; EEG.datfile = ''; EEG.saved = 'no';
[ALLEEG, EEG, CURRENTSET] = pop_newset(ALLEEG, EEG, 0, 'setname', 'D1 epochs', 'gui', 'off');
eeglab redraw;زر الرجوع في متصفحك يعيدك لنفس المكان الذي كنت فيه، فافتح ما تشاء بلا قلق.
الفكرة باختصار
كل epochمقطع زمني قصير مقتطع حول حدث. يبدأ من مستوى مختلف قليلاً. السبب انجرافات بطيئة بقيت بعد فلترةfilteringتطبيق فلتر على البيانات.، أو اختلاف بسيط في حالة قطبelectrodeالقطعة المعدنية التي توضع على الرأس لالتقاط الإشارة. بين لحظة وأخرى. هذا الفرق ليس استجابة للمثير، لكنه يضاف لكل نقطة في الـ epoch.
قبل وبعد


اسحب الخط لتقارن.
أسئلتك بعد هذا، كل جواب في قسمه:
لماذا أحتاج هذه الخطوة؟
السبب بالتفصيل، والمصطلحات التي تحتاجها
الحل: خذ baselineالفترة قبل المثير التي تُستخدم كمستوى صفر للمقارنة. (baseline)، وهي فترة لم يرَ فيها مشاركparticipantالشخص الذي سُجّلت بياناته في التجربة. المثير بعد. احسب متوسطها في كل قناةchannelالإشارة المسجّلة من قطب واحد، وهي ما يعرضه EEGLAB. وكل epoch، ثم اطرحه من الـ epoch كله.
بعد التصحيح، كل epoch يبدأ من الصفر تقريباً، وأي تغيّر بعد المثير يُقاس بالنسبة لما قبله.
الـ high-passفلتر يمرّر الترددات العالية ويُضعف البطيئة مثل الانجراف. في المحطة 3 أزال أغلب الانجراف، والتوتوريال الرسمي يعدّه نوعاً من تصحيح baseline. لكن الفرق الباقي بين الـ epochs ما زال يكفي ليؤثر في المتوسط، ولذلك تصحيح baseline خطوة قياسية في تحليل ERPمتوسط استجابة الدماغ لحدث معيّن عبر محاولات كثيرة..
لماذا أحتاج هذه الخطوة؟
الحل: خذ فترة ما قبل المثير (baseline)، وهي فترة لم يرَ فيها المشارك المثير بعد. احسب متوسطها في كل قناة وكل epoch، ثم اطرحه من الـ epoch كله.
بعد التصحيح، كل epoch يبدأ من الصفر تقريباً، وأي تغيّر بعد المثير يُقاس بالنسبة لما قبله.
الـ high-pass في المحطة 3 أزال أغلب الانجراف، والتوتوريال الرسمي يعدّه نوعاً من تصحيح baseline. لكن الفرق الباقي بين الـ epochs ما زال يكفي ليؤثر في المتوسط، ولذلك تصحيح baseline خطوة قياسية في تحليل ERP.
كيف أطبّقها في EEGLAB؟
5 خطوة من القوائم
ابدأ داتاستdatasetملف بيانات EEG واحد محمّل في EEGLAB مع معلوماته. D1 epochs مفتوحة، كما في “نقطة البداية”.
- افتح Tools ثم Remove epoch baseline.
- تظهر نافذة Baseline removal - pop_rmbase(). في Baseline latency range ([min max] in ms) ([ ] = whole epoch): القيمة الافتراضية
-1000 0، أي كل الفترة قبل حدثeventعلامة في التسجيل تحدد لحظة شيء مهم، مثل ظهور مثير.. غيّرها إلى-200 0. - اترك Or remove baseline points vector (ex:1:56): فارغة. هي طريقة بديلة بأرقام النقاط بدل الزمن.
- اترك Channel type(s) وOR channel(s) (default all) فارغتين، فيُطبّق التصحيح على كل القنوات.
- اضغط Ok. في نافذة الداتاست الجديدة اكتب في Name it: الاسم
D1 epochs bl، واترك Overwrite it in memory (set=yes; unset=create a new dataset) غير مفعّل، ثم Ok.
ميلي ثانية لا ثوانٍ
الزمن في هذه النافذة بالميلي ثانية، أما حدود الـ epoch في درس التقطيع فبالثواني. اكتب -200 0 هنا، لا -0.2 0.
ميلي ثانية لا ثوانٍ
الزمن في هذه النافذة بالميلي ثانية، أما حدود الـ epoch في درس التقطيع فبالثواني. اكتب -200 0 هنا، لا -0.2 0.
كيف أطبّقها في EEGLAB؟
ابدأ والداتاست D1 epochs مفتوحة، كما في “نقطة البداية”.
- افتح Tools ثم Remove epoch baseline.
- تظهر نافذة Baseline removal - pop_rmbase(). في Baseline latency range ([min max] in ms) ([ ] = whole epoch): القيمة الافتراضية
-1000 0، أي كل الفترة قبل الحدث. غيّرها إلى-200 0. - اترك Or remove baseline points vector (ex:1:56): فارغة. هي طريقة بديلة بأرقام النقاط بدل الزمن.
- اترك Channel type(s) وOR channel(s) (default all) فارغتين، فيُطبّق التصحيح على كل القنوات.
- اضغط Ok. في نافذة الداتاست الجديدة اكتب في Name it: الاسم
D1 epochs bl، واترك Overwrite it in memory (set=yes; unset=create a new dataset) غير مفعّل، ثم Ok.
ميلي ثانية لا ثوانٍ
الزمن في هذه النافذة بالميلي ثانية، أما حدود الـ epoch في درس التقطيع فبالثواني. اكتب -200 0 هنا، لا -0.2 0.
ميلي ثانية لا ثوانٍ
الزمن في هذه النافذة بالميلي ثانية، أما حدود الـ epoch في درس التقطيع فبالثواني. اكتب -200 0 هنا، لا -0.2 0.
كيف أكتبها بالكود؟
نفس الخطوات في 8 أسطر MATLAB
% Subtract the mean of -200 to 0 ms from every channel and epoch
EEG = pop_rmbase(EEG, [-200 0]);
EEG.setname = 'D1 epochs bl';
EEG = eeg_checkset(EEG);
% Check: the baseline mean should now be close to zero everywhere
blIdx = EEG.times >= -200 & EEG.times <= 0;
blMeans = mean(EEG.data(:, blIdx, :), 2);
fprintf('Baseline points: %d, largest baseline mean: %.2g uV\n', sum(blIdx), max(abs(blMeans(:))));كيف أكتبها بالكود؟
% Subtract the mean of -200 to 0 ms from every channel and epoch
EEG = pop_rmbase(EEG, [-200 0]);
EEG.setname = 'D1 epochs bl';
EEG = eeg_checkset(EEG);
% Check: the baseline mean should now be close to zero everywhere
blIdx = EEG.times >= -200 & EEG.times <= 0;
blMeans = mean(EEG.data(:, blIdx, :), 2);
fprintf('Baseline points: %d, largest baseline mean: %.2g uV\n', sum(blIdx), max(abs(blMeans(:))));أي قيمة أختار؟
القيم المناسبة حسب هدف تحليلك
| الإعداد | القيمة | لماذا |
|---|---|---|
| فترة baseline لتحليل ERP | من -200 إلى 0 ميلي ثانية | قيمة شائعة في دراسات ERP، وهي المستخدمة مثلاً في تجربة N400 في بيانات ERP CORE. قصيرة بما يكفي لتكون قريبة من المثير، وطويلة بما يكفي ليكون متوسطها مستقراً. |
| كل الفترة قبل الحدث | من -1000 إلى 0 | الافتراضي في نافذة EEGLAB. متوسط أكثر استقراراً لأنه من نقاط أكثر، لكنه قد يضم نشاطاً من محاولةtrialتكرار واحد للمهمة في التجربة، غالباً حول مثير واحد. السابقة إذا كانت المحاولات متقاربة. |
| فترة قصيرة جداً | 100 ميلي ثانية أو أقل | التوتوريال الرسمي ينصح بتجنّبها قدر الإمكان، لأن متوسط عدد قليل من النقاط يتأثر ضوضاءnoiseأي جزء من التسجيل لا يحمل المعلومة التي نقيسها.. عند 128 هرتز، 100 ميلي ثانية حوالي 13 نقطة فقط. |
| مسارنا في هذا الموقع | من -200 إلى 0 | 26 نقطة عند 128 هرتز. نفس القيمة لكل المشاركين ولكل الشروط. |
القاعدة: اختر فترة baseline قبل أن ترى النتائج، وطبّقها كما هي على كل المشاركين. تغييرها بعد رؤية الموجة يغيّر نتيجتك.
أي قيمة أختار؟
| الإعداد | القيمة | لماذا |
|---|---|---|
| فترة baseline لتحليل ERP | من -200 إلى 0 ميلي ثانية | قيمة شائعة في دراسات ERP، وهي المستخدمة مثلاً في تجربة N400 في بيانات ERP CORE. قصيرة بما يكفي لتكون قريبة من المثير، وطويلة بما يكفي ليكون متوسطها مستقراً. |
| كل الفترة قبل الحدث | من -1000 إلى 0 | الافتراضي في نافذة EEGLAB. متوسط أكثر استقراراً لأنه من نقاط أكثر، لكنه قد يضم نشاطاً من المحاولة السابقة إذا كانت المحاولات متقاربة. |
| فترة قصيرة جداً | 100 ميلي ثانية أو أقل | التوتوريال الرسمي ينصح بتجنّبها قدر الإمكان، لأن متوسط عدد قليل من النقاط يتأثر بالضوضاء. عند 128 هرتز، 100 ميلي ثانية حوالي 13 نقطة فقط. |
| مسارنا في هذا الموقع | من -200 إلى 0 | 26 نقطة عند 128 هرتز. نفس القيمة لكل المشاركين ولكل الشروط. |
القاعدة: اختر فترة baseline قبل أن ترى النتائج، وطبّقها كما هي على كل المشاركين. تغييرها بعد رؤية الموجة يغيّر نتيجتك.
كيف أتأكد أنها نجحت؟
3 فحوص سريعة
- شغّل أسطر الفحص في آخر السكربت: عدد نقاط baseline يساوي 26، وأكبر متوسط قريب جداً من الصفر (أصغر من 0.001 ميكروفولت).
- افتح Plot ثم Channel data (scroll): كل epoch يبدأ قرب خط الصفر في كل قناة.
- عدد الـ epochs لم يتغيّر: Epochs في النافذة الرئيسية ما زالت 80.
كيف أتأكد أنها نجحت؟
- شغّل أسطر الفحص في آخر السكربت: عدد نقاط baseline يساوي 26، وأكبر متوسط قريب جداً من الصفر (أصغر من 0.001 ميكروفولت).
- افتح Plot ثم Channel data (scroll): كل epoch يبدأ قرب خط الصفر في كل قناة.
- عدد الـ epochs لم يتغيّر: Epochs في النافذة الرئيسية ما زالت 80.
ما الأخطاء التي يقع فيها كثيرون؟
5 أخطاء، وكيف تتجنّبها
- كتابة الزمن بالثواني. النافذة تطلب ميلي ثانية.
-0.2 0يعني فترة طولها 0.2 ميلي ثانية، فلا يدخلها إلا نقطة الصفر وحدها، ويصير “التصحيح” طرح قيمة نقطة واحدة. - ترك القيمة الافتراضية دون تفكير. الافتراضي هنا كل الثانية قبل المثير. هذا ليس خطأ، لكنه قرار يجب أن تختاره وتذكره في ورقتك.
- baseline تضم استجابة. إذا كان في فترة baseline حدث آخر (ضغطة زر أو مثير سابق)، فأنت تطرح استجابة حقيقية من كل الـ epoch. في D1 المحاولات بينها 3 ثوانٍ، فالفترة من -200 إلى 0 نظيفة. الاستثناء المحاولة الثانية: فترة -1000 إلى 0 فيها تضم المربع الأول، وهذا سبب آخر لاختيار -200.
- فرق قبل المثير. إذا كان في فترة baseline فرق بين شرطين (مثلاً موجة بطيئة تبدأ قبل المثير)، فالتصحيح يحوّله إلى فرق معكوس بعد المثير. انظر للموجة كاملة من -200، لا بعد الصفر فقط.
- التصحيح قبل ICA. التوتوريال الرسمي ينبّه أن تصحيح baseline يضيف إزاحات عشوائية لكل قناة، و ICA لا يتعامل معها جيداً. في مسارنا ICA قبل التقطيع، فلا مشكلة.
ما الأخطاء التي يقع فيها كثيرون؟
- كتابة الزمن بالثواني. النافذة تطلب ميلي ثانية.
-0.2 0يعني فترة طولها 0.2 ميلي ثانية، فلا يدخلها إلا نقطة الصفر وحدها، ويصير “التصحيح” طرح قيمة نقطة واحدة. - ترك القيمة الافتراضية دون تفكير. الافتراضي هنا كل الثانية قبل المثير. هذا ليس خطأ، لكنه قرار يجب أن تختاره وتذكره في ورقتك.
- baseline تضم استجابة. إذا كان في فترة baseline حدث آخر (ضغطة زر أو مثير سابق)، فأنت تطرح استجابة حقيقية من كل الـ epoch. في D1 المحاولات بينها 3 ثوانٍ، فالفترة من -200 إلى 0 نظيفة. الاستثناء المحاولة الثانية: فترة -1000 إلى 0 فيها تضم المربع الأول، وهذا سبب آخر لاختيار -200.
- فرق قبل المثير. إذا كان في فترة baseline فرق بين شرطين (مثلاً موجة بطيئة تبدأ قبل المثير)، فالتصحيح يحوّله إلى فرق معكوس بعد المثير. انظر للموجة كاملة من -200، لا بعد الصفر فقط.
- التصحيح قبل ICA. التوتوريال الرسمي ينبّه أن تصحيح baseline يضيف إزاحات عشوائية لكل قناة، و ICA لا يتعامل معها جيداً. في مسارنا ICA قبل التقطيع، فلا مشكلة.
متصفحك لا يسمح بحفظ التقدّم. كل الدروس متاحة، لكن علامات الإكمال لن تُحفظ.
تم. حُفظ تقدّمك في هذا المتصفح.تراجعكيف أكتبها في ورقتي؟
قالب Methods: عدّل البيانات والإعدادات والإصدارات لتطابق ما نفّذته
قالب: عدّل البيانات والإعدادات والإصدارات لتطابق ما نفّذته.
Epochs were baseline-corrected by subtracting the mean voltage from -200 to 0 ms before stimulus onset (pop_rmbase, EEGLAB 2026.1).كيف أكتبها في ورقتي؟
قالب: عدّل البيانات والإعدادات والإصدارات لتطابق ما نفّذته.
Epochs were baseline-corrected by subtracting the mean voltage from -200 to 0 ms before stimulus onset (pop_rmbase, EEGLAB 2026.1).أين أقرأ أكثر؟
3 مراجع: التوثيق الرسمي أولاً
- EEGLAB Tutorialتوثيق7. Extract Data Epochs: Removing baseline values
- Applied Event-Related Potential Data Analysis (Luck)2.07 Exercise: Epoching and Baseline Correction
- What is the best ERP baseline?فيديوالفيديو كاملاً · 16:59
مكتوب لـ EEGLAB 2026.1 · 2026-10-28
للتوسّع
- EEGLAB Tutorial: https://eeglab.org/tutorials/07_Extract_epochs/Extracting_Data_Epochs.html (7. Extract Data Epochs: Removing baseline values)
- Applied Event-Related Potential Data Analysis (Luck): https://socialsci.libretexts.org/Bookshelves/Psychology/Biological_Psychology/Applied_Event-Related_Potential_Data_Analysis_(Luck) (2.07 Exercise: Epoching and Baseline Correction)
- What is the best ERP baseline?: https://www.youtube.com/watch?v=2wS7-XILNso (الفيديو كاملاً)
تحتاج مساعدة؟
اسأل، أو شاركنا رأيك، أو بلّغ عن خطأ
- بلّغ عن خطأ علمي · يحتاج حساباً على GitHub. لا تملك حساباً؟ استخدم "شاركنا رأيك".