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

فلتر 1 هرتز قبل ICA ونسخ الأوزان

أساسي12 دقيقةقبل هذا الدرس: تشغيل ICAاطبع البطاقة
تبدأ من: eeglab_data.set (D1) · ما طُبّق عليه قبل هذا الدرس: فلترة high-pass و low-pass، إزالة ضوضاء الكهرباء (50 أو 60 هرتز)، القنوات السيئة، الاستيفاء (interpolation)، إعادة المرجع (re-referencing)، تشغيل ICAتنزيل البيانات (يفتح في نافذة جديدة)
سكربت الوصول لهذه الحالة
MATLAB
[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);
EEG.setname = 'D1 main';
EEG_main = EEG;

% ICA copy: same data, high-pass at 1 Hz, with ICA weights
EEG_ica = pop_eegfiltnew(EEG_main, 'locutoff', 1);
EEG_ica.setname = 'D1 ica1hz';
EEG_ica = pop_runica(EEG_ica, 'icatype', 'runica', 'extended', 1);

% Dataset 1: main dataset; dataset 2: ICA copy
EEG_main.filename = ''; EEG_main.filepath = ''; EEG_main.datfile = ''; EEG_main.saved = 'no';
[ALLEEG, EEG, CURRENTSET] = pop_newset(ALLEEG, EEG_main, 0, 'setname', 'D1 main', 'gui', 'off');
EEG_ica.filename = ''; EEG_ica.filepath = ''; EEG_ica.datfile = ''; EEG_ica.saved = 'no';
[ALLEEG, EEG, CURRENTSET] = pop_newset(ALLEEG, EEG_ica, CURRENTSET, 'setname', 'D1 ica1hz', 'gui', 'off');
eeglab redraw;

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

في درس تشغيل ICAطريقة تفصل الإشارة المسجّلة إلى مصادر مستقلة، بعضها دماغي وبعضها آرتفاكت. اتّبعت قاعدة واحدة: ICA يُحسب على نسخة مفلترة عند 1 هرتز، لا على بيانات الـ ERPمتوسط استجابة الدماغ لحدث معيّن عبر محاولات كثيرة. المفلترة عند 0.1 هرتز. هذا الدرس يشرح لماذا تنجح هذه القاعدة، وكيف تتأكد أن الأوزانweights (ICA)المصفوفة التي تحوّل القنوات إلى مكوّنات ICA. انتقلت صحيحة.

قبل وبعد

نسختان من نفس البيانات: النسخة الرئيسية بفلتر high-pass عند 0.1 هرتز، ونسخة ICA بفلتر 1 هرتز. يُشغَّل ICA على النسخة الثانية، ثم تُنسخ الأوزان إلى الرئيسية التي تكمل إلى ICLabel والـ ERP، أما نسخة ICA فتُستخدم لحساب ICA فقط.
ماذا يعني ما رأيته؟
متوسط الجهد عند Pz من -200 إلى 800 ملي ثانية بمنحنيين: البيانات الأساسية 0.1 هرتز بالأزرق، ونسخة ICA بفلتر 1 هرتز بالأحمر. الموجة الموجبة بين 300 و 600 ملي ثانية أقل في نسخة 1 هرتز.
البيانات: عيّنة EEGLAB الرسمية (eeglab_data.set)

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

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

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

لماذا يفيد 1 هرتز ICA؟ الانجراف البطيء كبير، ويتغيّر على طول التسجيل. فيصرف ICA جزءاً من جهده عليه، وتصبح المكوّنات أقل وضوحاً. التوثيق الرسمي يقول إن جودة تفكيكdecompositionتحويل البيانات إلى مجموعة مكوّنات ICA. ICA أعلى بوضوح، ومكوّناته أقل غموضاً، عندما تُفلتر البيانات بـ high-passفلتر يمرّر الترددات العالية ويُضعف البطيئة مثل الانجراف. فوق 1 هرتز، وأحياناً 2 هرتز.

لماذا يضرّ 1 هرتز الـ ERP؟ مكوّنات ERP البطيئة مثل P3 فيها ترددات منخفضة. فلترfilterأداة تُضعف ترددات معيّنة في الإشارة وتُبقي غيرها. 1 هرتز يحذف جزءاً منها، فيصغر P3. ستقيس هذا بنفسك في سكربتscriptملف أوامر MATLAB ينفّذ خطوات المعالجة بالترتيب. هذا الدرس.

لماذا يصح النسخ؟ ICA لا يتعلّم إشارةsignalقيم تتغيّر مع الزمن، مثل الجهد المسجّل في قناة.. يتعلّم طريقة ثابتة لجمع قناةchannelالإشارة المسجّلة من قطب واحد، وهي ما يعرضه EEGLAB.، ويسمّيها التوثيق الرسمي مرشّحاً مكانياً (spatial filter). النسختان فيهما نفس القنوات ونفس الخلط في الرأس، والفرق في الترددات فقط. لذلك نفس الأوزان تفصل نفس المصادر في النسختين.

الحد، اعرض التعريفحد

thresholdقيمة إذا تجاوزتها الإشارة اعتُبرت مشكلة. الوحيد، كما يقول التوثيق الرسمي: آرتفاكتartifactإشارة غير دماغية تختلط بالتسجيل، مثل الرمش أو نشاط العضلات. الذي يعيش تحت 1 هرتز فقط لا يتعلّمه ICA، فلا يحذفه. وفي التطبيق لم يجد التوثيق الرسمي هذا مشكلة، لأن الآرتفاكت تحت 2 هرتز يظهر عادة فوق 2 هرتز أيضاً.

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

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

ابدأ بالنسختين من نقطة البداية. سكربتها يضع النسخة الرئيسية في داتاستdatasetملف بيانات EEG واحد محمّل في EEGLAB مع معلوماته. 1، ونسخة ICA في الداتاست 2.

أولاً: تحقّق من النسختين

  1. افتح قائمة Datasets. ترى D1 main داتاست 1، و D1 ica1hz داتاست 2.
  2. اختر الداتاست 2. في النافذة الرئيسية تظهر ICA weights بقيمة Yes.
  3. اختر الداتاست 1. تظهر ICA weights بقيمة No، و Channels per frame مثل الداتاست 2: 32 في D1.

ثانياً: انسخ الأوزان

  1. والداتاست 1 هي الحالية، افتح Edit ثم Dataset info.
  2. بجانب ICA weights array or text/binary file (if any): اضغط from other dataset، واكتب 2 ثم OK. تمتلئ ثلاث خانات تلقائياً: ALLEEG(2).icaweights و ALLEEG(2).icasphere و ALLEEG(2).icachansind.
  3. اضغط OK لإغلاق النافذة. تظهر الآن ICA weights بقيمة Yes في الداتاست 1.

ثالثاً: قارن الخرائط

  1. والداتاست 1 هي الحالية، افتح Plot ثم Component maps ثم In 2-D.
  2. اختر الداتاست 2 وافتح نفس النافذة. الخرائط متطابقة وبنفس الترتيب، ومكوّن الرمش في نفس المكان في النسختين.
  3. احفظ الداتاست 1، وهي النسخة الرئيسية بـ 0.1 هرتز لا نسخة ICA بـ 1 هرتز، من File ثم Save current dataset as باسم D1_main_ica.set. درس ICLabel يبدأ منها.

متى تستخدم 2 هرتز بدل 1؟

إذا بقيت مكوّنات كثيرة غامضة، بخرائط مختلطة أو مبعثرة، ابدأ من الداتاست 1 من جديد: فلتر نسخة جديدة عند 2 هرتز، وشغّل عليها ICA، وانسخ أوزانها بنفس الطريقة. الداتاست 1 تبقى عند 0.1 هرتز في كل مرة.

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

نفس الخطوات في 26 أسطر MATLAB
MATLAB
% EEG_main: main dataset (0.1 Hz); EEG_ica: ICA copy (1 Hz) with weights
% Copy the decomposition back to the main dataset
EEG_main.icaweights  = EEG_ica.icaweights;
EEG_main.icasphere   = EEG_ica.icasphere;
EEG_main.icachansind = EEG_ica.icachansind;
EEG_main.icawinv     = [];   % recomputed by eeg_checkset
EEG_main.icaact      = [];
EEG = eeg_checkset(EEG_main);

% Check: same weights and scalp maps in both copies
fprintf('Same weights: %d\n', isequal(EEG.icaweights, EEG_ica.icaweights));
fprintf('Largest scalp map difference: %g\n', max(abs(EEG.icawinv(:) - EEG_ica.icawinv(:))));
fprintf('ICA components: %d\n', size(EEG.icawinv, 2));

% Why two copies: ERP at Pz around 'square' events in each copy
epMain = pop_rmbase(pop_epoch(EEG, {'square'}, [-0.2 0.8]), [-200 0]);
epIca  = pop_rmbase(pop_epoch(EEG_ica, {'square'}, [-0.2 0.8]), [-200 0]);
pz  = find(strcmp({EEG.chanlocs.labels}, 'Pz'));
win = epMain.times >= 300 & epMain.times <= 600;
erpMain = mean(epMain.data(pz, :, :), 3);
erpIca  = mean(epIca.data(pz, :, :), 3);
fprintf('Mean at Pz, 300-600 ms: 0.1 Hz copy %.2f uV, 1 Hz copy %.2f uV\n', ...
    mean(erpMain(win)), mean(erpIca(win)));
figure;
plot(epMain.times, erpMain, epIca.times, erpIca);
legend('Main dataset (0.1 Hz)', 'ICA copy (1 Hz)');
xlabel('Time (ms)'); ylabel('Amplitude (uV)');

EEG = pop_saveset(EEG, 'filename', 'D1_main_ica.set', 'filepath', pwd);

الجزء الأول هو نفس أسطر نسخ الأوزان في درس تشغيل ICA. التحقق يطبع Same weights: 1، وفرقاً في خرائط الرأس قريباً من الصفر، و31 مكوّناً في D1.

جزء الـ ERP يستخدم pop_epoch، وستتعلّمها في المحطة 5. هنا يعرض الفرق فقط: في D1 المتوسط في Pz بين 300 و600 ملّي ثانية نحو 4.3 ميكروفولت في النسخة الرئيسية، ونحو 3.1 في نسخة 1 هرتز. أي أنك تخسر نحو 30% من P3 لو أكملت على نسخة ICA.

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

القيم المناسبة حسب هدف تحليلك
الإعدادالقيمةلماذا
high-pass لنسخة ICA1 هرتزالتوثيق الرسمي: جودة ICA أعلى بوضوح فوق 1 هرتز.
إذا بقيت المكوّنات غامضة2 هرتزالتوثيق الرسمي يذكر 2 هرتز أيضاً. ولا يكلّفك شيئاً، لأن الـ ERP يبقى على النسخة الرئيسية.
high-pass للنسخة الرئيسية0.1 هرتز بلا تغييريحفظ مكوّنات ERP البطيئة مثل P3 (درس الفلترة).
ماذا تنسخicaweights و icasphere و icachansindهذه الثلاثة تحدد التفكيك. أما icawinv و icaact فتُحسبان من جديد من البيانات الرئيسية.
القنوات في النسختيننفسها تماماً وبنفس الترتيبالأوزان مرتبطة بالقنوات.

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

4 فحوص سريعة
  1. في النافذة الرئيسية: والداتاست 1 هي الحالية، تظهر ICA weights بقيمة Yes.
  2. نفس الخرائط: خرائط مكوّنات الداتاست 1 والداتاست 2 متطابقة وبنفس الترتيب.
  3. تحقق السكربت: يطبع Same weights: 1 و ICA components: 31 في D1.
  4. الـ ERP سليم: المتوسط في Pz بين 300 و600 ملّي ثانية أكبر في النسخة الرئيسية منه في نسخة 1 هرتز، نحو 4.3 مقابل 3.1 ميكروفولت في D1.

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

5 أخطاء، وكيف تتجنّبها
  • إكمال الـ ERP على نسخة 1 هرتز. يصغر P3 كما يبيّن السكربت. نسخة ICA لحساب الأوزان فقط، والتحليل يكمل على النسخة الرئيسية.
  • نسخ خانتين فقط من الثلاث. التوثيق الرسمي يذكر icaweights و icasphere. انسخ icachansind أيضاً، وإلا لا يعرف EEGLAB أي القنوات تخصّها الأوزان. زر from other dataset ينسخ الثلاث.
  • قنوات مختلفة في النسختين. إذا حذفت قناة أو استوفيتها في نسخة واحدة فقط، لا تعود الأوزان مطابقة. أنهِ كل خطوات القنوات قبل أن تصنع النسخة.
  • نسخ icaact من نسخة ICA. هذه السلاسل الزمنية لبيانات 1 هرتز. اترك icawinv و icaact فارغتين، ودع eeg_checkset يحسبهما من النسخة الرئيسية.
  • اختيار رقم الداتاست بالتخمين. في from other dataset اكتب رقم نسخة ICA كما يظهر في قائمة Datasets. الرقم الخطأ ينسخ أوزاناً أخرى بلا أي رسالة خطأ.

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

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

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

Independent component analysis (extended Infomax; Lee et al., 1999) was computed with runica ([31] components after PCA reduction to the data rank) on a copy of the data high-pass filtered at 1 Hz, and the resulting weights were applied to the 0.1 Hz high-pass filtered data.

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

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

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

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

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