تمثيل الـ poles والـ zeros
أي transfer function (دالة نقل) rational H(z) ممكن تتكتب كنسبة بين polynomialين في z. ولما تحلّل البسط والمقام لعواملهم، بيطلعلك مجموعتين من النقط في المستوى المركّب: الـ zeros (الأصفار) — قيم z اللي بتخلّي H(z) = 0 — والـ poles (الأقطاب) — قيم z اللي بتخلّي H(z) → ∞. والنقط دي مع بعض بتحدّد الـ transfer function كلها ما عدا ثابت الـ gain.
الـ pole-zero plot (مخطط الأقطاب والأصفار) هو أقصر وصف لأي filter. بصّة واحدة عليه بتكشف الاستقرار (الـ poles جوه دايرة الوحدة؟)، ونوع الـ filter (الـ zeros فين بالنسبة لدايرة الوحدة؟)، وشكل الـ frequency response — من غير ما تحسب رقم واحد. وإنك تتقن قراية الـ pole-zero plots وتصميمها من أقوى المهارات في الـ DSP.
من H(z) للـ frequency response
الـ frequency response H(ejω) بيتحسب بالتعويض z = ejω في H(z)، حيث ω ∈ [−π, π]. وده بيخلّي دايرة الوحدة هي "الشبّاك" اللي بنبص منه على السلوك الطيفي للـ filter.
التصوّر الهندسي ده هو الفكرة الأساسية: إنك تحسب الـ frequency response عند زاوية ω معناه إنك تقيس المسافة من كل pole وكل zero للنقطة ejω على دايرة الوحدة. الـ poles القريبة من الدايرة بتخلّي حاصل ضرب المقام صغير جدًا، فبتعلّي الـ amplitude. أما الـ zeros اللي على الدايرة فبتخلّي حاصل ضرب البسط صفر، وده بيعمل notch حادة تمامًا في الـ response.
التفسير الهندسي
تخيّل إنك "بتلفّ" نقطة حوالين دايرة الوحدة وω بتزيد من −π لـ π. عند كل زاوية، احسب المسافة لكل pole وكل zero. وقيمة |H(ejω)| بتساوي حاصل ضرب المسافات من الـ zeros مقسوم على حاصل ضرب المسافات من الـ poles.
التصوّر الهندسي ده بيحوّل تصميم الـ filters من مسألة polynomials مجرّدة لمهمة إنك تحط حاجات في أماكنها بالبديهة. عايز notch عند ω = π/2؟ حط zero عند z = j. عايز resonance حاد عند ω = π/3؟ حط pole قريب من ejπ/3 جوه دايرة الوحدة.
الحد الفاصل: الـ marginal stability
كل اللي فات افترض filter مستقر — filter الـ poles بتاعته جوه دايرة الوحدة تمامًا، فالـ impulse response بتاعه بيصغر وأي دخل محدود بيطلّع خرج محدود. ولما تزق الـ pole ناحية الدايرة الـ resonance بيبقى أحدّ، وده بيطرح السؤال الطبيعي: إيه اللي بيحصل على الدايرة نفسها؟ الحد ده ليه اسم. الـ pole اللي نص قطره r = 1 بالظبط بيخلّي النظام marginally stable (مستقر حدّياً) — وهو الخط الفاصل بين الجوّه المستقر والبرّه غير المستقر.
عند r = 1 الـ impulse response لا بيصغر ولا بيكبر؛ بيستقر على تذبذب مستمر الـ amplitude بتاعه ثابت. الـ pole الحقيقي الواحد عند z = 1 بيراكم دخله للأبد — وده الـ integrator في الزمن المتقطع — أما زوج الـ poles الـ conjugate عند e±jω0 فبيرنّ عند ω0 وعمره ما بيهدى، ودي بالظبط طريقة بناء الـ oscillator الرقمي. وكـ filter مينفعش: هو مش BIBO stable، لأن دخل عند نفس frequency الـ pole بيزق الخرج للانهاية، وكمان الـ pole المتكرّر على الدايرة بيكبر من غير حد حتى من impulse واحدة. الـ marginal stability ميزة لما تكون عايز oscillator، وعيب لما تكون عايز filter.
وعشان كده الـ notch filter عند 60 هرتز اللي تحت بيحط الـ poles بتاعته عند r أقل من 1 بشوية، عمره ما بيحطها على الدايرة. أما الـ zeros فممكن تقع في أي حتة — والـ zero اللي على الدايرة بالظبط notch مثالية مالهاش ضرر — بس الـ pole اللي على الدايرة بيحوّل الـ filter لـ oscillator. وكل ما r → 1 الـ notch بتبقى أضيق، وده بالظبط لأن التصميم بيقرّب من الحد ده: تمن الـ notch الأحدّ filter بيرنّ مدة أطول وبيستحمل غلط عددي أقل.
الـ phase response والـ group delay
الـ pole-zero plot بيحدّد كمان الـ phase response ∠H(ejω). الـ phase عند الـ frequency ω بيساوي مجموع زوايا الـ zeros ناقص مجموع زوايا الـ poles بالنسبة للنقطة ejω على دايرة الوحدة.
الـ group delay (تأخر المجموعة) τ(ω) = −d∠H/dω بيقيس المكوّنات المختلفة في الـ frequency بتتأخر قد إيه. والـ linear phase — اللي فيه كل الـ frequencies بتتأخر نفس القدر — بيتحقق في تصميمات الـ filters المتماثلة (FIR). أما الـ IIR filters اللي فيها poles فعادةً بتطلّع phase مش خطي.
الـ filters الحقيقية: الـ conjugate symmetry
لو معاملات الـ filter h[n] حقيقية، يبقى H(z) عنده خاصية الـ conjugate symmetry (التماثل المترافق): لو p pole يبقى p* pole كمان؛ ولو z0 zero يبقى z0* zero كمان. ومعنى كده إن poles وzeros الـ filters الحقيقية دايمًا بتظهر في أزواج conjugate (إلا لو واقعة على المحور الحقيقي).
للـ filter الحقيقي: الـ poles والـ zeros اللي بعيدة عن المحور الحقيقي دايمًا بتيجي في أزواج conjugate (p, p*)، وده بيضمن impulse response حقيقي في الـ time domain.
h[n] حقيقي ⟺ الـ poles والـ zeros بتظهر في أزواج conjugateالقيد ده بيقسم درجات الحرية في التصميم على اتنين: إنك تحدّد pole مركّب عند rejθ بيحط الـ conjugate بتاعه لوحده عند re−jθ. والزوج مع بعض بيعمل second-order section بمعاملات حقيقية، وده الطوبة الأساسية لتنفيذ الـ IIR filters.
أنواع الـ filters الكلاسيكية من الـ pole-zero plot
تصنيف الـ filter حسب نطاق الـ frequency — low-pass، وhigh-pass، وband-pass، وband-stop — ممكن يتحدد على طول من الـ pole-zero plot لما تبص على مكان الـ zeros (الـ notches) والـ poles (التعلية) بالنسبة لدايرة الوحدة.
مثال تصميم بسيط
افترض إننا عايزين notch filter رقمي يشيل تداخل الـ 60 هرتز من signal متاخد منها samples بمعدّل 8 كيلوهرتز. الـ frequency المتطبّعة هي ω0 = 2π×60/8000 ≈ 0.0471 راديان/sample — يعني 0.0150π، فالـ notch بتقع على مسافة 1.5% من الطريق بين الـ frequency صفر وfs/2. (خد بالك من الاصطلاح: 0.0471 هي الزاوية بالراديان لكل sample؛ ومعامل π موجود أصلًا جوه 2π×60/8000 ومينفعش يتكتب تاني.) بنحط زوج zeros conjugate على دايرة الوحدة عند ±ω0، وبعدين نضيف زوج poles conjugate عند نص قطر r < 1 عند نفس الزوايا عشان نرجّع الـ gain عند الـ frequencies اللي جنبها.
المثال ده بيوضّح قوة طريقة تصميم الـ poles والـ zeros: متطلّب هندسي حقيقي (شيل الـ 60 هرتز) بيتحوّل على طول لمسألة إنك تحط حاجة في مكانها (zeros على دايرة الوحدة عند الزاوية الصح). مش محتاج خوارزمية optimization — الهندسة لوحدها كفاية.
- الـ poles هي قيم z اللي عندها H(z) → ∞؛ والـ zeros هي قيم z اللي عندها H(z) = 0. والاتنين مع بعض بيحدّدوا الـ filter الـ rational ما عدا ثابت الـ gain.
- |H(ejω)| = حاصل ضرب المسافات من الـ zeros لـ ejω مقسوم على حاصل ضرب المسافات من الـ poles لـ ejω.
- الـ poles القريبة من دايرة الوحدة بتعمل قمم amplitude (resonance)؛ والـ zeros اللي على الدايرة بتعمل notches مثالية.
- الـ pole اللي على دايرة الوحدة بالظبط (r = 1) marginally stable: بيتذبذب للأبد بدل ما يهدى — وده أساس الـ oscillator الرقمي، بس عمره ما يبقى filter مستقر. خلّي الـ poles جوه الدايرة تمامًا.
- الـ phase response = مجموع زوايا الـ zeros ناقص مجموع زوايا الـ poles؛ والـ phase اللي مش خطي بيطلع من إن الـ poles والـ zeros متحطوطين بشكل مش متماثل.
- الـ filters اللي معاملاتها حقيقية: الـ poles والـ zeros بتوعها conjugate؛ والجذور المركّبة دايمًا بتيجي في أزواج conjugate.
- low-pass/high-pass/band-pass/notch: كل واحد ليه ترتيب مميز للـ poles والـ zeros على مستوى z.
- الـ notch filter: zeros على الدايرة عند ω0، وpoles جوّاها عند نفس الزاوية عشان تتحكّم في الـ bandwidth.