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

clean_rawdata و ASR

مهم15 دقيقةقبل هذا الدرس: القنوات السيئةاطبع البطاقة
تبدأ من: 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;

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

بعض آرتفاكتartifactإشارة غير دماغية تختلط بالتسجيل، مثل الرمش أو نشاط العضلات. قصيرة وضخمة: سلك انسحب، أو مشاركparticipantالشخص الذي سُجّلت بياناته في التجربة. تحرّك، أو قفزة مفاجئة في كل قناةchannelالإشارة المسجّلة من قطب واحد، وهي ما يعرضه EEGLAB.. هذه لا تشبه الرمش الذي يتكرّر بنفس الشكل ويعزله ICAطريقة تفصل الإشارة المسجّلة إلى مصادر مستقلة، بعضها دماغي وبعضها آرتفاكت. جيداً. الدفعة التي لا تتكرّر تربك ICA بدل ذلك. في مسارنا تجرّب ASRطريقة تكتشف المقاطع شديدة الضوضاء وتعيد بناءها من بيانات نظيفة. على D1 للمقارنة فقط، ولا تحفظ النتيجة.

قبل وبعد

الصورة تُضاف قريباً.

النافذة التي تظهر بعد clean_rawdata، من vis_artifacts، على D1: البيانات الأصلية والمنظّفة فوق بعضهما بلونين، والأجزاء المحذوفة معلَّمة. اختر مقطعاً فيه جزء محذوف. إذا لم يكن في D1 جزء محذوف واضح بهذه الإعدادات، فاستخدم مشاركاً واحداً من D3 بعد high-pass عند 0.1 هرتز، بنفس الإعدادات ما عدا القنوات المستبعدة: اكتب أسماء قنوات العين من قائمة قنوات ذلك الملف بدل EOG1 EOG2. واذكر ذلك تحت الصورة. المصدر: لقطة من EEGLAB.

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

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

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

طريقة ASR (Artifact Subspace Reconstruction) تجد هذه الدفعات تلقائياً. هي جزء من pluginحزمة تضيف وظائف أو قوائم جديدة إلى EEGLAB. clean_rawdata التي تأتي مع EEGLAB. وكما يشرح التوتوريال الرسمي، تعمل على مرحلتين:

  1. تجد أجزاء نظيفة من التسجيل، اسمها بيانات المعايرة، وتتعلّم منها حجم النشاط الطبيعي.
  2. تعلّم كل نافذة قصيرة نشاطها أكبر بأضعاف كثيرة من بيانات المعايرة. القيمة الافتراضية 20 انحرافاً معيارياً.

في البيانات المسجّلة ينصح التوتوريال الرسمي بحذف الأجزاء المعلَّمة بدل تصحيحها. التصحيح صُمّم للاستخدام اللحظي، وأثره على التحليل بعد التسجيل غير مفهوم بوضوح.

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

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

ابدأ و D1 hp0.1 notch60 مفتوحة كما في “نقطة البداية”. هي مفلترة بـ high-passفلتر يمرّر الترددات العالية ويُضعف البطيئة مثل الانجراف. من قبل.

  1. افتح Tools ثم Reject data using Clean Rawdata and ASR.
  2. اترك Remove channel drift (data not already high-pass filtered) بدون تفعيل، لأن البيانات مفلترة عند 0.1 هرتز.
  3. أبقِ Process/remove channels مفعّلاً، وفعّل Ignore these channels (ECG, EMG, …)، واكتب بجانبه EOG1 EOG2.
  4. ألغِ معايير القنوات الثلاثة: Remove channel if it is flat for more than (seconds) و Max acceptable high-frequency noise std dev و Min acceptable correlation with nearby chans [0-1]. القنوات السيئة لها درسها.
  5. أبقِ Perform Artifact Subspace Reconstruction bad burst correction/rejection مفعّلاً، و 20 في Max acceptable 0.5 second window std dev.
  6. أبقِ Remove bad data periods (when uncheck, correct using ASR) مفعّلاً، واترك Use Riemanian distance metric (not Euclidean) - beta بدون تفعيل.
  7. أبقِ Additional removal of bad data periods مفعّلاً، و -Inf 7 في Acceptable [min max] channel RMS range (+/- std dev)، و 25 في Maximum out-of-bound channels (%).
  8. أبقِ Pop up scrolling data window with rejected data highlighted مفعّلاً، واضغط OK.
  9. تظهر نافذة عرض متتابع فيها البيانات الأصلية والمنظّفة معاً. مرّر فيها وانظر ما حُذف.
  10. سمِّ داتاستdatasetملف بيانات EEG واحد محمّل في EEGLAB مع معلوماته. الجديدة D1 asr. في النافذة الرئيسية قارن Frames per epoch و Events مع D1 hp0.1 notch60. الأحداث الزائدة هي أحداث boundary.
  11. لا تحفظ D1 asr. المسار الأساسي يكمل من D1 hp0.1 notch60.

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

نفس الخطوات في 16 أسطر MATLAB
MATLAB
% ASR on a copy: no channel criteria (bad channels lesson), EOG channels ignored
EEG_asr = pop_clean_rawdata(EEG, 'FlatlineCriterion', 'off', 'ChannelCriterion', 'off', ...
    'LineNoiseCriterion', 'off', 'Highpass', 'off', 'BurstCriterion', 20, ...
    'WindowCriterion', 0.25, 'BurstRejection', 'on', 'Distance', 'Euclidian', ...
    'WindowCriterionTolerances', [-Inf 7], 'channels_ignore', {'EOG1', 'EOG2'});
EEG_asr.setname = 'D1 asr';

% How much data was kept, and how many boundary events were added
fprintf('Data kept: %.1f of %.1f s (%.1f%%)\n', EEG_asr.pnts / EEG_asr.srate, ...
    EEG.pnts / EEG.srate, 100 * EEG_asr.pnts / EEG.pnts);
fprintf('Boundary events: %d\n', sum(strcmp({EEG_asr.event.type}, 'boundary')));

% Effect on epochs: pop_epoch drops every epoch that contains a boundary event
epBefore = pop_epoch(EEG, {'square'}, [-0.2 0.8]);
epAfter  = pop_epoch(EEG_asr, {'square'}, [-0.2 0.8]);
fprintf('Epochs around square: %d before ASR, %d after\n', epBefore.trials, epAfter.trials);

% Original and cleaned data in one scrolling window
vis_artifacts(EEG_asr, EEG);

سكربتscriptملف أوامر MATLAB ينفّذ خطوات المعالجة بالترتيب. يطبع عدد الثواني الباقية، وعدد أحداث boundary المضافة، وعدد الـ epochs حول square التي بقيت. pop_epoch من المحطة 5، وهنا تعدّ الـ epochs المفقودة فقط.

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

القيم المناسبة حسب هدف تحليلك
الإعدادالقيمةلماذا
عتبة ASR (Max acceptable 0.5 second window std dev)20الافتراضية، ومحافظة جداً حسب صفحة الإضافة.
عتبة أشد5الإضافة تسمّي 5 محافظة بشكل معقول، لكنها تنبّه أن بعض دفعات EEGتسجيل النشاط الكهربائي للدماغ من أقطاب على فروة الرأس. الشديدة، مثل مغازل النوم، قد تتجاوز حتى 5.
أشد قيمة3الإضافة تقول إنها أشد قيمة يمكن استخدامها دون خسارة كثير من EEG.
حذف أو تصحيححذفالتوتوريال الرسمي: التصحيح صُمّم للاستخدام اللحظي.
Remove channel drift (data not already high-pass filtered)بدون تفعيل إذا فلترت من قبلوإلا تُفلتر البيانات مرتين.
القنوات غير الدماغية (EOG و ECG)مستبعدةإشارتها الكبيرة ليست خللاً، ودرس القنوات السيئة يستبعدها لنفس السبب.

متى تستخدم ASR ومتى تتجنّبه؟

استخدمهتجنّبه
بيانات فيها دفعات نادرة ضخمة، مثل آرتفاكت الحركة أو السلكبيانات نظيفة أصلاً، مثل D1
قبل ICA، لتعطي ICA بيانات تدريب أنظفعندما يهمّك كل epoch والدفعات قليلة: احذفها بالعين بدلاً منه
بعتبة محافظة مثل 20بعتبة منخفضة تحذف الرمش الذي يستطيع ICA تصحيحه

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

4 فحوص سريعة
  1. نافذة العرض المتتابع أظهرت البيانات الأصلية والمنظّفة، ورأيت ما حُذف.
  2. تحقق السكربت: يطبع الثواني الباقية، وعدد أحداث boundary، والـ epochs قبل وبعد.
  3. زادت الأحداث في النافذة الرئيسية بعدد أحداث boundary.
  4. المسار لم يتغيّر: D1 asr غير محفوظة، والدرس التالي يبدأ من D1 hp0.1 notch60.

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

5 أخطاء، وكيف تتجنّبها
  • استخدام التصحيح بدل الحذف في البيانات المسجّلة. أبقِ Remove bad data periods (when uncheck, correct using ASR) مفعّلاً.
  • عتبة منخفضة جداً. عند 3 أو 5 قد يحذف ASR الرمش ونشاطاً دماغياً كبيراً لكنه طبيعي. ابدأ بـ 20، وانظر ما حُذف، ثم قرّر.
  • نسيان أحداث boundary. كل جزء محذوف يصير حدث boundary، وكل epoch فيه حدث منها يُحذف. عدّ الـ epochs قبل وبعد.
  • تشغيل ASR على بيانات فيها انجراف بطيء. ASR يحتاج بيانات مفلترة بـ high-pass، كما تقول صفحة الإضافة. فلتر أولاً، أو فعّل Remove channel drift (data not already high-pass filtered).
  • عدم النظر إلى النتيجة. صفحة الإضافة الرسمية تنصح المستخدم الجديد بمقارنة البيانات الأصلية والمنظّفة بالعين. نافذة العرض المتتابع موجودة لهذا.

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

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

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

High-amplitude bursts were identified with Artifact Subspace Reconstruction (burst criterion 20 SD; clean_rawdata plugin 2.11, EEGLAB 2026.1), and the affected periods were removed together with windows in which more than 25% of channels exceeded 7 SD ([N] s, [P]% of the data); EOG channels were excluded.

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

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

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

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

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