عيلتين لهدف واحد
أي تصميم filter رقمي في الآخر بيوصّلك لاختيار بين الـ FIR (الـ finite impulse response، استجابة نبضية منتهية) والـ IIR (الـ infinite impulse response، استجابة نبضية لا نهائية). النوعين يقدروا ينفّذوا responses low-pass وhigh-pass وband-pass وband-stop. والاتنين منتشرين جدًا في الـ hardware والـ software. بس بيختلفوا من الأساس في البنية وكفاءة الحساب وسلوك الـ phase وضمانات الاستقرار.
وفهم المقايضات دي مش أكاديمي وبس — هو اللي بيحدّد هل الـ filter بتاعك هيشتغل real time على microcontroller، وهل هيشوّه الـ transients في معالجة الصوت، وهل ينفع يتحط بأمان في feedback control loop. والدرس ده بيرسم خريطة شاملة لكل أبعاد المقارنة عشان تقدر تاخد القرار الصح لأي تطبيق.
البنية والـ difference equations
البنيتين بيختلفوا على مستوى الـ difference equations بتاعتهم. الـ FIR filter بيحسب خرجه كمجموع موزون للدخلات الحالية واللي فاتت بس:
الـ IIR filter بيرجّع كمان الخرجات اللي فاتت، فبيعمل loop recursive:
مقارنة جنب بعض
- مستقر دايمًا — مفيش feedback
- بيوصل لـ linear phase مثالي
- الـ impulse response طوله محدود M+1
- محتاج taps كتير عشان نزول حاد
- تكلفة حسابية عالية (درجة عالية)
- مفيش عدم استقرار بسبب الـ quantization بتاع المعاملات
- تصميم سهل بالـ windowed-sinc أو Parks-McClellan
- ممكن يبقى مش مستقر — الـ poles لازم تفضل جوه دايرة الوحدة
- phase مش linear (الـ group delay بيتغيّر مع الـ frequency)
- الـ impulse response بيصغر بس عمره ما بيخلص
- انتقالات حادة بمعاملات قليلة جدًا
- كفاءة حسابية عالية (درجة واطية)
- الـ quantization ممكن ينقل الـ poles برا دايرة الوحدة
- بيتصمّم عن طريق analog prototype + bilinear transform
درجة الـ filter — فجوة الكفاءة
أوضح فرق عملي هو عدد المعاملات المطلوبة عشان تحقق نفس مواصفات الـ frequency response. لـ low-pass filter فيه:
- حافة الـ passband: 0.2π راد/sample
- حافة الـ stopband: 0.3π راد/sample (transition band ضيق 0.1π)
- الـ passband ripple ≤ 1 dB
- الـ stopband attenuation ≥ 40 dB
| نوع الـ filter | الدرجة التقريبية | عدد الضرب/sample | ملاحظات |
|---|---|---|---|
| FIR (Kaiser window) | ≈ 46 tap | 46 | linear phase مضمون |
| FIR (Parks-McClellan) | ≈ 32 tap | 32 | equiripple مثالي |
| IIR Butterworth | الدرجة 12 | 25 | magnitude مفرود تمامًا |
| IIR Chebyshev I | الدرجة 6 | 13 | equiripple في الـ passband |
| IIR Elliptic | الدرجة 4 | 9 | أقل درجة للمواصفات |
الدرجات هنا هي أقل درجة بتحقق المواصفات، محسوبة بمكتبة SciPy (kaiserord، والبحث بـ Parks-McClellan، وbuttord، وcheb1ord، وellipord)؛ والـ IIR filter من الدرجة N بيكلّف 2N + 1 عملية ضرب في الـ direct form. والـ IIR elliptic filter بيحقق نفس الـ response بحوالي ربع لخُمس عدد عمليات الضرب بتاعة تنفيذ FIR مكافئ (9 قصاد 32–46). وعلى الـ processors المدمجة اللي معندهاش وحدات multiply-accumulate مخصوصة، الفرق ده ممكن يحدّد هل المعالجة الـ real time ممكنة أصلًا.
الـ phase response والـ group delay
الـ linear phase من أغلى الخصائص في الـ signal processing: لما كل مكوّنات الـ frequency تتأخر نفس المقدار، شكل الـ signal بيعدّي على الـ filter من غير تشويه. وقت الوصول بس هو اللي بيتزحزح — مش شكل الموجة.
الـ FIR filters اللي معاملاتها متماثلة (b_k = b_{M−k}) ليها linear phase تام على كل الـ frequencies، لأي درجة. والـ group delay بيساوي M/2 sample. وده بيخلّي الـ FIR الاختيار الافتراضي لـ:
- الـ equalization الصوتي — الـ transients لازم متتشوّهش
- معالجة signals رسم القلب والإشارات الحيوية — شكل الموجة مهم جدًا في التشخيص
- الـ coherent receivers في الاتصالات — العلاقات بين phases الـ signals مهمة
- معالجة الصور — الـ spatial filters المتماثلة بتتجنّب تشوّهات الحواف
الـ IIR filters recursive ومتقدرش توصل لـ linear phase تمامًا. الـ group delay بتاعها بيتفاوت على الـ passband — وأحدّه قريب من حواف النطاق. ولتطبيقات الصوت اللي الـ phase distortion فيها بيتسمع، أو لمعالجة البيانات اللي الـ phase coherence فيها مهمة، الـ IIR filters محتاجة مرحلة zero-phase filtering زيادة (filtering لقدّام ولورا) بتضاعف التكلفة الحسابية وبتضيف تأخير بيتعارض مع الاستخدام اللحظي.
الدالة filtfilt() في MATLAB وSciPy بتشغّل الـ IIR filter لقدّام وبعدين بتعكس النتيجة لورا. وده بيضاعف الدرجة الفعلية (بيربّع الـ magnitude response) وبيلغي الـ phase تمامًا — بس مينفعش يتطبّق في الـ real time لأن الـ signal لازم تبقى موجودة كلها قبل المعالجة.
الاستقرار والـ quantization بتاع المعاملات
الـ FIR filters مستقرة دايمًا من غير شروط. لأن مفيش feedback، مفيش poles — الـ transfer function فيها zeros بس. والـ zeros ممكن تبقى في أي حتة في مستوى z من غير ما تعمل عدم استقرار. والـ quantization لمعاملات FIR filter ممكن يغيّر الـ frequency response بتاعه شوية، بس مبيضيّعش استقراره.
الـ IIR filters محتاجة اهتمام دقيق بالاستقرار. تصميم الـ analog prototype بيضمن إن الـ poles تبدأ جوه دايرة الوحدة، بس فيه عاملين ممكن ينقلوها برّاها:
- الـ coefficient quantization: مع الحساب اللي دقته محدودة (زي الـ fixed-point 16 bit)، المعاملات المتقرّبة ممكن تزق الـ poles برا دايرة الوحدة، فبتعمل تذبذبات من غير حد
- الـ limit cycles: في تنفيذات الـ IIR بالـ fixed-point، تذبذبات صغيرة الـ amplitude ممكن تفضل حتى مع signal دخل صفر، بسبب الـ quantization في الـ feedback loop
العلاج المعياري إنك تنفّذ الـ IIR filters كـ second-order sections متسلسلة (biquads) بدل filter واحد درجته عالية. كل biquad بيتحكّم في poleين، ومعاملاته أقل حساسية بكتير للـ quantization لأن أماكن الـ poles بيتحكّم فيها عدد bits أقل في نفس الوقت.
IIR filter من الدرجة العاشرة متنفّذ كبنية واحدة فيه 10 معاملات feedback، والـ quantization لأي واحد فيهم بينقل العشر poles كلهم في نفس الوقت. أما بخمس biquads متسلسلين، كل معامل بيأثّر على زوج poles واحد بس. وحساسية الـ quantization بتقل جدًا.
IIR درجته عالية: استخدم دايمًا second-order sections متسلسلة (SOS)الـ complexity الحسابية
النوعين بينفّذوا عمليات multiply-accumulate (MAC)، بس بمعدّلات مختلفة جدًا. لـ filter من الدرجة N بيعالج sample واحدة كل مرة:
| العملية | FIR (درجة N) | IIR (درجة N) |
|---|---|---|
| ضرب/sample | N + 1 | N + M + 1 |
| جمع/sample | N | N + M |
| الـ memory (delay line) | N sample | N + M sample |
| الدرجة المعتادة لـ low-pass حاد | 50–200 tap | الدرجة 4–10 |
| مناسبته للـ real time | معتمد على سرعة الـ processor | ممتاز على أغلب الـ hardware |
للـ FIR filters الطويلة جدًا (مئات الـ taps)، طرق الـ overlap-add أو الـ overlap-save بتحسب الخرج باستخدام FFT على blocks بعمليات O(N log N) بدل O(N) لكل sample — وده بيخلّي الـ FIR filters الطويلة تنافس الـ IIR في الـ throughput لما تعالج blocks مع بعض.
خريطة القرار
عمليًا، الاختيار بين FIR وIIR بيتلخّص في مجموعة صغيرة من الأسئلة الحاسمة:
- الـ linear phase مطلوب (صوت، رسم قلب، اتصالات coherent)
- النظام ميستحملش عدم استقرار تحت أي ظروف
- بتستخدم fixed-point arithmetic واستقرار الـ quantization حاسم
- الـ hardware المستهدف فيه وحدات MAC متسرّعة (زي ARM CMSIS-DSP)
- المعالجة بالـ blocks مقبولة (التأخير مش حرج)
- مواصفات الـ filter فيها transition bands واسعة جدًا
- الموارد الحسابية شحيحة (MCU مدمج أو جهاز شغّال ببطارية)
- انتقالات حادة جدًا مطلوبة بأقل معاملات
- الـ phase distortion مقبول (زي وضوح الكلام، مش جودة المزيكا)
- الـ filter بيقلّد دايرة تناظرية (أدوات ضبط طبقة الصوت، الـ crossovers)
- الـ memory محدودة ولازم درجة الـ filter تفضل واطية
- الـ floating-point متاح (بيقلّل قلق الـ quantization)
لما مفيش واحد بيكسب بوضوح
فيه تطبيقات بتقع في منطقة رمادية. شبكات الـ crossover الصوتية في أنظمة السماعات تقليديًا بتستخدم IIR filters طالعة من الـ analog prototypes (Butterworth أو Linkwitz-Riley) لأن علاقات الميل والـ phase بين الـ drivers لازم تبقى دقيقة عند الـ crossover frequency — بس الـ linear phase بيفرق للنظام كله. والـ DSP amplifiers الحديثة الغالية في أغلب الأحيان بتستخدم FIR crossovers linear phase رغم التكلفة الحسابية.
الخلاصة: العيلتين من الـ filters ملهمش بديل. وإنك تعرف المقايضات بتاعتهم بعمق — مش بس خصائصهم السطحية — بيخلّيك تطابق الأداة مع المهمة وإنت واثق.
- الـ FIR filters feedforward بس، مستقرة دايمًا، وتقدر توصل لـ linear phase مثالي بمعاملات متماثلة.
- الـ IIR filters بتستخدم الـ feedback (الـ poles)، كفاءتها عالية بالـ recursion، بس الـ phase بتاعها مش linear بطبعه.
- لنفس مواصفات الـ frequency response، الـ IIR filters عادةً محتاجة معاملات أقل بكذا ضعف من تصميم FIR المكافئ — أقل بحوالي 4–5× لمواصفات الدرس ده.
- الـ linear phase محتاج FIR — phase الـ IIR مش linear بطبعه، مع إن الـ zero-phase filtering الخارجي (filtfilt) اختيار لغير الـ real time.
- الـ IIR filters لازم دايمًا تتنفّذ على hardware الـ fixed-point كـ biquad sections متسلسلة عشان تتحكّم في حساسية الـ quantization والـ limit cycles.
- اختار FIR للتطبيقات الحرجة في الـ phase والأمان وhardware الـ fixed-point؛ واختار IIR لأنظمة الـ real time المحدودة حسابيًا اللي الـ phase distortion فيها مقبول.
- طرق الـ overlap-add/overlap-save بتخلّي الـ FIR filters الطويلة تنافس الـ IIR في الـ throughput باستخدام الحساب بالـ blocks المبني على الـ FFT.