المحطة 6 · الدرس 2
الطيف الترددي PSD
eeglab_data.set (D1) · ما طُبّق عليه قبل هذا الدرس: فلترة high-pass و low-pass، إزالة ضوضاء الكهرباء (50 أو 60 هرتز)، القنوات السيئة، الاستيفاء (interpolation)، إعادة المرجع (re-referencing)، تشغيل ICA، فلتر 1 هرتز قبل ICA ونسخ الأوزان، ICLabel وحذف المكوّناتتنزيل البيانات (يفتح في نافذة جديدة)سكربت الوصول لهذه الحالة
% Shortcut: if you saved D1_main_clean.set in the ICLabel lesson, keep
% the first line and the last three lines, and replace every line between them with:
% EEG = pop_loadset('D1_main_clean.set', pwd);
[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);
% ICA on a 1-Hz copy, then copy the weights back
EEG_ica = pop_eegfiltnew(EEG, 'locutoff', 1);
EEG_ica = pop_runica(EEG_ica, 'icatype', 'runica', 'extended', 1);
EEG.icaweights = EEG_ica.icaweights;
EEG.icasphere = EEG_ica.icasphere;
EEG.icachansind = EEG_ica.icachansind;
EEG.icawinv = [];
EEG.icaact = [];
EEG = eeg_checkset(EEG);
% Remove components ICLabel rates above 90% Eye or Muscle
EEG = pop_iclabel(EEG, 'default');
EEG = pop_icflag(EEG, [NaN NaN; 0.9 1; 0.9 1; NaN NaN; NaN NaN; NaN NaN; NaN NaN]);
artifactComps = find(EEG.reject.gcompreject);
if ~isempty(artifactComps)
EEG = pop_subcomp(EEG, artifactComps, 0);
end
EEG.setname = 'D1 main clean';
EEG.filename = ''; EEG.filepath = ''; EEG.datfile = ''; EEG.saved = 'no';
[ALLEEG, EEG, CURRENTSET] = pop_newset(ALLEEG, EEG, 0, 'setname', 'D1 main clean', 'gui', 'off');
eeglab redraw;زر الرجوع في متصفحك يعيدك لنفس المكان الذي كنت فيه، فافتح ما تشاء بلا قلق.
الفكرة باختصار
الـ ERPمتوسط استجابة الدماغ لحدث معيّن عبر محاولات كثيرة. يجيب عن سؤال “ماذا يحدث بعد المثير؟”. أما الطيفspectrumتوزيع قوة الإشارة على الترددات. الترددي (الطيف الترددي (PSD)power spectral density (PSD)مقدار القدرة عند كل تردد في الإشارة.) فيجيب عن سؤال آخر: ما الترددات الموجودة في إشارةsignalقيم تتغيّر مع الزمن، مثل الجهد المسجّل في قناة.، وكم قدرة (القدرةpowerمربع السعة، ويقيس قوة الإشارة عند تردد معيّن.) كل ترددfrequencyعدد الدورات في الثانية، ويُقاس بالهرتز.؟
الطيف أداة تحليل أساسية، في دراسات الراحة والنوم مثلاً. وهو أيضاً أسرع فحص لجودة بياناتك: قمة ألفا واضحة تعني إشارة دماغية سليمة، وقمة ضيقة عند 50 أو 60 هرتز تعني ضوضاءnoiseأي جزء من التسجيل لا يحمل المعلومة التي نقيسها. كهرباء.
قبل وبعد

أسئلتك بعد هذا، كل جواب في قسمه:
لماذا أحتاج هذه الخطوة؟
السبب بالتفصيل، والمصطلحات التي تحتاجها
نحسبه هنا على البيانات المستمرة بعد حذف مكوّنات ICAطريقة تفصل الإشارة المسجّلة إلى مصادر مستقلة، بعضها دماغي وبعضها آرتفاكت. وقبل الـ low-passفلتر يمرّر الترددات المنخفضة ويُضعف العالية مثل نشاط العضلات. 30، حتى يظهر الطيف كاملاً إلى 64 هرتز.
لماذا أحتاج هذه الخطوة؟
نحسبه هنا على البيانات المستمرة بعد حذف مكوّنات ICA وقبل الـ low-pass 30، حتى يظهر الطيف كاملاً إلى 64 هرتز.
كيف أطبّقها في EEGLAB؟
8 خطوة من القوائم
ابدأ داتاستdatasetملف بيانات EEG واحد محمّل في EEGLAB مع معلوماته. D1 main clean مفتوحة، كما في “نقطة البداية”. هذه داتاست مستمرة، لا epochمقطع زمني قصير مقتطع حول حدث.. سكربتscriptملف أوامر MATLAB ينفّذ خطوات المعالجة بالترتيب. نقطة البداية يعيد ICA، فقد يأخذ بضع دقائق، إلا إذا استخدمت سطر الاختصار في أوله.
- افتح Plot ثم Channel spectra and maps.
- تظهر نافذة Channel spectra and maps — pop_spectopo(). اترك Epoch time range to analyze [min_ms max_ms]: على قيمته، أي كل التسجيل.
- اترك Percent data to sample (1 to 100): على
100. - في Frequencies to plot as scalp maps (Hz): اكتب
10مكان الافتراضي6 10 22. - في Plotting frequency range [lo_Hz hi_Hz]: اكتب
1 64مكان الافتراضي2 25. الافتراضي يخفي ضوضاء الكهرباء وكل ما فوق 25 هرتز. - اترك Spectral and scalp map options (see topoplot): كما هي، واضغط Ok.
- اقرأ الرسم بالترتيب:
- قمة ألفا: ارتفاع واضح قرب 10 هرتز. خريطة الرأس فوقها تبيّن أين هو أقوى.
- انحدار 1/f: القدرة تنخفض تدريجياً كلما زاد التردد. هذا شكل طبيعي لكل إشارة EEG.
- قمم أو انخفاضات ضيقة: قمة ضيقة عند 60 هرتز في بيانات غير منظفة تعني ضوضاء كهرباء. في بياناتنا ستجد العكس: انخفاضاً ضيقاً بين 58 و 62 هرتز، أثر فلتر الكهرباء.
- اضغط على أي خط لترى اسم قناته.
عن خريطة الرأس
خريطة الرأس في هذه النافذة يرسمها topoplot. خياراته وطريقة قراءته بالتفصيل في درس خرائط الرأس في المحطة 7.
عن خريطة الرأس
خريطة الرأس في هذه النافذة يرسمها topoplot. خياراته وطريقة قراءته بالتفصيل في درس خرائط الرأس في المحطة 7.
كيف أطبّقها في EEGLAB؟
ابدأ والداتاست D1 main clean مفتوحة، كما في “نقطة البداية”. هذه داتاست مستمرة، لا epochs. سكربت نقطة البداية يعيد ICA، فقد يأخذ بضع دقائق، إلا إذا استخدمت سطر الاختصار في أوله.
- افتح Plot ثم Channel spectra and maps.
- تظهر نافذة Channel spectra and maps — pop_spectopo(). اترك Epoch time range to analyze [min_ms max_ms]: على قيمته، أي كل التسجيل.
- اترك Percent data to sample (1 to 100): على
100. - في Frequencies to plot as scalp maps (Hz): اكتب
10مكان الافتراضي6 10 22. - في Plotting frequency range [lo_Hz hi_Hz]: اكتب
1 64مكان الافتراضي2 25. الافتراضي يخفي ضوضاء الكهرباء وكل ما فوق 25 هرتز. - اترك Spectral and scalp map options (see topoplot): كما هي، واضغط Ok.
- اقرأ الرسم بالترتيب:
- قمة ألفا: ارتفاع واضح قرب 10 هرتز. خريطة الرأس فوقها تبيّن أين هو أقوى.
- انحدار 1/f: القدرة تنخفض تدريجياً كلما زاد التردد. هذا شكل طبيعي لكل إشارة EEG.
- قمم أو انخفاضات ضيقة: قمة ضيقة عند 60 هرتز في بيانات غير منظفة تعني ضوضاء كهرباء. في بياناتنا ستجد العكس: انخفاضاً ضيقاً بين 58 و 62 هرتز، أثر فلتر الكهرباء.
- اضغط على أي خط لترى اسم قناته.
عن خريطة الرأس
خريطة الرأس في هذه النافذة يرسمها topoplot. خياراته وطريقة قراءته بالتفصيل في درس خرائط الرأس في المحطة 7.
عن خريطة الرأس
خريطة الرأس في هذه النافذة يرسمها topoplot. خياراته وطريقة قراءته بالتفصيل في درس خرائط الرأس في المحطة 7.
كيف أكتبها بالكود؟
نفس الخطوات في 15 أسطر MATLAB
% Spectra of all channels from 1 to 64 Hz, with a scalp map at 10 Hz
figure;
[spectra, freqs] = pop_spectopo(EEG, 1, [0 EEG.xmax*1000], 'EEG', ...
'freq', 10, 'freqrange', [1 64], 'electrodes', 'off');
% spectra: channels x frequencies, in 10*log10(uV^2/Hz)
fprintf('Frequency step: %.2f Hz\n', freqs(2) - freqs(1));
% Alpha peak at Pz between 8 and 13 Hz
pz = find(strcmp({EEG.chanlocs.labels}, 'Pz'));
alphaBand = freqs >= 8 & freqs <= 13;
alphaFreqs = freqs(alphaBand);
[peakPow, iPeak] = max(spectra(pz, alphaBand));
fprintf('Alpha peak at Pz: %.0f Hz, %.1f dB\n', alphaFreqs(iPeak), peakPow);
% Channels with the strongest 10 Hz power
[~, order] = sort(spectra(:, freqs == 10), 'descend');
disp({EEG.chanlocs(order(1:5)).labels});كيف أكتبها بالكود؟
% Spectra of all channels from 1 to 64 Hz, with a scalp map at 10 Hz
figure;
[spectra, freqs] = pop_spectopo(EEG, 1, [0 EEG.xmax*1000], 'EEG', ...
'freq', 10, 'freqrange', [1 64], 'electrodes', 'off');
% spectra: channels x frequencies, in 10*log10(uV^2/Hz)
fprintf('Frequency step: %.2f Hz\n', freqs(2) - freqs(1));
% Alpha peak at Pz between 8 and 13 Hz
pz = find(strcmp({EEG.chanlocs.labels}, 'Pz'));
alphaBand = freqs >= 8 & freqs <= 13;
alphaFreqs = freqs(alphaBand);
[peakPow, iPeak] = max(spectra(pz, alphaBand));
fprintf('Alpha peak at Pz: %.0f Hz, %.1f dB\n', alphaFreqs(iPeak), peakPow);
% Channels with the strongest 10 Hz power
[~, order] = sort(spectra(:, freqs == 10), 'descend');
disp({EEG.chanlocs(order(1:5)).labels});أي قيمة أختار؟
القيم المناسبة حسب هدف تحليلك
| الإعداد | القيمة | لماذا |
|---|---|---|
| نطاق الرسم | من 1 إلى 64 هرتز هنا (حتى نصف معدل العيّنات) | الافتراضي من 2 إلى 25 يخفي ضوضاء الكهرباء ونشاط العضلات. لفحص الجودة، ارسم النطاق كاملاً. |
| ترددات خرائط الرأس | 10 هرتز لألفا | يمكن إضافة غيرها، مثل 6 لثيتا و 20 لبيتا، حسب سؤالك. |
| نسبة البيانات | 100 | النسب الأقل أسرع، لكنها في البيانات المستمرة تأخذ أول جزء من التسجيل فقط. D1 صغيرة، فلا داعي. |
| طول النافذة | الافتراضي (ثانية واحدة، 128 نقطة) | يعطي دقة ترددية 1 هرتز، وهي كافية لرؤية قمة ألفا. |
| أي بيانات | مستمرة نظيفة قبل الـ low-pass | الـ low-pass 30 يمحو كل ما فوق 30 هرتز، فلا ترى الطيف كاملاً. |
أي قيمة أختار؟
| الإعداد | القيمة | لماذا |
|---|---|---|
| نطاق الرسم | من 1 إلى 64 هرتز هنا (حتى نصف معدل العيّنات) | الافتراضي من 2 إلى 25 يخفي ضوضاء الكهرباء ونشاط العضلات. لفحص الجودة، ارسم النطاق كاملاً. |
| ترددات خرائط الرأس | 10 هرتز لألفا | يمكن إضافة غيرها، مثل 6 لثيتا و 20 لبيتا، حسب سؤالك. |
| نسبة البيانات | 100 | النسب الأقل أسرع، لكنها في البيانات المستمرة تأخذ أول جزء من التسجيل فقط. D1 صغيرة، فلا داعي. |
| طول النافذة | الافتراضي (ثانية واحدة، 128 نقطة) | يعطي دقة ترددية 1 هرتز، وهي كافية لرؤية قمة ألفا. |
| أي بيانات | مستمرة نظيفة قبل الـ low-pass | الـ low-pass 30 يمحو كل ما فوق 30 هرتز، فلا ترى الطيف كاملاً. |
كيف أتأكد أنها نجحت؟
4 فحوص سريعة
freqs(2) - freqs(1)يساوي 1 هرتز، وsize(spectra)يعطي 32 قناة في عدد الترددات.- قمة ألفا عند Pz بين 9 و 11 هرتز تقريباً.
- خريطة 10 هرتز أقوى في القنوات الخلفية، مثل POz وPz.
- عند 58 إلى 62 هرتز انخفاض ضيق لا قمة.
كيف أتأكد أنها نجحت؟
freqs(2) - freqs(1)يساوي 1 هرتز، وsize(spectra)يعطي 32 قناة في عدد الترددات.- قمة ألفا عند Pz بين 9 و 11 هرتز تقريباً.
- خريطة 10 هرتز أقوى في القنوات الخلفية، مثل POz وPz.
- عند 58 إلى 62 هرتز انخفاض ضيق لا قمة.
ما الأخطاء التي يقع فيها كثيرون؟
5 أخطاء، وكيف تتجنّبها
- الحكم على البيانات من نطاق الرسم الافتراضي. من 2 إلى 25 هرتز لا ترى 50 أو 60 هرتز أصلاً. غيّر النطاق.
- قراءة الانحدار كمشكلة. القدرة تنخفض طبيعياً مع التردد (انحدار 1/f). المشكلة هي القمة الضيقة غير المتوقعة، أو قناة واحدة طيفها بعيد عن الباقي.
- نسيان أن المحور الرأسي لوغاريتمي. فرق 10 dB يعني أن القدرة أكبر 10 مرات، لا 10 ميكروفولت.
- حساب الطيف على epochs قصيرة جداً. كل epoch أقصر من نافذة الحساب يقلّل الدقة. للطيف العام، البيانات المستمرة أفضل.
- افتراض تردد الكهرباء. 60 هرتز في السعودية وأمريكا، و 50 هرتز في أوروبا وأغلب الدول العربية الأخرى. انظر للطيف قبل أن تفترض.
ما الأخطاء التي يقع فيها كثيرون؟
- الحكم على البيانات من نطاق الرسم الافتراضي. من 2 إلى 25 هرتز لا ترى 50 أو 60 هرتز أصلاً. غيّر النطاق.
- قراءة الانحدار كمشكلة. القدرة تنخفض طبيعياً مع التردد (انحدار 1/f). المشكلة هي القمة الضيقة غير المتوقعة، أو قناة واحدة طيفها بعيد عن الباقي.
- نسيان أن المحور الرأسي لوغاريتمي. فرق 10 dB يعني أن القدرة أكبر 10 مرات، لا 10 ميكروفولت.
- حساب الطيف على epochs قصيرة جداً. كل epoch أقصر من نافذة الحساب يقلّل الدقة. للطيف العام، البيانات المستمرة أفضل.
- افتراض تردد الكهرباء. 60 هرتز في السعودية وأمريكا، و 50 هرتز في أوروبا وأغلب الدول العربية الأخرى. انظر للطيف قبل أن تفترض.
متصفحك لا يسمح بحفظ التقدّم. كل الدروس متاحة، لكن علامات الإكمال لن تُحفظ.
تم. حُفظ تقدّمك في هذا المتصفح.تراجعكيف أكتبها في ورقتي؟
قالب Methods: عدّل البيانات والإعدادات والإصدارات لتطابق ما نفّذته
قالب: عدّل البيانات والإعدادات والإصدارات لتطابق ما نفّذته.
Power spectral density was estimated for each channel from the continuous ICA-cleaned data using Welch’s method with 1-s Hamming windows and no overlap (pop_spectopo, EEGLAB 2026.1).كيف أكتبها في ورقتي؟
قالب: عدّل البيانات والإعدادات والإصدارات لتطابق ما نفّذته.
Power spectral density was estimated for each channel from the continuous ICA-cleaned data using Welch’s method with 1-s Hamming windows and no overlap (pop_spectopo, EEGLAB 2026.1).أين أقرأ أكثر؟
3 مراجع: التوثيق الرسمي أولاً
- EEGLAB Tutorialتوثيق8. Plot data > c. Channel spectra and maps
- EEGLAB TutorialتوثيقConcepts guide: time-frequency
- Time-Frequency Analysis of EEG Time Series Part 2: EEG Spectrum and ERSPفيديوالفيديو كاملاً · 9:05
مكتوب لـ EEGLAB 2026.1 · 2026-10-28
للتوسّع
- EEGLAB Tutorial: https://eeglab.org/tutorials/08_Plot_data/Plotting_Channel_Spectra_and_Maps.html (8. Plot data > c. Channel spectra and maps)
- EEGLAB Tutorial: https://eeglab.org/tutorials/ConceptsGuide/Time_frequency_tutorial.html (Concepts guide: time-frequency)
- Time-Frequency Analysis of EEG Time Series Part 2: EEG Spectrum and ERSP: https://www.youtube.com/watch?v=BcOuRxeZTtA (الفيديو كاملاً)
تحتاج مساعدة؟
اسأل، أو شاركنا رأيك، أو بلّغ عن خطأ
- بلّغ عن خطأ علمي · يحتاج حساباً على GitHub. لا تملك حساباً؟ استخدم "شاركنا رأيك".