window الرصد المحدودة
في الواقع العملي، عمرنا ما بنرصد signal لانهائية. بنسجّل N sample بالظبط وبعدين نقف. ورياضيًا، ده زي إنك تضرب الـ signal اللانهائية x[n] في rectangular window (نافذة مستطيلة) wrect[n] قيمتها 1 لـ n = 0, 1, …, N−1 وصفر في أي حتة تانية. والـ DFT بعد كده بيحلّل الـ signal المتعمل لها windowing xw[n] = x[n] · wrect[n] مش الـ signal الأصلية x[n].
لأن الضرب في الـ time domain بيقابله convolution في الـ frequency domain، فالـ DFT بتاع xw[n] هو convolution بين الـ spectrum الحقيقي X(ejω) وspectrum الـ window W(ejω). وفي الـ rectangular window، Wrect(ejω) عنده main lobe كبير وside lobes كتير — وده السبب الجذري للـ spectral leakage.
الـ spectral leakage
الـ spectral leakage (التسرب الطيفي) بيحصل لما طاقة نغمة عند frequency معيّنة تتسرّب للـ DFT bins اللي جنبها. وده بيحصل كل ما frequency النغمة متكونش واقعة بالظبط على bin. والـ frequency response بتاع الـ rectangular window (الـ Dirichlet kernel) شبه دالة sinc والـ side lobes بتوعه بتنزل بالراحة لحد −13 ديسيبل:
الـ coherent sampling (التأخذ المترابط) معناه إن frequency الـ signal بتساوي مضاعف صحيح للـ frequency resolution Δf = fs/N. وفي الحالة دي، النغمة بتكمّل عدد صحيح من الدورات جوه الـ frame اللي فيه N sample، فالـ rectangular window مبتعملش أي leakage — كل الطاقة بتتركّز في DFT bin واحد.
مفيش leakage لما fالإشارة = k · fs / N لعدد صحيح kالـ window functions
الـ window functions هي أشكال تدرّج بديلة بتتطبّق على x[n] قبل حساب الـ DFT. وعلى عكس القطع المفاجئ بتاع الـ rectangular window، الـ windows المتصمّمة كويس بتنزل بنعومة للصفر عند الطرفين. والنزول ده بيقايض main lobe أعرض (frequency resolution أقل) قصاد side lobes أوطى بكتير (leakage أقل). وكل window بتمثّل نقطة على منحنى المقايضة ده.
المقايضة بين الـ resolution والـ leakage
فيه شد أساسي في الـ spectral analysis: الـ frequency resolution (إنك تقدر تفرّق بين نغمتين قريبين) وكتم الـ leakage (إنك تقدر تلقط نغمة ضعيفة جنب نغمة قوية) مينفعش الاتنين يبقوا في أحسن حالاتهم في نفس الوقت. وكل window function واقفة على نقطة على منحنى المقايضة ده:
كتم أحسن للـ side lobes ← leakage أقل بس main lobe أعرض ← أصعب تفرّق بين نغمتين قريبين.
main lobe أضيق ← resolution أحسن بس side lobes أعلى ← النغمات الضعيفة اللي جنبها ممكن تستخبى تحت الـ leakage من النغمات القوية.
الـ Kaiser window (بالمعامل β) بتخلّيك تظبط المقايضة دي باستمرار: β أعلى بيزوّد كتم الـ side lobes على حساب main lobe أعرض.
الـ frequency resolution الحقيقية — أقل فرق Δf بين نغمتين ممكن تفرّقهم — معتمدة على شكل الـ window وعدد الـ samples N الاتنين. في الـ rectangular window، تقدر تفرّق بين نغمتين لو الفرق بينهم عدّى bin واحد (Δf = fs/N). أما في الـ Hann window، فالـ resolution الفعلية تقريبًا 2·Δf لأن الـ main lobe أعرض مرتين.
استراتيجيات عملية
لما تعمل spectral analysis عمليًا، اختيار الـ window وطول الـ DFT لازم يمشي حسب متطلبات التطبيق بتاعك:
- أي تحليل DFT بيضرب الـ signal من غير ما يقول في window — الـ rectangular window افتراضيًا. والقطع ده هو اللي بيعمل الـ spectral leakage.
- الـ leakage بيحصل لأن الضرب في الـ time domain بيقابله convolution في الـ frequency domain مع spectrum الـ window (الـ Dirichlet kernel للـ rectangular window).
- الـ coherent sampling (frequency الـ signal = مضاعف صحيح لـ Δf) بيلغي الـ leakage خالص؛ غير كده الطاقة بتتفرش في الـ bins اللي جنبها.
- الـ window functions (Hann، Hamming، Blackman، Kaiser) بتقايض main lobe أعرض قصاد side lobes أوطى، فبتقلّل الـ leakage على حساب الـ frequency resolution.
- الـ resolution الفعلية مع window مش rectangular هي α·Δf حيث α ≥ 1 هو معامل التوسيع للـ window (≈2 لـ Hann، ≈3 لـ Blackman).
- عشان تحسّن الـ resolution الحقيقية، اجمع samples أكتر؛ والـ zero-padding بيعمل interpolation للرسم الطيفي بس.
- طبّق معامل تصحيح الـ window gain بعد الـ windowing عشان قياسات الـ amplitude تفضل دقيقة.