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

الـ spectral leakage عمليًا

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

مشكلة القياس

نظريًا، الـ DFT بتاع sinusoid صافية هو bin (خانة) واحد مش صفر. عمليًا نادرًا ما بيبقى كده: طاقة النغمة الواحدة بتتفرش على bins كتير جنبها، وده اللي اسمه الـ spectral leakage (التسرّب الطيفي). الدرس اللي فات رجّع الـ leakage لسببه — window الرصد المحدودة بتضرب الـ signal في بوابة مستطيلة، والضرب في الزمن هو convolution في الـ frequency، فكل خط طيفي حقيقي بيتبدّل بنسخة متزحزحة من spectrum الـ window نفسها. والدرس ده عن اللي ده بيعمله في القياس: إزاي الـ leakage بيبوّظ الـ amplitude اللي بتقراه من bin، وإزاي تخلّيه يختفي لما تقدر، وإزاي تحدّه لما متقدرش.

والرهان عملي. اللي بيقرا spectrum analyzer محتاج يعرف هل القمة عند −40 dB عشان النغمة ضعيفة فعلًا، ولا عشان leakage من جار قوي علّى أرضية الـ noise، ولا عشان النغمة وقعت بين binين فاتقاست أقل بحوالي 4 dB. التلاتة كلهم ظواهر leakage، ولكل واحدة علاج مختلف.

الـ coherent sampling: إمتى الـ leakage بيختفي

فيه حالة واحدة الـ rectangular window فيها مبتعملش أي leakage. spectrum الـ window — الـ Dirichlet kernel (periodic sinc) — ليه أصفار عند كل bin ما عدا اللي متمركز عليه. فلو frequency النغمة وقعت بالظبط على bin من bins الـ DFT، كل bin تاني بيقعد على صفر من الأصفار دي والنغمة بتظهر خط واحد نضيف. والتوافق ده اسمه الـ coherent sampling (أخذ العيّنات المتوافق)، وبيحصل بالظبط لما الـ frequency تبقى عدد صحيح من الدورات الكاملة على window الرصد:

ورق حيطة بخطوط متموجة، موجاته بتتكسر وتنط مكان ما شريطين بيتقابلوا عند وصلة.
الـ DFT بيكرّر نافذة الرصد طرف في طرف. النطّة عند الوصلة بتسرّب الطاقة على الـ bins، إنما عدد صحيح من الدورات مش بيسيب وصلة.
شرط الـ coherent sampling
f_0 = k\,\frac{f_s}{N}, \quad k \in \{0, 1, \dots, N-1\}
النغمة عند f₀ بتقع على الـ bin k بالظبط — ومبتتسرّبش لأي bin تاني — لما f₀ تبقى مضاعف صحيح للـ bin spacing f_s/N، يعني لما السجل اللي فيه N sample يساع عدد صحيح من الدورات الكاملة.

الـ coherent sampling هو السبب إن معامل معايرة الأجهزة بتربط الـ signal generator والـ digitizer بمرجع زمني واحد وبتختار N بحيث نغمة الاختبار تقع على bin: كده الـ leakage بيتشال من المصدر بدل ما يتصلّح بعدين. بس ده مبينفعش غير لما تكون متحكّم في الـ signal. أما نغمة جاية من العالم الخارجي — carrier، أو اهتزاز، أو نبضة قلب — فغالبًا هتقع بين الـ bins، وساعتها الـ leakage بيبقى حتمي ولازم يتدار بـ window.

الـ scalloping loss: تأثير سور الأوتاد

الـ DFT مبيبلّغش عن الـ spectrum غير عند مراكز الـ bins بتاعته — يعني بياخد samples من الـ spectrum المستمر اللي تحت عند N نقطة منفصلة، زي ما تكون بتبص على منظر من ورا سور أوتاد. والنغمة اللي بتقع بين binين بتتقاس على جنب الـ main lobe بتاع الـ window مش على قمّته، فالـ amplitude بتاعها بيتقري أوطى. وأوحش حالة نغمة واقعة في نص المسافة بين binين بالظبط.

في الـ rectangular window النقص ده في أوحش الحالات بيوصل لـ 3.92 dB — يعني الـ amplitude بيتقري عند 64% بس من قيمته الحقيقية — وده غلط كبير كفاية إنه يفرق في أي قياس amplitude. والنقص الحتمي ده اللي بيعتمد على الـ frequency هو الـ scalloping loss (خسارة التموّج) (واسمه كمان picket-fence loss). وهو مش noise، ده bias تقدر تتوقّعه من مكان النغمة بالنسبة للـ bins. والـ windows اللي الـ main lobe بتاعها أعرض وأكتر استواء بتتموّج أقل: الـ Hann window بتنزّل أوحش حالة لـ 1.42 dB، وwindows الـ flat-top متصمّمة مخصوص عشان تخلّيها تحت 0.1 dB — وعشان كده هي الاختيار الافتراضي للقياس الدقيق للـ amplitude مع إن الـ main lobe العريض بتاعها بيبوّظ الـ frequency resolution.

الـ processing gain والـ equivalent noise bandwidth

الـ leakage بيحكم كمان إزاي الـ DFT المتعمل بـ window بيقيس الـ noise والقدرة، وده الكوبري للـ power spectral density في الوحدة 9، الدرس 1. الـ window هي filter، وكل bin في الـ DFT مبيعدّيش الـ frequency بتاعته بس، لأ بيعدّي شريحة noise حواليه شكلها بيحدّده الـ main lobe والـ side lobes. وعرض الـ rectangular filter المثالي اللي بيعدّي نفس القدر من قدرة الـ noise هو الـ equivalent noise bandwidth (عرض النطاق الضوضائي المكافئ) أو ENBW:

الـ equivalent noise bandwidth
\text{ENBW} = N\,\frac{\sum_{n=0}^{N-1} w[n]^2}{\left(\sum_{n=0}^{N-1} w[n]\right)^2}
الـ ENBW، بوحدات DFT bins، معتمد على معاملات الـ window w[n] بس. الـ rectangular window الـ ENBW بتاعها = bin واحد (وده أضيق حاجة ممكنة)؛ وكل window متدرّجة أعرض منها.

وده اللي بيخلّيك تحوّل magnitude spectrum متعمل بـ window لـ power spectral density (كثافة طيف استطاعية) متعايرة بوحدة الواط لكل هرتز — الوحدة اللي الوحدة 9 بتستخدمها من غير ما تطلّعها. مربّع magnitude خط واحد قدرة؛ ولما تقسمه على الـ sampling rate وطاقة الـ window بيتحوّل لـ كثافة:

الـ spectral density من DFT متعمل بـ window
\hat{S}_{xx}(f_k) = \frac{2\,\lvert X_w[k]\rvert^2}{f_s \sum_{n=0}^{N-1} w[n]^2}
الـ modified periodogram: |X_w[k]|² مقسوم على f_s وطاقة الـ window Σw[n]² بيدّي الـ one-sided spectral density بوحدة قدرة لكل هرتز (للـ bins اللي جوّه). ومن غير حد Σw[n]² التقدير بيبقى فيه bias حسب الـ window اللي اخترتها.

ونفس الـ ENBW اللي بيعاير أرضية الـ noise هو السبب إن الـ window اللي الـ leakage فيها قليل بتكلّفك حساسية للنغمات الضعيفة: إنك تفرش noise bin على عرض binين بيعلّي أرضية الـ noise بمقدار 10 log₁₀(2) ≈ 3 dB بالنسبة للـ rectangular window. فاختيار الـ window دايمًا مقايضة تلاتية بين الـ frequency resolution، ودقة الـ amplitude، والقدرة إنك تشوف signal صغيرة جنب كبيرة.

اختيار الـ window

المرجع الكلاسيكي هو مسح فريدريك هاريس سنة 1978، اللي بيجدول المقاييس دي لعشرات الـ windows. والخمسة اللي تحت بيغطّوا المدى المفيد من «من غير window» لـ «كتم side lobes متطرّف»:

مقاييس أداء الـ windows (هاريس، 1978)
الـ windowالـ main lobe −3 dB (bins)أعلى side lobe (dB)الـ scalloping loss (dB)ENBW (bins)
rectangular0.89−133.921.00
Hann1.44−321.421.50
Hamming1.30−431.751.36
Blackman1.68−581.101.73
Blackman-Harris (أربع حدود)1.90−920.832.00

اقرا الجدول كمقايضة واحدة بتمسحها من فوق لتحت: كل ما الـ window تتدرّج أكتر، أعلى side lobe بينزل (من −13 dB لـ −92 dB، فالنغمة الضعيفة بتبان جنب القوية) والـ scalloping loss بيقل — بس الـ main lobe بيوسع والـ ENBW بيكبر، فالـ frequency resolution والحساسية للـ noise بيوحشوا. وصف Blackman-Harris هو الطرف اللي الـ leakage فيه قليل: الـ side lobes بتوعه عند −92 dB تقدر تكشف نغمة أقل من جارتها بـ 90 dB، بتمن main lobe أعرض من ضعف الـ rectangular.

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

لو متحكّم في المصدر
اعمل coherent sampling
اربط الـ generator والـ digitizer بمرجع زمني واحد واختار N بحيث النغمة تقع على bin. الـ leakage بيختفي من غير ما تدفع تمن window — طريقة معمل المعايرة.
عشان دقة الـ amplitude
استخدم flat-top window
scalloping loss تحت 0.1 dB مهما النغمة وقعت فين. الـ main lobe بتاعها عريض فوحشة في التفريق بين النغمات القريبة — بس هي الاختيار الصح لما المستوى لازم يبقى دقيق.
نغمة ضعيفة جنب قوية
استخدم side lobes واطية
Blackman-Harris، أو Kaiser window بـ β عالية. side lobes عند −90 dB بتمنع carrier قوي إنه يدفن جاره الضعيف، وبتقايض الـ frequency resolution بالـ dynamic range.
للمستويات المطلقة
صلّح أثر الـ window
اقسم على الـ coherent gain بتاع الـ window (Σw[n]) وعلى الـ ENBW قبل ما تقول قدرة أو كثافة — وإلا القراية هيبقى فيها bias من الـ window اللي بالصدفة اخترتها.

كل ده افترض إن حساب الـ DFT نفسه سهل. والوحدة 6 بتشيل الافتراض ده: الـ Fast Fourier Transform بينزّل تكلفة الـ DFT من O(N²) لـ O(N log N)، وده اللي بيخلّي الـ spectral analysis في الـ real time — وكل اللي في الدرس ده — عملي.

أهم النقط
  • الـ spectral leakage بصمة الـ window المحدودة: الخط الحقيقي بيتبدّل بنسخة من spectrum الـ window، فطاقة نغمة واحدة بتتفرش على bins كتير.
  • الـ coherent sampling — نغمة عند f₀ = k·f_s/N بالظبط — بيطلّع leakage صفر، لأن كل bin تاني بيقع على صفر من spectrum الـ window. ومبينفعش غير لما تكون متحكّم في الـ signal.
  • الـ scalloping loss نقص متوقّع في الـ amplitude للنغمات اللي واقعة بين الـ bins: 3.92 dB في أوحش حالات الـ rectangular، و1.42 dB لـ Hann، وتحت 0.1 dB للـ flat-top.
  • الـ equivalent noise bandwidth (ENBW = N·Σw²/(Σw)²) هو عرض الـ rectangular filter اللي بيعدّي نفس قدرة الـ noise؛ وبيعاير الـ DFT المتعمل بـ window لـ spectral density بوحدة W/Hz.
  • كل window بتقايض الـ frequency resolution بمستوى الـ side lobes ودقة الـ amplitude والحساسية للـ noise؛ وجدول هاريس 1978 بيقيس المقايضة لكل واحدة.
  • القاعدة العملية: اعمل coherent sampling لو تقدر؛ وflat-top للـ amplitude؛ وBlackman-Harris للـ dynamic range؛ وصلّح دايمًا للـ coherent gain والـ ENBW قبل ما تقول قدرة مطلقة.
اللي بعده ليه الـ DFT بطيء — مشكلة الـ O(N²) نظرة عامة على الموديول اللي فات الـ frequency resolution والـ windowing (التنويف)