DSP 101
M6 · L3
الوحدة 6 — الـ Fast Fourier Transform
الـ FFT عمليًا

أحجام قوى الـ 2، والـ zero-padding، وتحسينات الـ signal الحقيقية، والـ filtering بالـ overlap-add، والمكتبات اللي بتخلّي ده كله سريع — القرارات الهندسية ورا أي FFT ناجح في الواقع.

1 / 9
DSP 101
M6 · L3
القاعدة الذهبية
استخدم دايمًا قوى الـ 2

الـ radix-2 مبيشتغلش غير لما N = 2^m. والمكتبات متظبطة جامد للأحجام دي. الاختيارات المنتشرة:

256
latency قليلة
1024
صوت عام
4096
LTE / 5G
2 / 9
DSP 101
M6 · L3
الحجم المناسب
الـ zero-padding للقوة اللي بعدها

block فيه 700 sample؟ ضيف 324 صفر ← 1024. والـ padding بيعمل interpolation للـ spectrum (bins أكتر) بس مبيحسّنش الـ frequency resolution الحقيقية.

حقيقة الـ resolution
الـ resolution بتحدّدها كمية الـ samples الفعلية M، مش حجم الـ FFT. بيانات أكتر = resolution أحسن.
3 / 9
DSP 101
M6 · L3
مكسب 2× ببلاش
FFT الـ signal الحقيقية

الدخل الحقيقي x[n] بيطلّع خرج conjugate symmetric: X[N−k] = X*[k]. الـ bins من 0 لـ N/2 بس هي الفريدة. حط signalين حقيقيين N/2 في FFT مركّب واحد — بيقسم الشغل على اتنين.

الـ conjugate symmetry
X[N-k] = X^*[k]
4 / 9
DSP 101
M6 · L3
filtering الـ signals الطويلة
طريقة الـ overlap-add
  • قسّم x[n] لـ blocks مش متداخلة طولها L
  • اعمل padding لكل block لحد N = L + M − 1 (قوة الـ 2 اللي بعدها)
  • FFT للـ block، اضرب في H[k]، IFFT لورا
  • اجمع آخر M−1 sample على أول الـ block اللي بعده
  • النتيجة = الـ linear convolution بالظبط مع h[n]
  • التكلفة: O(N log N) لكل block — مش O(N·M)
5 / 9
DSP 101
M6 · L3
الطريقة الأخت
طريقة الـ overlap-save

الـ blocks بتتداخل بمقدار M−1 sample دخل. وبعد كل IFFT، أول M−1 sample من الخرج بتترمي (آثار الـ circular convolution). مفيش خطوة جمع — مفضّلة في الـ hardware.

OLA قصاد OLS
خرج متطابق لو اتنفّذوا صح. الـ OLS بيرمي؛ والـ OLA بيجمع. والاتنين O(N log N).
6 / 9
DSP 101
M6 · L3
استخدم الـ ecosystem
مكتبات الـ FFT والـ hardware
  • FFTW — بتظبط نفسها لأي processor؛ المعيار الذهبي لـ C/C++
  • Intel oneMKL / IPP — متظبطة بـ AVX-512، الأسرع على Intel
  • NumPy rfft / SciPy — Python؛ بيستخدم pocketfft
  • cuFFT / rocFFT — مئات الـ FFTs متوازية على الـ GPU
  • ARM Ne10، Apple Accelerate — NEON / vDSP للموبايل
  • ASICs — FFT فيه 1024 نقطة في أقل من ميكروثانية
7 / 9
DSP 101
اختبار سريع

شوف إيه اللي ثبت

أربع أسئلة من الدرس ده. جاوب عشان تشوف السبب — الشرح بيظهر سواء جاوبت صح أو غلط. ونتيجتك مش بتتحفظ.

السؤال 1 من 0
النتيجة 0/0

8 / 9
DSP 101
M6 · L3
أهم النقط
اتعلّمت إيه
  • استخدم دايمًا N قوة لـ 2 — اعمل zero-padding للقوة اللي بعدها
  • الـ padding = bins أكثف، مش resolution أحسن
  • دخل حقيقي ← استخدم rfft؛ الـ conjugate symmetry ← أسرع 2×
  • OLA / OLS: filtering بـ O(N log N) للـ signals الطويلة
  • FFTW، MKL، cuFFT، Accelerate — مكتبات دايمًا، مش code بالإيد
  • مسرّعات الـ hardware: FFT في أقل من ميكروثانية في دواير الاتصالات
اقرا المقالة كاملة ←
9 / 9
1 / 8 صامت