الـ periodogram (الدورية) — مراجعة
في الدرس اللي فات، اتعرّفنا على الـ periodogram على إنه أبسط estimator للـ power spectral density (كثافة الطيف الطاقي) أو PSD. بيحسب مربّع magnitude الـ DFT لـ N sample x[0], x[1], …, x[N−1]، مقسوم على N:
الـ periodogram جذّاب في بساطته، بس عنده مشكلة إحصائية أساسية: الـ variance بتاعه مبيقلّش لما طول البيانات N يزيد. في الحقيقة، الـ variance لكل تقدير طيفي بيساوي تقريبًا مربّع قيمة الـ PSD الحقيقية — يعني غلطة نسبية حوالي ~100٪ عند كل frequency. ومهما جمعت بيانات، الـ periodogram بيفضل estimator متلخبط.
عشان تفهم السبب: إنك تجمع بيانات أكتر في DFT واحد بيدّيك frequency resolution أحسن (Δf = f_s/N أصغر)، بس كل frequency bin بيفضل متمثّل بـ sample مركّبة واحدة. "حجم العيّنة" لكل bin عمره ما بيزيد — دايمًا بتحسب قياس واحد متلخبط لكل frequency.
الـ bias والـ variance في الـ periodogram
أي estimator إحصائي بيتوصف بخاصيتين: الـ bias (التحيّز) (الغلط المنهجي) والـ variance (التباين) (التذبذب العشوائي). بالنسبة للـ periodogram:
| الخاصية | السلوك | الأثر |
|---|---|---|
| الـ bias | بيقل لما N → ∞ | asymptotically unbiased — بيقرّب من الـ PSD الحقيقية |
| الـ variance | ≈ [S(ω)]² — ثابت! | مبيقلّش لما البيانات تزيد |
| الـ consistency | inconsistent | عمره ما بيتقارب للقيمة الحقيقية |
فالـ periodogram estimator inconsistent (غير متسق) — يعني estimator مبيتقاربش للقيمة الحقيقية لما حجم العيّنة يزيد. ودي قيد أساسي. وعشان تاخد تقديرات PSD تعتمد عليها، محتاجين طرق بتقلّل الـ variance بإنها تاخد متوسط تقديرات طيفية مستقلة كتير.
كل DFT bin هو X[k] محتاج مساهمات من كل الـ N sample — فهو مش "sample واحدة" بالمعنى البديهي. بس رياضيًا، كل |X[k]|² ماشي على توزيع chi-squared متكبّر بدرجتين حرية، بغض النظر عن N. وإنك تاخد متوسط متغيّرات chi-squared بيقلّل الـ variance — وده بالظبط اللي طريقتين Bartlett وWelch بيعملوه.
Var[الـ periodogram] ≈ S²(ω) — مستقل عن Nطريقة Bartlett — متوسط الـ segments المش متداخلة
مفتاح تقليل variance الـ periodogram هو الـ averaging (التوسيط). لو قدرت تحسب الـ periodogram بشكل مستقل على K سجل بيانات مختلفين وتاخد متوسط النتايج، الـ variance هيقل بمعامل K. وطريقة Bartlett (1948) بتحقق ده من سجل بيانات واحد طويل بإنها بتقسمه لـ segments مش متداخلة.
لو معاك N sample في الإجمالي وطول segment M، طريقة Bartlett بتعمل K = ⌊N/M⌋ segment مش متداخل. والـ periodogram بيتحسب لكل segment، وبعدين بناخد متوسط الـ K periodogram:
طريقة Bartlett بتكشف المقايضة الأساسية بين الـ variance والـ resolution في تقدير الـ PSD. segments أقصر ← segments أكتر ← variance أقل، بس frequency resolution أضعف. segments أطول ← segments أقل ← resolution أحسن، بس variance أعلى. ومتقدرش تاخد الاتنين مع بعض بكمية بيانات ثابتة.
طريقة Welch — segments متداخلة مع windows
بيتر Welch (1967) طوّر طريقة Bartlett بإضافتين أساسيتين: الـ segments المتداخلة والـ window functions. والـ overlap بيخلّيك تحسب periodograms أكتر من نفس البيانات، فبيزوّد K وبيقلّل الـ variance من غير ما تضيّع بيانات عند حواف الـ segments.
الـ window function اللي بتتطبّق على كل segment بتقلّل الـ spectral leakage — تسرّب الطاقة من مكوّن frequency قوي للـ bins اللي جنبه. من غير windowing (يعني rectangular window)، الحواف الحادة عند طرفين الـ segment بتطلّع side lobes ضخمة في الـ frequency domain. وإنك تطبّق window ناعمة (Hann، Hamming، Blackman) بينعّم الحواف وبيقلّص الـ leakage جامد.
Bartlett قصاد Welch — الفروق الأساسية
- segments متداخلة (عادةً 50٪)
- تطبيق window function ناعمة
- segments أكتر لنفس طول البيانات
- تقليل أكبر للـ variance
- تقليل الـ spectral leakage
- المعيار في الصناعة (pwelch، scipy)
اختيار parameters الـ Welch عمليًا
تلات parameters بيتحكّموا في سلوك الـ Welch estimator. وإنك تختارهم صح حكم هندسي معتمد على التطبيق:
| الـ parameter | أثره على الـ resolution | أثره على الـ variance | القيمة المنتشرة |
|---|---|---|---|
| طول الـ segment M | ↑M → Δf = f_s/M أدق | ↑M → segments أقل → variance أعلى | 256–2048 sample |
| نسبة الـ overlap | مالوش أثر على الـ resolution | ↑overlap → segments أكتر → variance أقل | 50٪ (Hann) أو 75٪ |
| نوع الـ window | main lobe أعرض = resolution أضعف | side lobes أوطى = leakage أقل | Hann (للأغراض العامة) |
مع Hann window وoverlap 50٪، الـ segments اللي ورا بعض بتشترك في نص بياناتها. والنسبة دي مثالية لأن الـ Hann window بتوصل لصفر عند الحواف — الـ samples اللي قريبة من طرفين الـ segment وزنها بيقل، والـ overlap بيخلّيها تساهم بالكامل في الـ segment اللي جنبها. وزيادة الـ overlap فوق 50–75٪ بتدّي مكاسب بتقل لأن الـ segments اللي ورا بعض بتبقى correlated جامد.
Hann window + overlap 50٪ = أشهر إعداد لطريقة Welchالتنفيذ — pwelch وscipy
طريقة Welch هي الأداة الافتراضية لتقدير الـ PSD في MATLAB (pwelch) وPython (scipy.signal.welch). والدالتين بينفّذوا نفس الخوارزمية بس شوية إعدادات افتراضية بتختلف:
| الـ parameter | MATLAB pwelch | scipy.signal.welch |
|---|---|---|
| الـ window الافتراضية | Hamming | Hann |
| طول الـ segment الافتراضي | ⌊N/8⌋ | 256 |
| الـ overlap الافتراضي | 50% | 50% |
| اصطلاح الخرج | أحادي الجانب افتراضيًا | أحادي الجانب افتراضيًا |
| التطبيع | قدرة لكل هرتز (كثافة) | قدرة لكل هرتز (كثافة) |
تفصيلة مهمة: الدالتين بيطلّعوا PSD أحادية الجانب افتراضيًا بوحدات قدرة/هرتز (واسمها كمان spectral density). وعشان تحسب القدرة الكلية في نطاق frequency معيّن، كامل الـ PSD على النطاق ده: P_band = ∫ S(f) df ≈ Σ S[k] · Δf.
لما تقارن رسومات PSD من مصادر مختلفة، اتأكد دايمًا من: (1) أحادي ولا ثنائي الجانب، (2) مقياس خطي ولا ديسيبل، (3) قدرة/هرتز ولا قدرة/sample (متطبّعة). فرق الـ 3 dB غالبًا سببه الخلط بين الاصطلاحين؛ واختلاف محور الـ frequency بيشاور على خلط بين الـ frequency المتطبّعة والفيزيائية.
اتأكد دايمًا: أحادي ولا ثنائي الجانب؟ قدرة/هرتز ولا قدرة/sample؟- الـ periodogram (|DFT|²/N) asymptotically unbiased بس الـ variance بتاعه ثابت ≈ S²(ω) — وهو estimator inconsistent.
- طريقة Bartlett بتقسم البيانات لـ K segment مش متداخلين وبتاخد متوسط الـ periodograms بتاعتهم، فبتقلّل الـ variance بمعامل K قصاد إن الـ frequency resolution بتقل.
- طريقة Welch بتضيف تحسينين: segments متداخلة (segments أكتر ← variance أقل) وwindow functions (بتقلّل الـ spectral leakage).
- التلات parameters بتوع Welch — طول الـ segment M، ونسبة الـ overlap، ونوع الـ window — بيوازنوا بين الـ frequency resolution وتقليل الـ variance.
- الـ Hann window مع overlap 50٪ هي أشهر إعداد؛ وهي الافتراضية في pwelch وscipy.signal.welch.
- خرج الـ Welch أحادي الجانب افتراضيًا؛ كامل على نطاق عشان تحسب قدرة النطاق.
- مفيش حاجة ببلاش: البيانات الثابتة بتحدّد حاصل ضرب الـ resolution × الـ variance.