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

خصائص الـ systems

~12 دقيقة قراءة الدرس 2 من الوحدة 3

تصنيف الـ discrete-time systems

الـ discrete-time system هو قاعدة بتحوّل sequence الدخل x[n] لـ sequence الخرج y[n]. القاعدة دي ممكن تبقى بسيطة زي y[n] = 2x[n] (تكبير)، أو معقّدة زي recursive filter (مرشّح عودي) بيخلط مئات الـ samples اللي فاتت. وقبل ما تصمّم أي نظام أو تحلّله، المهندسين محتاجين مفردات مشتركة يوصفوا بيها سلوكه بغض النظر عن معاملاته بالظبط.

المفردات دي فيها خمس خصائص أساسية: الـ linearity (الخطية)، والـ time invariance (ثبات الزمن)، والـ causality (السببية)، والـ stability (الاستقرار)، والـ memory (الذاكرة). وأي نظام ممكن يتوصف بالأبعاد دي. وأهم تركيبة فيهم — الـ linearity والـ time invariance مع بعض — بتعرّف عيلة أنظمة LTI اللي بيوصفها تمامًا sequence واحدة اسمها الـ impulse response (الاستجابة النبضية).

الخاصية 1
الـ linearity
مبدأ الـ superposition بيتطبّق: لو كبّرت الدخلات وجمعتها، بيطلع الخرج المقابل متكبّر ومتجمّع.
الخاصية 2
الـ time invariance
لو زحزحت الدخل k sample الخرج بيتزحزح نفس القدر — النظام مبيتغيّرش مع الوقت.
الخاصية 3
الـ causality
الخرج عند اللحظة n معتمد بس على الدخلات الحالية واللي فاتت، مش اللي جاية.
الخاصية 4
الـ BIBO stability
الدخل المحدود دايمًا بيطلّع خرج محدود — النظام عمره ما بيفرقع.

يعني إيه discrete-time system؟

رسميًا، الـ discrete-time system هو عملية T{·} بتربط كل sequence دخل x[n] بـ sequence خرج y[n]. والرمز y[n] = T{x[n]} بيلخّص الفكرة دي. العملية T ممكن تمثّل difference equation (معادلة فروقية) واحدة، أو سلسلة filters، أو أي خوارزمية بتعالج الـ samples ورا بعض.

تعريف الـ system
y[n] = T\{x[n]\}
العملية T بتربط كل sequence دخل ممكنة بـ sequence خرج مقابلة. وإنك توصف T بخصائصه بيقولّنا نحلّله إزاي، ونركّبه مع أنظمة تانية إزاي، وإيه الدخلات اللي يقدر يعالجها بأمان.

مثال بسيط: الـ accumulator y[n] = ∑k=−∞n x[k] بيجمع كل الدخلات اللي فاتت والحالية. والـ moving average y[n] = ½(x[n] + x[n−1]) بيخلط sampleين ورا بعض. والـ ideal delay y[n] = x[n−n0] بيزحزح الـ signal بـ n0 sample. كل واحد فيهم عملية T مختلفة بخصائص مختلفة.

الـ linearity: مبدأ الـ superposition

النظام linear لو ماشي على مبدأ الـ superposition (التراكب): الرد على مجموع دخلات بيساوي مجموع الردود لوحدها. وبدقة أكتر، T يبقى linear لو وبس لو لأي دخلين x1[n] وx2[n] وأي ثوابت a وb:

الـ linearity (الـ superposition)
T\{a\,x_1[n] + b\,x_2[n]\} = a\,T\{x_1[n]\} + b\,T\{x_2[n]\}
الـ superposition بيجمع شرطين أبسط: الـ additivity (T{x₁+x₂} = T{x₁}+T{x₂}) والـ homogeneity (T{ax} = aT{x}). ولازم الاتنين يتحققوا عشان النظام يبقى linear.

الـ linearity قوتها رهيبة. بما إن أي signal ممكن تتفكّك لمجموع impulses متكبّرة ومتزحزحة (خاصية الـ sifting من الدرس اللي فات)، فمعرفة رد النظام الـ linear على impulse واحدة بتقولّنا ردّه على أي دخل ممكن. والفكرة دي هي أساس الـ convolution (الالتواء) ونظرية أنظمة LTI كلها.

اختبار الـ linearity

عشان تختبر هل y[n] = x²[n] linear، طبّق الـ superposition: T{ax₁+bx₂} = (ax₁[n]+bx₂[n])² = a²x₁²[n]+2abx₁[n]x₂[n]+b²x₂²[n]. وده في العموم مش بيساوي aT{x₁}+bT{x₂} = ax₁²[n]+bx₂²[n]. فتربيع الـ signal نظام nonlinear. وعلى العكس، y[n] = 3x[n]−x[n−1] linear لأن T{ax₁+bx₂} = aT{x₁}+bT{x₂}.

الـ time invariance: النظام مبيتغيّرش

النظام time-invariant لو زحزحة الدخل في الزمن بتطلّع نفس الزحزحة في الخرج — من غير أي تغيير تاني. لو y[n] هو الرد على x[n]، يبقى لازم الرد على x[n−k] يكون y[n−k] لأي عدد صحيح k:

شرط الـ time invariance
T\{x[n-k]\} = y[n-k] \quad \forall\, k \in \mathbb{Z}
لو شغّلت نفس الـ signal بكرة بدل النهارده، النظام هيطلّع نفس الخرج — متزحزح يوم واحد بس. سلوك النظام مش معتمد على توقيت الـ signal.

الـ time invariance معناها إن النظام مفيهوش ساعة جوّاه ولا نتيجة. أغلب الـ filters الرقمية time-invariant: نفس مجموعة المعاملات بتتطبّق في كل لحظة sample. أما النظام الـ time-varying فمعاملاته بتتغيّر مع الوقت — زي filter الـ cutoff frequency بتاعه ماشية ورا control signal، أو قناة اتصالات خصائصها بتتغيّر ثانية بثانية.

الـ causality: مفيش بصّة على المستقبل

النظام causal لو خرجه عند أي لحظة n معتمد بس على الدخل عند n واللي قبله (n−1, n−2, …). مينفعش يعتمد على قيم الدخل الجاية x[n+1], x[n+2], ... — القيم اللي لسه موصلتش للـ processor اللي شغّال في الـ real time.

شرط الـ causality
y[n] = f\bigl(x[n],\, x[n-1],\, x[n-2],\, \ldots\bigr)
y[n] ممكن يعتمد على x[n]، x[n−1]، x[n−2]، ... بس مش على x[n+1]، x[n+2]، .... والنظام الـ causal LTI عنده h[k] = 0 لكل k < 0.

كل أنظمة الـ hardware الحقيقية اللي شغّالة real time لازم تبقى causal — المايك ميقدرش يتوقّع الكلام، والـ receiver بتاع الرادار ميعرفش الصدى قبل ما النبضة تتبعت. أما الـ offline processing (المعالجة غير الآنية) فحاجة تانية: لما بتشتغل على بيانات متسجّلة قبل كده، النظام يقدر يوصل للـ samples الجاية براحته. وعشان كده تطبيقات الصوت والصورة والتحليل العلمي كتير بتستخدم خوارزميات non-causal.

الـ causal قصاد الـ non-causal عمليًا

الـ moving average الـ causal y[n] = ½(x[n]+x[n−1]) بيستخدم samples الماضي والحاضر بس. أما الـ centered average y[n] = ⅓(x[n+1]+x[n]+x[n−1]) فبيستخدم sample من المستقبل ويبقى non-causal. والنسخة المتمركزة بتدّي phase shift قدره صفر — حاجة مطلوبة في تحليل رسم القلب أو الصوت — بس متشتغلش في الـ real time.

causal ← بيشتغل real time  |  non-causal ← offline بس، وأداؤه غالبًا أحسن

الـ stability: دخل محدود، خرج محدود

النظام BIBO stable (الـ bounded-input bounded-output stability) لو كل دخل محدود بيطلّع خرج محدود. رسميًا: لو فيه ثابت محدود Bx بحيث |x[n]| ≤ Bx لكل n، يبقى لازم يكون فيه ثابت محدود By بحيث |y[n]| ≤ By لكل n:

الـ BIBO stability
|x[n]| \leq B_x < \infty \;\Rightarrow\; |y[n]| \leq B_y < \infty
الـ BIBO stability بتضمن إن النظام مش هيطلّع خرج لانهائي من دخل محدود. ولنظام LTI، الـ BIBO stability معناها إن مجموع القيم المطلقة للـ impulse response h[n] محدود: Σ|h[n]| < ∞.

النظام غير المستقر خطر عمليًا: دخل طاقته محدودة (تصقيفة، رعشة كهربا) ممكن يشعلل نمو ملوش كابح يشبّع الأجهزة، ويحرق السماعات، أو يوقّف الـ processors. الـ accumulator y[n] = ∑k=−∞n x[k] مش مستقر: دخّل عليه unit step (كل القيم = 1) والخرج هيفضل يزيد من غير حد. أما الـ recursive filter من الدرجة الأولى y[n] = αy[n−1]+x[n] مع |α|<1 فمستقر: الـ impulse response بتاعه αnu[n] مجموع قيمه المطلقة محدود.

الـ memory: هل الماضي بيفرق؟

النظام ليه memory لو خرجه عند n معتمد على أكتر من الـ sample الحالية x[n]. يعني قيم الدخل اللي فاتت (أو قيم الخرج اللي فاتت في النظام الـ recursive) بتأثّر على الخرج الحالي. والنظام memoryless (عديم الذاكرة) لو y[n] = f(x[n]) لدالة f ما — الخرج معتمد بس على الدخل اللحظي.

مثال memoryless
y[n] = f\bigl(x[n]\bigr)
الـ sample الحالية بس هي اللي بتفرق. الـ gain والـ rectifier والـ lookup table كلهم memoryless.
مثال ليه memory
y[n] = \tfrac{1}{2}\bigl(x[n] + x[n-1]\bigr)
الـ samples اللي فاتت ضرورية. أي filter أو delay أو integrator ليه memory.

الـ memory هي اللي بتخلّي الـ filtering ممكن. النظام الـ memoryless ميقدرش ينعّم الـ noise، ولا يشيل مكوّنات frequency، ولا يكتشف أنماط على مدى الزمن — المهام دي محتاجة تجمع samples كتير. وطول الـ memory بتاعة النظام (المدى الزمني اللي بيأثّر على الخرج الحالي) مرتبط بدرجة الـ difference equation ومدة الـ impulse response.

أنظمة LTI: أهم عيلة

لما النظام يبقى linear وtime-invariant في نفس الوقت، بيبقى من عيلة أنظمة LTI (الـ linear time-invariant systems). والاتنين مع بعض بيفتحوا إطار تحليلي كامل: نظام LTI بيتوصف تمامًا بالـ impulse response بتاعه h[n]، وخرجه هو الـ convolution بين الدخل وh[n]:

خرج LTI عن طريق الـ convolution
y[n] = \sum_{k=-\infty}^{\infty} x[k]\,h[n-k] = x[n] * h[n]
أي نظام LTI بيتحدّد كله بـ h[n]. أول ما تعرف h[n]، تحسب الخرج لأي دخل x[n] بـ convolution بين x وh. والدرس الجاي بيطلّع مجموع الـ convolution ده بالتفصيل.

ليه ده قوي أوي كده؟ لأن الـ linearity والـ time invariance مع بعض بيسمحوا إن تفكيك الـ impulses من الدرس اللي فات يتطبّق على الخرج كمان. الـ linearity بتضمن إنك تقدر تجمع الردود المتكبّرة؛ والـ time invariance بتضمن إن كل impulse متزحزحة في x[n] بتطلّع نسخة متزحزحة من h[n]. والنتيجة هي مجموع الـ convolution.

عمليًا، كل بلوك DSP مفيد — الـ bandpass filters، والـ equalizers، والـ echo cancellers، والـ channel estimators، والـ correlators — يا إما أنظمة LTI بالظبط يا إما بتتقرّب بيها في نطاق التشغيل. وتحويل Z والـ DFT الاتنين أدوات لتحليل أنظمة LTI في الـ frequency domain. والـ DSP الكلاسيكية كلها مبنية على الأساس ده.

الدرس الجاي بيدخل في الـ convolution: العملية الأساسية اللي بتحسب خرج أي نظام LTI. هنطلّع مجموع الـ convolution، ونشوف تفسيره بالرسم، ونستكشف خصائصه الجبرية.

أهم النقط
  • الـ discrete-time system T بيربط sequences الدخل x[n] بـ sequences الخرج y[n]؛ وخصائصه بتحدّد هنحلّله وننفّذه إزاي.
  • الـ linearity معناها T{ax₁+bx₂} = aT{x₁}+bT{x₂}: مبدأ الـ superposition بيتطبّق.
  • الـ time invariance معناها إن دخل متزحزح في الزمن بيطلّع خرج متزحزح في الزمن؛ سلوك النظام ثابت مع الوقت.
  • النظام الـ causal خرجه معتمد بس على الدخلات الحالية واللي فاتت — ضروري للمعالجة في الـ real time؛ والأنظمة الـ non-causal بتتستخدم في المعالجة الـ offline عشان أداء أحسن.
  • الـ BIBO stability بتضمن إن الدخلات المحدودة دايمًا بتطلّع خرج محدود؛ ولأنظمة LTI ده معناه إن مجموع القيم المطلقة للـ impulse response محدود.
  • الـ memory معناها إن الـ samples اللي فاتت بتأثّر على الخرج الحالي؛ والأنظمة الـ memoryless بتعالج كل sample لوحدها ومتقدرش تعمل filtering.
  • LTI = linear + time-invariant → بيتوصف كله بـ h[n]؛ والخرج هو الـ convolution y[n] = x[n] * h[n].
اللي بعده الـ convolution (الالتواء) — العملية الأساسية نظرة عامة على الموديول اللي فات الـ signals الرقمية المنتشرة