قراءة
وضع القصص

الـ frequency resolution والـ windowing (التنويف)

~15 دقيقة قراءة الدرس 3 من الوحدة 5

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].

الـ signal بعد الـ windowing
x_w[n] = x[n] \cdot w[n] \quad \Longleftrightarrow \quad X_w(e^{j\omega}) = \frac{1}{2\pi}\int_{-\pi}^{\pi} X(e^{j\theta})\,W(e^{j(\omega-\theta)})\,d\theta
الضرب في window w[n] في الـ time domain بيقابله convolution مع الـ frequency response بتاع الـ window W(ejω) في الـ frequency domain. وحتى النغمة الصافية بتتفرش على كذا frequency bin بسبب كده.

لأن الضرب في الـ 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 ديسيبل:

الـ DTFT بتاع الـ rectangular window (الـ Dirichlet kernel)
W_{\mathrm{rect}}(e^{j\omega}) = e^{-j\omega(N-1)/2}\,\frac{\sin(\omega N/2)}{\sin(\omega/2)}
عرض الـ main lobe 4π/N (راديان/sample) والـ side lobes عند −13 ديسيبل. والنزول البطيء للـ side lobes هو سبب الـ leakage الشديد في الـ rectangular window.
الـ coherent sampling — لما مفيش leakage

الـ 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 بتمثّل نقطة على منحنى المقايضة ده.

rectangular
أضيق main lobe
أحسن frequency resolution بس أعلى side lobes (−13 ديسيبل). بتتستخدم بس لما الـ signals متباعدة كويس والـ leakage مش مشكلة.
Hann
للاستخدام العام
side lobes عند −31.5 ديسيبل، وmain lobe أعرض مرتين من الـ rectangular. أشهر اختيار للـ spectral analysis العام — توازن كويس.
Hamming
متظبطة على أول side lobe
أول side lobe متكتوم لـ −43 ديسيبل (أحسن شوية من Hann)، مع إن الـ lobes البعيدة أعلى شوية. وعرض الـ main lobe زي Hann.
Blackman
أوطى side lobes
side lobes عند −58 ديسيبل بس الـ main lobe أعرض تلات مرات من الـ rectangular. بتتستخدم لما الـ dynamic range مهم جدًا.
الـ Hann window
w_{\mathrm{Hann}}[n] = 0.5\left(1 - \cos\!\left(\frac{2\pi n}{N-1}\right)\right), \quad 0 \le n \le N-1
الـ Hann window هي دالة raised cosine. بتوصل بنعومة للصفر عند الطرفين، فبتشيل الانقطاع اللي بيعمل الـ side lobes الشديدة في الـ rectangular window. وحد الـ cosine بيعيد توزيع الطاقة ناحية نص الـ 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 أعرض مرتين.

الـ frequency resolution الفعلية
\Delta f_{\mathrm{eff}} = \alpha \cdot \frac{f_s}{N}
معامل الـ window α معتمد على نوعها: α ≈ 1 للـ rectangular، α ≈ 2 لـ Hann/Hamming، α ≈ 3 لـ Blackman. وعشان تحسّن الـ resolution مع window ثابتة، لازم تجمع بيانات أكتر (تزوّد N أو تسجّل مدة أطول).

استراتيجيات عملية

لما تعمل spectral analysis عمليًا، اختيار الـ window وطول الـ DFT لازم يمشي حسب متطلبات التطبيق بتاعك:

الخطوة 1
اجمع بيانات أكتر
الطريقة الوحيدة اللي بتحسّن الـ frequency resolution بجد هي إنك تسجّل samples أكتر (window رصد أطول). والـ zero-padding (الحشو بالأصفار) مش هيفيد هنا.
الخطوة 2
اختار الـ window بتاعتك
اختار حسب التطبيق: rectangular للـ coherent sampling؛ Hann كاختيار افتراضي عام؛ Blackman عشان تلقط signals ضعيفة جنب القوية.
الخطوة 3
zero-padding للعرض
بعد الـ windowing، اعمل zero-padding لقوة من 2 عشان كفاءة الـ FFT. ده بيعمل interpolation للـ spectrum فبيحلّي الرسم — بس مبيضيفش معلومات طيفية.
الخطوة 4
عوّض الـ window gain
الـ windows بتصغّر الـ amplitude الظاهر للـ signal. طبّق الـ coherent gain correction (اقسم على Σ w[n]) عشان تقديرات الـ amplitude تفضل دقيقة بعد الـ windowing.

الدرس الجاي بيتكلّم عن الـ Fast Fourier Transform (FFT) — الخوارزمية اللي بـ O(N log N) واللي بتخلّي حساب الـ DFT عملي لـ N الكبيرة.

أهم النقط
  • أي تحليل 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 تفضل دقيقة.
اللي بعده الـ spectral leakage عمليًا نظرة عامة على الموديول اللي فات تعريف الـ DFT (تحويل فورييه المتقطع) وتفسيره