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

من الـ time domain للـ frequency domain

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

كل signal مجموع sinusoids

ليه المهندسين مهتمين بالـ frequency domain (نطاق التردد)؟ الإجابة في حقيقة رياضية جميلة: أي signal (إشارة) ممكن تتكتب كمجموع موزون من الـ sinusoids (الجيبيات). ودي جوهر الـ Fourier analysis، اللي بيحوّل الـ signal processing من إنك تتابع الموجات على الزمن لإنك تدير الـ amplitudes والـ phases على الـ frequencies. وللـ signal في الزمن المتقطع، الأداة الطبيعية للتحويل ده هي الـ discrete-time Fourier transform (تحويل فورييه للزمن المتقطع) أو DTFT.

التفكير بالـ frequencies بيجيب نتيجة في الـ DSP. الـ filters بتتصمّم بشكل طبيعي بإنك تحدّد أنهي frequencies تعدّي وأنهي تتمنع. والـ noise اللي متركّز في نطاق frequency معيّن سهل تكتمه لما يظهر كقمة في الـ spectrum. وsignals الصوت والمزيكا والراديو ليها بصمات frequency مميزة بتكشف بنية مستخبية مش هتشوفها في الـ time domain. الـ frequency domain مش مجرد وسيلة مريحة — ده غالبًا المكان الأنسب لحل مشاكلنا.

الـ discrete-time Fourier transform (DTFT)

الـ DTFT بيحوّل الـ sequence في الزمن المتقطع x[n] لدالة مستمرة في الـ frequency X(ejω). وعلى عكس تحويل Z اللي بيستخدم متغيّر مركّب عام z، الـ DTFT بيحسب تحويل Z على دايرة الوحدة z = ejω. والنتيجة دالة قيمها مركّبة في frequency زاوية متطبّعة ω (راديان لكل sample)، ودورية بدورة 2π.

تعريف الـ DTFT
X(e^{j\omega}) = \sum_{n=-\infty}^{\infty} x[n]\,e^{-j\omega n}
الـ DTFT بيجمع الـ sequence x[n] متضروبة في أُسس مركّبة e^{−jωn}. والنتيجة X(e^{jω}) دالة مستمرة دورية في ω بدورة 2π. والتقارب محتاج الـ sequence تبقى absolutely summable.

الـ inverse DTFT بيرجّع x[n] بإنه يكامل X(ejω) على فترة واحدة:

الـ inverse DTFT
x[n] = \frac{1}{2\pi}\int_{-\pi}^{\pi} X(e^{j\omega})\,e^{j\omega n}\,d\omega
تكامل X(e^{jω}) e^{jωn} على [−π, π] مقسوم على 2π بيرجّع الـ sequence الأصلية x[n] بالظبط. وده بيأكّد إن الـ DTFT تمثيل كامل وينفع يتعكس.
الـ frequency المتطبّعة

في الزمن المتقطع، الـ frequency ω بتتقاس بـالراديان لكل sample، ومداها من −π لـ π. وعشان تحوّلها لـ frequency فيزيائية بالهرتز، اضرب في fs/(2π). والـ Nyquist frequency fs/2 بتقابل ω = π.

ω = 2π f / fs  —  فـ ω = π بتقابل f = fs/2 (نايكويست)

الخصائص الأساسية للـ DTFT

الـ DTFT وارث مجموعة غنية من الخصائص من عيلة تحويل فورييه. والخصائص دي مش مجرد فضول رياضي — دي أدوات عملية بتخلّيك تستنتج إزاي العمليات على الـ signal (زحزحة، تكبير، filtering) بتأثّر في الـ frequency domain من غير ما تحسب التكامل من الأول كل مرة.

الـ linearity
مبدأ الـ superposition
DTFT{ax[n] + by[n]} = aX(ejω) + bY(ejω). فكّك الـ signals المعقّدة لمكوّنات أبسط، حوّل كل واحد، وبعدين اجمع النتايج.
الـ time shift
phase shift
DTFT{x[n − n₀]} = e−jωn₀ X(ejω). تأخير الـ signal بـ n₀ sample بيضرب الـ spectrum بتاعها في معامل phase خطي — والـ magnitude مبيتغيّرش.
الـ convolution
الضرب
DTFT{x[n] ∗ h[n]} = X(ejω) H(ejω). الـ convolution في الزمن بيساوي الضرب نقطة بنقطة في الـ frequency — أساس الـ linear filtering.
التناظر
الـ signals الحقيقية
للـ signal الحقيقية x[n]، |X(ejω)| زوجي و∠X(ejω) فردي. والـ conjugate symmetry ده معناه إن الـ spectrum كله متحدّد بقيمه على [0, π].

ثنائية الـ convolution والضرب غالبًا أهم خاصية. معناها إن الـ filtering — اللي هو convolution في الـ time domain — بيبقى ضرب نقطة بنقطة في الـ frequency domain. وعشان تصمّم low-pass filter، بتحدّد ببساطة H(ejω) = 1 لـ |ω| < ωc وH(ejω) = 0 غير كده، وبعدين تلاقي h[n] المقابل بالـ inverse DTFT.

أزواج DTFT المنتشرة

فيه أزواج DTFT بتتكرّر طول الوقت في الـ DSP. وإنك تحفظها — أو تقدر تطلّعها بسرعة — بيوفّر حسابات كتير.

الـ unit impulse
\delta[n] \xrightarrow{\text{DTFT}} 1 \quad (\text{flat spectrum for all }\omega)
الـ unit impulse δ[n] الـ spectrum بتاعها مفرود (white) — نفس الطاقة عند كل الـ frequencies. وعشان كده هي signal الاختبار المثالية لأنظمة LTI.
الـ exponential الـ causal
a^n u[n] \xrightarrow{\text{DTFT}} \frac{1}{1 - a\,e^{-j\omega}}, \quad |a| < 1
الـ exponential الـ causal a^n u[n] (مع |a| < 1 عشان التقارب) بتتحوّل لـ frequency response rational. والـ magnitude بيوصل لقمته قريب من ω = 0 لقيم a حقيقية موجبة وقريب من ω = π للقيم السالبة.
الـ rectangular window (الـ filter المثالي)
H(e^{j\omega}) = \begin{cases} 1 & |\omega| \leq \omega_c \\ 0 & \omega_c < |\omega| \leq \pi \end{cases} \xrightarrow{\text{IDTFT}} h[n] = \frac{\omega_c}{\pi}\operatorname{sinc}\!\left(\frac{\omega_c n}{\pi}\right)
الـ ideal low-pass filter الـ spectrum بتاعه مستطيل (1 لـ |ω| ≤ ωc، و0 غير كده). والـ inverse DTFT بتاعه هو sequence الـ sinc الممتدة للانهاية، وعشان كده لازم تتقصّ ويتطبّق عليها window في التطبيقات العملية.

القيد: الـ frequency المستمرة

الـ DTFT رائع رياضيًا بس مش مريح في الحساب. خرجه X(ejω) دالة مستمرة في ω — بتاخد عدد لانهائي من القيم. والكمبيوتر الرقمي ميقدرش يخزّن أو يعالج غير مجموعة محدودة من الأرقام. فمينفعش تمثّل أو تحسب الـ DTFT الكامل على الكمبيوتر من غير تقريب أو sampling.

المشكلة التانية هي الكفاءة. حتى حساب X(ejω) عند frequency واحدة ω0 محتاج جمع على كل الـ N sample بتوع x[n]، يعني O(N) لكل نقطة frequency. والحساب عند K نقطة frequency بيكلّف O(NK) — كتير جدًا على الـ signals الطويلة.

ليه الـ DTFT لوحده مش كفاية

الـ DTFT بيحوّل sequence في الزمن المتقطع لدالة frequency مستمرة. والأنظمة الرقمية محتاجة تمثيل frequency متقطع — مجموعة محدودة من الأرقام — عشان يتحسب. والحل هو إنك تاخد samples من الـ DTFT عند N نقطة على مسافات متساوية.

الـ sampling للـ DTFT: الـ DFT

لو حسبنا الـ DTFT عند N frequency على مسافات متساوية ωk = 2πk/N لـ k = 0, 1, …, N−1، بيطلعلنا الـ discrete Fourier transform (تحويل فورييه المتقطع) أو DFT:

تعريف الـ DFT
X[k] = \sum_{n=0}^{N-1} x[n]\,e^{-j2\pi kn/N}, \quad k = 0, 1, \ldots, N-1
X[k] هو الـ DFT للـ sequence x[n] اللي فيها N نقطة. كل bin k بيقابل الـ frequency ωk = 2πk/N راديان/sample، أو fk = k·fs/N هرتز. والـ DFT متقطع في الزمن والـ frequency مع بعض — بيتحسب بالكامل.

الـ DFT هو الـ DTFT متاخد منه samples عند N نقطة على مسافات متساوية على دايرة الوحدة. والأهم إنه تحويل محدود وبيتعكس: N رقم مركّب داخلين وN رقم مركّب طالعين، والـ sequence الأصلية بترجع بالظبط بالـ inverse DFT. وده اللي خلّاه العمود الفقري لتحليل الـ spectrum بالحساب.

بس الـ sampling للـ DTFT في الـ frequency ليه تمن. زي ما الـ sampling في الزمن بيعمل periodicity في الـ frequency (الـ aliasing)، الـ sampling في الـ frequency بيعمل periodicity في الزمن — الـ DFT بيعامل x[n] من غير ما يقول كأنها دورة واحدة من signal دورية. والطبيعة الـ circular (الدورية) دي للـ DFT ليها نتايج مهمة على الـ windows والـ zero-padding والـ circular convolution، وكلهم هنستكشفهم في الدروس الجاية.

الدرس الجاي بيدخل في صيغة الـ DFT، ومعنى كل frequency bin، والـ frequency resolution، والـ DFT كعملية matrix — وبيبني الأدوات الحسابية لتحليل الـ spectrum.

أهم اللي اتعلّمته
  • كل signal مجموع موزون من الـ sinusoids؛ والـ frequency domain بيكشف التفكيك ده، فبيخلّي تصميم الـ filters وتحليل الـ noise طبيعي وبديهي.
  • الـ DTFT بيحوّل الـ sequence في الزمن المتقطع x[n] لدالة مستمرة دورية بدورة 2π هي X(ejω) في الـ frequency الزاوية المتطبّعة ω (راديان/sample).
  • الـ frequency المتطبّعة ω = π بتقابل الـ Nyquist frequency fs/2؛ والعلاقة هي ω = 2πf/fs.
  • الـ convolution في الزمن بيساوي الضرب في الـ frequency — أساس الـ filtering لأنظمة LTI في الـ frequency domain.
  • الـ DTFT مستمر في الـ frequency فمبيتحسبش على طول؛ والماكينة الرقمية محتاجة تمثيل frequency محدود ومتقطع.
  • الـ sampling للـ DTFT عند N نقطة على مسافات متساوية بيطلّع الـ DFT: X[k] = Σ x[n] e−j2πkn/N، وده بيتحسب وبيتعكس بالكامل.
  • الـ DFT بيعامل x[n] من غير ما يقول كـ signal دورية بدورة N — خاصية أساسية وراها كل اعتبارات الـ windows والـ zero-padding.
اللي فات طرق الـ inverse Z-transform (التحويل العكسي لـ Z) نظرة عامة على الموديول اللي بعده تعريف الـ DFT (تحويل فورييه المتقطع) وتفسيره