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

إزالة ضوضاء الكهرباء (50 أو 60 هرتز)

أساسي12 دقيقةقبل هذا الدرس: فلترة high-pass و low-passاطبع البطاقة
تبدأ من: eeglab_data.set (D1) · ما طُبّق عليه قبل هذا الدرس: فلترة high-pass و low-passتنزيل البيانات (يفتح في نافذة جديدة)
سكربت الوصول لهذه الحالة
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
EEG = pop_eegfiltnew(EEG, 'locutoff', 0.1);
EEG.filename = ''; EEG.filepath = ''; EEG.datfile = ''; EEG.saved = 'no';
[ALLEEG, EEG, CURRENTSET] = pop_newset(ALLEEG, EEG, 0, 'setname', 'D1 hp0.1', 'gui', 'off');
eeglab redraw;

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

تحتاج هذه الخطوة إذا كان تحليلك يحتفظ بترددات فوق ترددfrequencyعدد الدورات في الثانية، ويُقاس بالهرتز. الكهرباء، مثل ICAطريقة تفصل الإشارة المسجّلة إلى مصادر مستقلة، بعضها دماغي وبعضها آرتفاكت. والتحليل الطيفي والتحليل الزمني-الترددي. في تحليل ERPمتوسط استجابة الدماغ لحدث معيّن عبر محاولات كثيرة. مع low-passفلتر يمرّر الترددات المنخفضة ويُضعف العالية مثل نشاط العضلات. عند 30 هرتز، غالباً لا تحتاجها.

في مسارنا نحتفظ بالترددات العالية حتى بعد ICA، فنزيلها هنا.

قبل وبعد

اعرض
طيف كل القنوات من 1 إلى 64 هرتز قبل فلتر الشبكة: قمة ألفا قرب 10 هرتز وقمة حادة ضيقة عند 60 هرتز.
قبل: D1 hp0.1البيانات: عيّنة EEGLAB الرسمية (eeglab_data.set)
الطيف نفسه بعد فلتر الشبكة: اختفت قمة 60 هرتز وظهر مكانها انخفاض ضيق، وباقي الطيف لم يتغير.
بعد: D1 hp0.1 notch60البيانات: عيّنة EEGLAB الرسمية (eeglab_data.set)

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

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

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

أسلاك الكهرباء حول جهاز التسجيل تضيف إلى كل قناةchannelالإشارة المسجّلة من قطب واحد، وهي ما يعرضه EEGLAB. موجة منتظمة بتردد ثابت. تظهر في الطيفspectrumتوزيع قوة الإشارة على الترددات. كقمة حادة ضيّقة، وقد تكون أقوى من نشاط الدماغ في نفس المنطقة. هذه الموجة اسمها ضوضاء الكهرباءline noiseتداخل من شبكة الكهرباء عند 60 هرتز في السعودية أو 50 هرتز في بلدان أخرى. (line noise).

تردد الكهرباء يعتمد على بلد التسجيل: 60 هرتز في السعودية وأمريكا، و50 هرتز في أوروبا وأغلب الدول العربية الأخرى. تحقّق من الطيف قبل أن تفترض.

في D1 القمة عند 60 هرتز، وهي أعلى من الترددات المجاورة بحوالي 20 ديسيبل (dB)dB (decibel)مقياس لوغاريتمي للقدرة يسهّل مقارنة القيم الكبيرة والصغيرة. (dB) في أغلب القنوات.

طريقة المسار

نستخدم فلترfilterأداة تُضعف ترددات معيّنة في الإشارة وتُبقي غيرها. notch ضيّقاً من فلتر EEGLAB الأساسي، لأنه موجود في كل نسخة من EEGLAB 2026.1 بدون تثبيت أي pluginحزمة تضيف وظائف أو قوائم جديدة إلى EEGLAB.. يحذف نطاقاً ضيّقاً حول 60 هرتز فقط، ويترك ما تحته وما فوقه. البدائل الأدق في آخر الدرس.

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

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

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

أولاً: ابحث عن القمة في الطيف

  1. افتح Plot ثم Channel spectra and maps.
  2. غيّر خانةfield (in a dialog)مكان في نافذة نكتب فيه قيمة أو نختارها. Plotting frequency range [lo_Hz hi_Hz]: من 2 25 إلى 1 64. النطاق الافتراضي يتوقف عند 25 هرتز، فلا يُظهر قمة الكهرباء أبداً.
  3. في Frequencies to plot as scalp maps (Hz): اكتب 10 60، واترك باقي الخانات كما هي، ثم اضغط OK.
  4. انظر للطيف: قمة حادة ضيّقة عند 60 هرتز. خريطة الرأسscalp mapرسم يبيّن توزيع قيمة على الرأس من الأعلى. عند 60 تبيّن القنوات التي فيها أكثر ضوضاء.

ثانياً: طبّق فلتر notch

  1. افتح Tools ثم Filter the data ثم Basic FIR filter (new, default).
  2. في Lower edge of the frequency pass band (Hz) اكتب 58.
  3. في Higher edge of the frequency pass band (Hz) اكتب 62.
  4. فعّل Notch filter the data instead of pass band. بدون هذا الخيار يُبقي الفلتر النطاق من 58 إلى 62 فقط ويحذف كل الباقي.
  5. اترك باقي الخانات كما هي، واضغط OK. تظهر نافذة استجابة الفلتر، لأن Plot frequency response مفعّل افتراضياً: حفرة عند 60 هرتز فقط.
  6. تطبع نافذة الأوامر سطراً يبدأ بـ pop_eegfiltnew() - performing، وفيه طول الفلتر بالنقاط ونوعه.
  7. سمِّ الداتاست الجديدة D1 hp0.1 notch60، واترك Overwrite it in memory (set=yes; unset=create a new dataset) غير مفعّل.
  8. احفظها من File ثم Save current dataset as. درس القنوات السيئة يبدأ منها.

ثالثاً: قارن الطيف كما في الخطوة الأولى، على الداتاست الجديدة.

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

نفس الخطوات في 10 أسطر MATLAB
MATLAB
% Line frequency: 60 Hz in Saudi Arabia and the Americas, 50 Hz in Europe
lineFreq = 60;

% Spectrum before, with scalp maps at 10 Hz and at the line frequency
figure; pop_spectopo(EEG, 1, [], 'EEG', 'freqrange', [1 64], 'freq', [10 lineFreq]);

% Notch: remove a narrow band around the line frequency (revfilt = 1)
EEG = pop_eegfiltnew(EEG, 'locutoff', lineFreq - 2, 'hicutoff', lineFreq + 2, 'revfilt', 1);
EEG.setname = 'D1 hp0.1 notch60';

% Spectrum after
figure; pop_spectopo(EEG, 1, [], 'EEG', 'freqrange', [1 64], 'freq', [10 lineFreq]);

EEG = pop_saveset(EEG, 'filename', 'D1_hp0.1_notch60.set', 'filepath', pwd);

السطر الذي يدخل في المسار هو سطر الفلتر نفسه، وهو في سكربتات نقطة البداية لكل الدروس التالية: pop_eegfiltnew(EEG, 'locutoff', 58, 'hicutoff', 62, 'revfilt', 1).

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

القيم المناسبة حسب هدف تحليلك
الإعدادالقيمةلماذا
تردد الكهرباء60 هرتز في D1 وفي السعودية، و50 في أوروبا وأغلب الدول العربية الأخرىيحدّده بلد التسجيل. تحقّق من الطيف دائماً.
حدود notchالتردد ± 2 هرتز: من 58 إلى 62، أو من 48 إلى 52ضيّق بما يكفي ليُبقي الترددات المجاورة. النطاق الانتقالي (transition band) هنا حوالي 2 هرتز، والتوثيق الرسمي يقترح من 1 إلى 5 هرتز لفلتر الكهرباء. عند 128 هرتز طول الفلتر 213 نقطة، والحذف الكامل عند 60، ونصف السعة يُحذف عند 59 و61 تقريباً.
رتبة الفلتر (filter order)اتركها فارغة (تلقائية)EEGLAB يحسبها من الحدود ومعدل العيّنات.
التوافقيات (120 و180 هرتز…)لا تلزم في D1أعلى تردد في D1 هو 64 هرتز. مع بيانات بـ 500 هرتز أو أكثر، تحقّق من قمم عند مضاعفات التردد، وأزل كل قمة تظهر بنفس الطريقة.

ثلاث طرق لإزالة ضوضاء الكهرباء، ومتى تستخدم كل واحدة:

الطريقةمتى تستخدمهاهل تأتي مع EEGLAB 2026.1؟
فلتر notch (pop_eegfiltnew)ERP وأغلب الحالات. هي طريقة مسارنانعم، ضمن إضافة firfilt
CleanLineتحليل طيفي تريد فيه الإبقاء على الترددات حول 50 أو 60 هرتز. تقدّر موجة الكهرباء وتطرحها بدل حذف نطاق كامل. التوثيق الرسمي يقول إن نتيجتها ممتازة عندما تنجح، وإنها لا تنجح دائماًلا، تُثبّت من File ثم Manage EEGLAB extensions
Zapline-plusتحليل طيفي أو زمني-ترددي فوق 40 هرتز، أو ضوضاء كهرباء قوية مع توافقيات كثيرة. تبحث عن الضوضاء وتزيلها تلقائياًلا، تُثبّت من نفس القائمة

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

4 فحوص سريعة
  1. قارن الطيف قبل وبعد بنطاق 1 64. القمة عند 60 هرتز اختفت، وفي مكانها حفرة ضيّقة.
  2. الترددات المجاورة لم تتغيّر: القدرة عند 55 هرتز وما تحتها، وعند قمة ألفا قرب 10 هرتز، كما كانت قبل الفلتر.
  3. خريطة الرأس عند 60 هرتز لم تعد تبرز قنوات بعينها.
  4. في نافذة الأوامر تجد سطراً يبدأ بـ pop_eegfiltnew() - performing وفيه طول الفلتر، وسطراً يبدأ بـ pop_eegfiltnew() - passband edge(s): وفيه الحدّان 58 و62.

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

5 أخطاء، وكيف تتجنّبها
  • افتراض 50 هرتز لأنها “المعروفة”. السعودية وأمريكا 60 هرتز. فلتر على 50 في بيانات سعودية لا يزيل شيئاً، ويحذف نطاقاً سليماً.
  • فحص الطيف بالنطاق الافتراضي. نافذة الطيف ترسم من 2 إلى 25 هرتز افتراضياً، فلا ترى القمة وتظن أن البيانات نظيفة. غيّر النطاق دائماً إلى ما يشمل 50 أو 60.
  • نسيان خيار notch. بدون Notch filter the data instead of pass band يصبح الفلتر band-pass من 58 إلى 62، ويحذف كل نشاط الدماغ.
  • فلتر notch واسع جداً. حذف من 45 إلى 75 مثلاً يأخذ معه نشاطاً حقيقياً من الدماغ والعضلات. ابقَ بنطاق ± 2 هرتز.
  • استخدام low-pass بدل notch مع تحليل يحتاج الترددات العالية. فلتر low-pass عند 30 يزيل الكهرباء، لكنه يزيل معها كل ما فوق 30. هذا مقبول لـ ERP في آخر المعالجة، لا قبل ICA.

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

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

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

Line noise was attenuated with a zero-phase Hamming-windowed sinc FIR band-stop (notch) filter (passband edges 58 and 62 Hz, −6 dB cutoffs [59] and [61] Hz, filter length [213] points; pop_eegfiltnew with ‘revfilt’, firfilt plugin 2.8, EEGLAB 2026.1).

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

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

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

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

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