المحطة 3 · الدرس 4

القنوات السيئة

تبدأ من: eeglab_data.set (D1) · ما طُبّق عليه قبل هذا الدرس: فلترة high-pass و low-pass، إزالة ضوضاء الكهرباء (50 أو 60 هرتز)تنزيل البيانات (يفتح في نافذة جديدة)
سكربت الوصول لهذه الحالة
MATLAB
[ALLEEG, EEG, CURRENTSET, ALLCOM] = eeglab;
eeglabRoot = fileparts(which('eeglab'));
EEG = pop_loadset('eeglab_data.set', fullfile(eeglabRoot, 'sample_data'));

% 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);
EEG.filename = ''; EEG.filepath = ''; EEG.datfile = ''; EEG.saved = 'no';
[ALLEEG, EEG, CURRENTSET] = pop_newset(ALLEEG, EEG, 0, 'setname', 'D1 hp0.1 notch60', 'gui', 'off');
eeglab redraw;

الفكرة باختصار

قناةchannelالإشارة المسجّلة من قطب واحد، وهي ما يعرضه EEGLAB. السيئة قناة لا تسجّل نشاط الدماغ كما يجب. السبب غالباً قطبelectrodeالقطعة المعدنية التي توضع على الرأس لالتقاط الإشارة. لم يلامس الجلد جيداً، أو سلك تالف، أو قطبان تلامسا بالجِل.

تظهر بثلاثة أشكال: خط مسطّح، أو ضوضاءnoiseأي جزء من التسجيل لا يحمل المعلومة التي نقيسها. أعلى بكثير من جاراتها، أو إشارةsignalقيم تتغيّر مع الزمن، مثل الجهد المسجّل في قناة. لا تشبه القنوات المجاورة لها.

قبل وبعد

عشر ثوانٍ من بيانات مشارك في تجربة N400 من ERP CORE في نافذة التمرير: بعض القنوات مثل FP1 فيها انحراف كبير وضوضاء أعلى من جيرانها.
البيانات: ERP CORE، الترخيص CC BY-SA 4.0البيانات: ERP CORE (Kappenman وآخرون، 2021) · رخصة الصورة: CC BY-SA 4.0

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

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

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

قناة سيئةbad channelقناة إشارتها مسطّحة أو مليئة بالضوضاء طوال التسجيل تقريباً. واحدة تضرّ كل البيانات. في المرجع المتوسطaverage referenceمرجع يساوي متوسط كل قنوات الرأس. تدخل ضوضاؤها في كل القنوات. وفي ICAطريقة تفصل الإشارة المسجّلة إلى مصادر مستقلة، بعضها دماغي وبعضها آرتفاكت. تأخذ مكوّنات لنفسها بدل المصادر الحقيقية.

لذلك تكتشفها الآن، وتسجّل أسماءها، وتحذفها. وفي الدرس التالي تعيد بناءها الاستيفاءinterpolationتقدير إشارة قناة محذوفة من القنوات المحيطة بها..

عن D1

التوثيق الرسمي يقول إن بيانات التوتوريال نظيفة نسبياً، ولا فيها قنوات تُحذف عادة. وفحص clean_rawdata بالإعدادات في هذا الدرس لا يحذف أي قناة. هذه نتيجة صحيحة: ليست كل البيانات فيها قنوات سيئة. لن نخترع خللاً. ستتعلّم الطريقة على D1، وترى شكل القناة السيئة في صورة من بيانات أخرى.

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

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

ابدأ والنسخة الرئيسية D1 hp0.1 notch60 مفتوحة كما في “نقطة البداية”.

أولاً: انظر إلى الإشارة

  1. افتح Plot ثم Channel data (scroll).
  2. مرّ على التسجيل كله، لا على أول بضع ثوانٍ فقط. بعض القنوات تفسد لفترة قصيرة ثم تعود.
  3. ابحث عن ثلاث علامات: خط مسطّح، أو سعةamplitudeحجم الإشارة، ويُقاس في EEG بالميكروفولت (µV). أكبر بكثير من القنوات المجاورة، أو قفزات متكررة في قناة واحدة.
  4. في D1 سترى قمماً كبيرة في EOG1 و EOG2 والقنوات الأمامية. هذا رمش العينblinkإغلاق العين وفتحها، ويظهر كقمم كبيرة في القنوات الأمامية.، وهو آرتفاكتartifactإشارة غير دماغية تختلط بالتسجيل، مثل الرمش أو نشاط العضلات. طبيعي يزيله ICA لاحقاً. القناة ليست سيئة لأنها تسجّل الرمش.

ثانياً: انظر إلى الطيفspectrumتوزيع قوة الإشارة على الترددات.

  1. افتح Plot ثم Channel spectra and maps.
  2. غيّر Plotting frequency range [lo_Hz hi_Hz]: إلى 1 64، ثم اضغط OK.
  3. القناة السيئة تظهر خطاً بعيداً عن مجموعة الخطوط: أعلى بكثير، أو أدنى بكثير إذا كانت مسطّحة.
  4. اضغط على أي خط في الرسم، فيظهر رقم قناته في نافذة الأوامر.
  5. في D1 تبقى الخطوط متقاربة، ولا يبتعد خط بوضوح عن الباقي.
  6. لتنظر عن قرب إلى قناة مشكوك فيها، افتح Plot ثم Channel properties واكتب رقمها. تعرض النافذة موقع القناة على الرأس، ونشاطها عبر الزمن، وطيفها معاً.

ثالثاً: افحص بمعايير clean_rawdata للقنوات فقط

  1. افتح Tools ثم Reject data using Clean Rawdata and ASR.
  2. اترك Remove channel drift (data not already high-pass filtered) غير مفعّل، لأن البيانات مفلترة أصلاً.
  3. أبقِ Process/remove channels مفعّلاً.
  4. فعّل Ignore these channels (ECG, EMG, …)، واكتب في الخانة بجانبه EOG1 EOG2.
  5. اترك المعايير الثلاثة بقيمها الافتراضية: Remove channel if it is flat for more than (seconds) بقيمة 5، و Max acceptable high-frequency noise std dev بقيمة 4، و Min acceptable correlation with nearby chans [0-1] بقيمة 0.8.
  6. ألغِ تفعيل Perform Artifact Subspace Reconstruction bad burst correction/rejection، وألغِ تفعيل Additional removal of bad data periods. هذان يحذفان مقاطع زمنية، وهذا موضوع درس آخر.
  7. اضغط OK. تطبع نافذة الأوامر Scanning for bad channels... ثم تقدّم الفحص على أجزاء من 5 ثوانٍ.
  8. تظهر نافذة تقارن البيانات قبل وبعد. القناة المحذوفة تظهر بالأحمر. في D1 لا تظهر قناة حمراء.
  9. سمِّ الداتاست الناتجة D1 badch، واترك Overwrite it in memory (set=yes; unset=create a new dataset) غير مفعّل.

رابعاً: سجّل الأسماء واحذف ما وجدته بالنظر

  1. اكتب أسماء كل القنوات السيئة التي وجدتها، من الطرق الثلاث. ستحتاجها في الاستيفاء وفي قسم Methods لورقتك.
  2. clean_rawdata يحذف ما يكتشفه بنفسه. أما القناة التي وجدتها بالنظر فقط، فاحذفها من Edit ثم Select data: اكتب اسمها في خانة Channel(s)، وفعّل المربع تحت on->remove these في نفس السطر، ثم اضغط OK.
  3. في D1 القائمة فارغة، فلا تحذف شيئاً. احفظ D1 badch من File ثم Save current dataset as. درس الاستيفاء يبدأ منها.

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

نفس الخطوات في 16 أسطر MATLAB
MATLAB
% Detection with clean_rawdata channel criteria only:
% no drift removal, no ASR, no window rejection, EOG channels ignored
EEG_test = pop_clean_rawdata(EEG, 'FlatlineCriterion', 5, 'ChannelCriterion', 0.8, ...
    'LineNoiseCriterion', 4, 'Highpass', 'off', 'BurstCriterion', 'off', ...
    'WindowCriterion', 'off', 'BurstRejection', 'off', 'Distance', 'Euclidian', ...
    'channels_ignore', {'EOG1', 'EOG2'});

% Names of the channels it removed
badChans = setdiff({EEG.chanlocs.labels}, {EEG_test.chanlocs.labels}, 'stable');

% Add channels you found by eye, e.g. badChans = [badChans {'T7'}];
fprintf('Bad channels: %s\n', strjoin(badChans, ', '));

% Remove them by name from the main dataset
if ~isempty(badChans)
    EEG = pop_select(EEG, 'rmchannel', badChans);
end
EEG.setname = 'D1 badch';
EEG = pop_saveset(EEG, 'filename', 'D1_badch.set', 'filepath', pwd);

في D1 يطبع السكربت Bad channels: بقائمة فارغة، ويبقى عدد القنوات 32. انسخ badChans إلى سكربت نقطة البداية في الدروس التالية، فهي تبدأ بنفس المتغيّر.

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

القيم المناسبة حسب هدف تحليلك
الإعدادالقيمةلماذا
خط مسطّح5 ثوانٍالافتراضي في clean_rawdata. قناة مسطّحة أطول من ذلك لا تسجّل شيئاً.
ضوضاء الترددات العالية4 انحرافات معياريةالافتراضي. يقارن كل قناة بباقي القنوات، فيكتشف القناة الأعلى ضوضاء بوضوح.
الارتباط بالقنوات المجاورة0.8الافتراضي، ويذكره التوثيق الرسمي. القناة تُحذف إذا قلّ ارتباطها عن 0.8 في أكثر من نصف التسجيل. يعتمد على مواقع الأقطاب، فتأكد أنها صحيحة.
قنوات العين والقلبتُستبعد من الفحصclean_rawdata مصمّم لقنوات EEG. قناة العين لا تشبه جاراتها بطبيعتها، فقد تُحذف وهي سليمة.
ASR وحذف المقاطعغير مفعّلين في هذا الدرسهدفنا القنوات فقط. حذف المقاطع في درس clean_rawdata و ASR.
بديل آلي

إضافة PREP (PrepPipeline) تكتشف القنوات السيئة وتحسب مرجعاً متوسطاً مقاوماً للقنوات السيئة، كلها تلقائياً. تُثبّت من File ثم Manage EEGLAB extensions. نبدأ هنا بالطريقة اليدوية لتفهم كل خطوة.

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

4 فحوص سريعة
  1. عدد القنوات: في النافذة الرئيسية، Channels per frame يساوي العدد الأصلي ناقص القنوات المحذوفة. في D1 يبقى 32.
  2. قائمتك مكتوبة: عندك أسماء القنوات المحذوفة، أو “لا شيء” كما في D1.
  3. الطيف بعد الحذف: افتح Plot ثم Channel spectra and maps بنطاق 1 64. لا يبتعد خط بوضوح عن الباقي.
  4. قنوات العين باقية: EOG1 و EOG2 ما زالتا في قائمة القنوات.

ما الأخطاء التي يقع فيها كثيرون؟

5 أخطاء، وكيف تتجنّبها
  • عدم استبعاد قنوات العين. بدون استبعاد EOG1 و EOG2، قد يحذف clean_rawdata قناة EOG1 في D1، لأن إشارتها لا تشبه القنوات المجاورة. هي ليست سيئة: هي قناة غير دماغية بطبيعتها. توثيق clean_rawdata نفسه يقول إن قنوات الإشارات غير الدماغية تُحذف عادة بهذه الطريقة. لهذا قد ترى في صفحة clean_rawdata الرسمية قنوات حمراء على نفس البيانات.
  • اعتبار قناة الرمش سيئة. القمم الكبيرة في القنوات الأمامية رمش عين. يزيله ICA لاحقاً، ولا تُحذف القناة بسببه.
  • النظر إلى أول بضع ثوانٍ فقط. بعض القنوات تفسد في منتصف التسجيل. مرّ على التسجيل كله.
  • حذف قناة بدون تسجيل اسمها. ستحتاج الأسماء في الاستيفاء، وفي قسم Methods، وعند معالجة باقي المشاركين بنفس الطريقة.
  • حذف عدد كبير من القنوات دون سؤال. إذا ظهرت قنوات كثيرة سيئة، فتحقّق أولاً من مواقع الأقطاب ومن التسجيل كله. clean_rawdata نفسه يتوقف بخطأ إذا أراد حذف أكثر من 75% من القنوات، ويقول إن السبب غالباً مواقع أقطاب خاطئة.

كيف أكتبها في ورقتي؟

قالب Methods: عدّل البيانات والإعدادات والإصدارات لتطابق ما نفّذته

قالب: عدّل البيانات والإعدادات والإصدارات لتطابق ما نفّذته.

Bad channels were identified by visual inspection of the continuous data and channel spectra and with clean_rawdata (flatline criterion 5 s, channel correlation criterion 0.8, line noise criterion 4 SD; EOG channels excluded; clean_rawdata plugin 2.11, EEGLAB 2026.1) and removed ([0] channels).

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

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

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

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

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