الـ filtering: تشكيل الـ spectrum
أي signal (إشارة) بتقابلها في الواقع فيها خليط من الـ frequencies — شوية منها عايزينهم وشوية لأ. المايك بيلقط noise الأوضة جنب صوت اللي بيتكلّم. وقراية الـ sensor شايلة القياس الفيزيائي وكمان تشويش الكهربا بتاع الـ 60 هرتز. والراديو بيستقبل عشرات القنوات مرة واحدة. الـ filtering (الترشيح) هو العملية اللي بتعدّي frequencies معيّنة بشكل انتقائي وبتضعّف غيرها، وهو من أهم العمليات الأساسية في الـ DSP.
فيه عيلتين أساسيتين من الـ filters الرقمية: الـ FIR (الـ finite impulse response، الاستجابة النبضية المحدودة) والـ IIR (الـ infinite impulse response، الاستجابة النبضية اللانهائية). والوحدة دي مركّزة على الـ FIR filters — الأبسط والأكتر قابلية للتوقّع، والأقوى من نواحي كتير. وإنك تفهم الـ FIR filter بيشتغل إزاي هيفتحلك كل اللي جاي: طرق التصميم، وأنواع الـ filters، وخاصية الـ linear phase المدهشة.
الفكرة الجوهرية: مفيش feedback
الـ FIR filter بيحسب خرجه على إنه مجموع موزون للـ sample الحالية وعدد محدود من samples الدخل اللي فاتت. بس كده. مفيش feedback — الخرج مبيرجعش يدخل في الحسابات الجاية. والاختيار البنائي الواحد ده هو اللي بيدّي الـ FIR filters كل خصائصها الحلوة.
رياضيًا، الخرج عند الزمن n هو:
المعاملات b_0, b_1, …, b_M هي زراير التصميم. ولو اخترتها صح بتشكّل الـ frequency response بتاع الـ filter لأي passband وstopband وعرض انتقال محتاجه.
الـ impulse response هو الـ filter
افتكر من الوحدة 3 إن نظام LTI بيتميّز بالكامل بالـ impulse response (الاستجابة النبضية) بتاعه h[n]. وفي الـ FIR filter، الـ impulse response بيساوي بالظبط مجموعة المعاملات:
بما إن h[n] طولها محدود، الخرج ببساطة هو الـ convolution (الالتواء) بين الدخل والـ sequence المحدودة دي: y[n] = x[n] * h[n]. ومفيش حاجة تانية. وخرج الـ filter في أي لحظة هو dot product بيتحرّك بين آخر M+1 sample دخل وvector المعاملات.
الـ frequency response
الـ frequency response بتاع الـ FIR filter هو الـ DTFT للـ impulse response بتاعه، محسوب على دايرة الوحدة (z = e^{jω}):
على عكس الـ filter التناظري اللي درجته محدودة بتعقيد الدايرة، الـ FIR filter ممكن يطوّل زي ما إنت عايز — معاملات أكتر معناها انتقالات أحدّ وpassbands أكتر استواء، بتكلفة حسابات أعلى.
الاستقرار من غير شروط
من أهم المميزات العملية للـ FIR filters إنها مستقرة دايمًا. افتكر معيار الـ BIBO stability: النظام مستقر لو وبس لو كل الـ poles بتاعته جوه دايرة الوحدة تمامًا. وبما إن الـ FIR filter مفيهوش feedback، الـ transfer function بتاعته polynomial في z⁻¹ — ليها zeros بس مفيهاش poles (أو بمعنى تاني، كل الـ poles بتاعتها عند الأصل z = 0، جوه دايرة الوحدة لوحدها).
الـ filter المش مستقر بيطلّع خرج بيكبر من غير حد حتى مع دخل محدود — كارثة في نظام صوت أو تحكم real time. والـ IIR filters، اللي فيها feedback، ممكن تبقى مش مستقرة لو معاملاتها متصمّمتش بحرص أو لو تأثيرات الـ finite word length زقّت pole برا دايرة الوحدة. أما مع الـ FIR filters، فببساطة عمرك ما هتقلق من ده. غيّر أي معامل لأي قيمة والـ filter هيفضل مستقر.
مفيش poles ← مفيش عدم استقرار. الـ FIR filters BIBO stable من غير أي شروط.خاصية الـ linear phase
يمكن أشهر خاصية للـ FIR filters هي إنها تقدر توصل لـ الـ linear phase (الطور الخطي). الـ filter بيبقى linear phase لو الـ phase response بتاعه خط مستقيم: ∠H(e^{jω}) = −αω لثابت α ما. والـ linear phase معناه إن كل مكوّن frequency بيتأخر نفس القدر بالظبط (α sample). وشكل موجة الـ signal اللي بتعدّي على filter linear phase بيتحفظ — التوقيت بس هو اللي بيتزحزح.
الـ linear phase بيتحقق لما معاملات الـ impulse response تبقى متناظرة (أو anti-symmetric):
شرط التناظر ده قيد قوي: بيقسم عدد الضرب المطلوب على اتنين (لأن b_k = b_{M−k}، ونص المعاملات بس فريدة) وبيضمن إن phase الـ frequency response خطي — وده اللي الـ IIR filters عمرها ما تقدر توصله بالظبط.
التكلفة الحسابية
تمن الـ FIR filters هو الحسابات: كل sample خرج محتاجة M+1 عملية ضرب وM جمع. low-pass filter فيه 101 معامل (M = 100) محتاج 101 عملية multiply-accumulate لكل sample. وعند صوت 48 كيلوهرتز، ده 4.85 مليون عملية MAC في الثانية — ولا حاجة على DSP processor أو microcontroller حديث، بس اعتبار مهم في التطبيقات اللي الـ sampling rate فيها عالي جدًا أو الطاقة قليلة جدًا.
| طول الـ filter | عدد المعاملات | MAC / sample | الاستخدام المعتاد |
|---|---|---|---|
| قصير | 11 – 31 | 11 – 31 | smoothing بسيط، pre-emphasis |
| متوسط | 51 – 127 | 51 – 127 | equalizer صوت، anti-aliasing |
| طويل | 255 – 1023 | 255 – 1023 | crossovers حادة، channel equalization |
| طويل جدًا | 4096+ | 4096+ | room correction، convolution reverb |
في الـ FIR filters الطويلة جدًا (مئات لآلاف المعاملات)، الـ convolution المباشر بيبقى مكلّف. وطريقتين الـ overlap-add والـ overlap-save بيستغلّوا الـ FFT عشان يطبّقوا الـ convolution في الـ frequency domain بتكلفة O(N log N) لكل block — تسريع ضخم لما الـ filter يبقى أطول بكتير من block الدخل.
الـ FIR filters في الواقع العملي
الـ FIR filters بتظهر في كل حتة في الـ DSP:
- الـ FIR filter بيحسب خرجه كمجموع موزون للـ sample الحالية وM sample دخل فاتوا — من غير feedback ولا recursion.
- الـ difference equation هي y[n] = Σ b_k · x[n−k]، حيث الـ M+1 معامل b_k هما معاملات التصميم.
- الـ impulse response بيساوي sequence المعاملات: h[k] = b_k. وطوله محدود — وده سبب الاسم "finite impulse response".
- الـ FIR filters BIBO stable من غير شروط — مفيش poles، فمفيش حاجة تعرّضها لعدم الاستقرار، مهما كانت قيم المعاملات.
- الـ impulse response المتناظر (h[n] = h[M−n]) بيضمن الـ linear phase: كل frequency بتتأخر نفس القدر، فشكل الموجة بيتحفظ.
- التكلفة الحسابية M+1 عملية MAC لكل sample خرج؛ والـ FIR filters الطويلة بتتنفّذ بطريقة الـ overlap-add بالـ FFT.
- الـ FIR filters بتتستخدم في كل حتة: الـ equalization في الصوت، والـ pulse shaping في الاتصالات، والـ multirate filtering، ومعالجة الـ signals الطبية الحيوية.