قسّم DFT فيه N نقطة لـ DFTين من N/2 نقطة، وكرّر بشكل recursive، ونزّل عمليات الضرب المركّب من N² لـ (N/2)·log₂N — تسريع بيوصل لـ 100,000× للـ signals الكبيرة.
افصل samples الدخل لـ اللي الـ index بتاعها زوجي (x[0], x[2], x[4], …) والفردي (x[1], x[3], x[5], …). كل مجموعة بتعمل DFT من N/2 نقطة. والدمج بيتم عن طريق الـ twiddle factors (معاملات التلوين).
ضرب مركّب واحد (الـ twiddle factor W_N^k)، وجمعين، وخرجين. ولأن W^{k+N/2} = −W^k، بناخد X[k] وX[k+N/2] مع بعض بضرب واحد بس — وهنا سر الكفاءة.
كمّل قسمة على اتنين: N → N/2 → N/4 → … → 2. وفي القاع، الـ DFT اللي فيه نقطتين مجرد butterfly واحدة بـ W = 1. وشجرة الـ recursion فيها log₂ N مستوى، كل واحد محتاج N/2 butterfly.
التسريع بيكبر مع N — وده بيخلّي الـ FFT متفوّق أكتر وأكتر في التحويلات الكبيرة اللي التطبيقات الحديثة محتاجاها.
التقسيم الزوجي-الفردي المتكرّر بيعيد ترتيب الـ samples بـعكس الـ index بتاعها في الـ binary. وبعد الـ permutation، الـ log₂ N مرحلة butterfly بيشتغلوا in-place — من غير memory زيادة غير الـ array الأصلية.
- الـ radix-2 DIT: تقسيم لنصّين؛ (N/2)log₂N ضرب — الأبسط
- الـ radix-2 DIF: تقسيم الخرج؛ نفس العدد، ترتيب bit-reversed
- الـ radix-4: تقسيم رباعي — 25% ضرب أقل
- الـ split-radix: radix-2 للزوجي وradix-4 للفردي — أقل حد نظري
- FFTW / Intel IPP: بيختاروا أحسن خوارزمية للـ hardware لوحدهم
- كلهم في جوهرهم كولي-توكي — فرّق، اضرب في الـ twiddles، ادمج
- قسّم الـ N نقطة لنصّين زوجي/فردي — DFTين من N/2 نقطة
- الـ butterfly: ضرب واحد + جمعين → خرجين (W^{k+N/2} = −W^k)
- log₂ N مرحلة × N/2 butterfly = O(N log N) في الإجمالي
- N = 1,024: 5,120 قصاد 1,048,576 ضرب — أسرع 205×
- in-place عن طريق الـ bit-reversal permutation — memory O(N)
- الـ split-radix بيوصل لأقل عدد معروف من الضرب