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

شروط كمية البيانات لـ ICA

مهم10 دقائققبل هذا الدرس: فكرة ICA ببساطةاطبع البطاقة
تبدأ من: eeglab_data.set (D1) · ما طُبّق عليه قبل هذا الدرس: فلترة high-pass و low-pass، إزالة ضوضاء الكهرباء (50 أو 60 هرتز)، القنوات السيئة، الاستيفاء (interpolation)، إعادة المرجع (re-referencing)تنزيل البيانات (يفتح في نافذة جديدة)
سكربت الوصول لهذه الحالة
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.filename = ''; EEG.filepath = ''; EEG.datfile = ''; EEG.saved = 'no';
[ALLEEG, EEG, CURRENTSET] = pop_newset(ALLEEG, EEG, 0, 'setname', 'D1 main', 'gui', 'off');
eeglab redraw;

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

ICAطريقة تفصل الإشارة المسجّلة إلى مصادر مستقلة، بعضها دماغي وبعضها آرتفاكت. يتعلّم مصفوفة فصل فيها وزن لكل زوج من قناةchannelالإشارة المسجّلة من قطب واحد، وهي ما يعرضه EEGLAB. ومكوّن. مع 32 قناة هذا 32 × 32 = 1024 وزناً. كل وزن يُتعلَّم من البيانات، فيحتاج ICA عدداً كافياً من نقاط البيانات ليتعلّمها كلها.

قبل وبعد

منحنى أقصر تسجيل يحتاجه ICA مقابل عدد المكوّنات عند k = 30 ومعدل 250 هرتز. المحور الأفقي عدد المكوّنات 32 و 64 و 128 و 256، والرأسي دقائق التسجيل. النقاط: 32 مكوّناً 2.0 دقيقة، و 64 مكوّناً 8.2 دقيقة، و 128 مكوّناً 32.8 دقيقة، و 256 مكوّناً 131.1 دقيقة. عند 256 ملاحظة متقطّعة: قد لا يكفي k = 30 هنا (الدليل الرسمي).

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

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

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

دليل EEGLAB الرسمي يعطي هذه القاعدة: لتجد N مكوّناً ثابتاً تحتاج عادة أكثر من k × N² نقطة بيانات في كل قناة. N² هو عدد الأوزانweights (ICA)المصفوفة التي تحوّل القنوات إلى مكوّنات ICA.، و k مضاعف: كم نقطة بيانات يأخذها كل وزن.

أهم أمرين:

  • عدد المكوّنات يكبر بالتربيع. مضاعفة القنوات من 32 إلى 64 تحتاج أربعة أضعاف البيانات، لا ضعفين.
  • k ليس رقماً ثابتاً. الدليل الرسمي يقول إن k يزيد كلما زاد عدد القنوات. مثاله 32 قناة ونحو 30 نقطة لكل وزن، ويقول إن 30 نقطة لكل وزن لا تبدو كافية حتى لـ 256 مكوّناً.

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

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

لا توجد قائمةmenuمجموعة أوامر تظهر عند الضغط على اسمها في أعلى النافذة. لهذا الفحص. تقرأ ثلاثة أرقام من نافذة EEGLAB الرئيسية وتحسب بنفسك. ابدأ والنسخة الرئيسية D1 main مفتوحة كما في “نقطة البداية”.

  1. اقرأ Channels per frame: 32 في D1.
  2. اقرأ Frames per epoch: 30504 في D1. في البيانات المستمرة هذا عدد نقاط البيانات في كل قناة. وفي البيانات المقطّعة اضربه في Epochs.
  3. اقرأ Sampling rate (Hz): 128 في D1.
  4. احسب عدد المكوّنات: رتبة البياناتrankعدد القنوات المستقلة فعلاً في البيانات، ويقل بعد الاستيفاء أو المرجع المتوسط.، كما في درس تشغيل ICA. في D1 هي 32 ناقص 0 مستوفاة ناقص 1 للمرجع المتوسط = 31.
  5. اقسم: 30504 / 31² = 30504 / 961 ≈ 31.7 نقطة لكل وزن. هذا قريب من مثال الدليل الرسمي، وهو تقريباً نفس داتاستdatasetملف بيانات EEG واحد محمّل في EEGLAB مع معلوماته. التوتوريال (30800 نقطة و32 قناة)، فبيانات D1 كافية لـ 31 مكوّناً.

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

نفس الخطوات في 12 أسطر MATLAB
MATLAB
% How much data ICA has in the current dataset
nComp   = EEG.nbchan - numel(badChans) - 1;   % expected rank after average reference
nPoints = EEG.pnts * EEG.trials;
fprintf('Data points per channel: %d\n', nPoints);
fprintf('Recording length: %.2f min\n', nPoints / EEG.srate / 60);
fprintf('Points per weight, %d channels: %.1f\n', EEG.nbchan, nPoints / EEG.nbchan^2);
fprintf('Points per weight, %d components: %.1f\n', nComp, nPoints / nComp^2);

% Shortest recording that gives k = 30 points per weight at this sampling rate
k = 30;
for N = [32 64 128 256]
    fprintf('%3d components: at least %.1f min\n', N, k * N^2 / EEG.srate / 60);
end

في D1 يطبع سكربتscriptملف أوامر MATLAB ينفّذ خطوات المعالجة بالترتيب. 30504 نقطة، و3.97 دقيقة، و29.8 نقطة لكل وزن مع 32 قناة، و31.7 مع 31 مكوّناً. ثم أقصر الأطوال عند 128 هرتز: 4.0 و16.0 و64.0 و256.0 دقيقة.

لاحظ أن D1 أقل بقليل من 4 دقائق، أي على حدthresholdقيمة إذا تجاوزتها الإشارة اعتُبرت مشكلة. تماماً لـ k = 30 مع 32 قناة. المرجع المتوسطaverage referenceمرجع يساوي متوسط كل قنوات الرأس. يخفّض المكوّنات إلى 31، فيرجعها فوق الحد.

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

القيم المناسبة حسب هدف تحليلك

الجدول يعطي أقصر تسجيل عند k = 30. اعتبره حداً أدنى، لأن k يجب أن يكبر مع عدد القنوات.

المكوّناتالأوزان (N²)نقاط البيانات (k = 30)دقائق عند 250 هرتزدقائق عند 128 هرتز
321024307202.04.0
6440961228808.216.0
1281638449152032.864.0
256655361966080131.1256.0

متى تخفّض الرتبة بـ 'pca'؟

الحالةماذا تفعللماذا
مرجع متوسط أو قنوات مستوفاةالمكوّنات = القنوات ناقص المستوفاة ناقص 1رتبة البيانات أقل، كما في درس تشغيل ICA.
التسجيل أقصر من حاجة كل المكوّناتخفّض العدد بـ 'pca'، مثلاً 'pca', 20مكوّنات أقل تحتاج نقاطاً أقل.
بيانات كافية ورتبة كاملةلا تخفّضالتوتوريال الرسمي: PCAطريقة تختصر البيانات إلى عدد أقل من الأبعاد. يفسد البيانات قليلاً، فالبيانات برتبتها الكاملة أفضل متى أمكن.

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

3 فحوص سريعة
  1. تعرف أرقامك: عدد القنوات، ونقاط البيانات في كل قناة، معدل العيّناتsampling rateعدد العيّنات المسجّلة في الثانية لكل قناة.، وعدد المكوّنات المتوقّع.
  2. النقاط لكل وزن: في D1 نحو 31.7 مع 31 مكوّناً.
  3. القرار مكتوب: بيانات كافية، أو عدد مكوّنات أقل بـ 'pca' مع سببه.

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

5 أخطاء، وكيف تتجنّبها
  • عدّ الدقائق ونسيان معدل عيّنةsampleقيمة واحدة للإشارة في لحظة زمنية واحدة.. القاعدة تعدّ نقاط البيانات. نفس الدقائق الأربع تعطي 30720 نقطة عند 128 هرتز، و60000 نقطة عند 250 هرتز.
  • مضاعفة البيانات لمضاعفة القنوات. الحاجة تكبر مع N²، فـ 64 قناة تحتاج أربعة أضعاف بيانات 32 قناة.
  • تشغيل ICA على كل epoch أو كل مقطع قصير وحده. الاستقلال يجب أن يظهر كاملاً في البيانات، وهذا يحتاج نقاطاً كثيرة، كما يشرح قسم الأسئلة الشائعة الرسمي. فكّك البيانات كلها معاً.
  • خلط جلسات من أيام مختلفة. الدليل الرسمي ينصح بتشغيل ICA على كل جلسة وحدها إذا سُجّلت في أيام مختلفة، لأن مواضع الأقطاب تختلف قليلاً.
  • التخفيض بـ 'pca' لتوفير الوقت فقط. PCA يفسد البيانات قليلاً. استخدمه لسبب: رتبة أقل، أو بيانات قليلة.

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

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

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

The ICA training data comprised [30504] samples per channel ([3.97] min at 128 Hz), giving [31.7] data points per unmixing weight for [31] components.

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

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

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

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

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