حساب تكلفة تحويل DFT
يمنحنا تحويل فورييه المتقطع (DFT) كل ما نحتاجه: تحويلاً دقيقاً وعكسياً بين مجال الزمن ومجال التردد، ويعمل بشكل صحيح لأي طول N من الإشارة. فما المشكلة إذن؟ المشكلة هي تكلفة الحساب — تحديداً عدد عمليات الضرب والجمع التي يجب على الحاسوب تنفيذها لحساب جميع قيم الخرج البالغة N.
فكّر في التعريف: كل قيمة خرج X[k] تتطلب جمع N حاصل ضرب مركّب من الصورة x[n]·W_N^{nk}. أي N عملية ضرب مركّب وN عملية جمع مركّب لكل bin. وبما أن هناك N من الـ bins، فإن التكلفة الإجمالية تتناسب مع N².
وضع أرقام على مقدار البطء
قد تبدو فئات التعقيد المجردة كـ O(N²) غامضة. لنضع أرقاماً ملموسة على المشكلة. يمكن للمعالج الحديث تنفيذ نحو 10⁹ عملية نقطة عائمة في الثانية (1 GFLOP/s). عملية الضرب المركّب الواحدة تتطلب 4 عمليات ضرب حقيقي و2 عملية جمع — حوالي 6 عمليات حقيقية. لـ N قيمة خرج وN عينة دخل، يتطلب DFT المباشر تقريباً 6N² عملية حقيقية.
| طول الإشارة N | عمليات DFT (≈6N²) | الزمن @ 1 GFLOP/s | في الوقت الفعلي؟ |
|---|---|---|---|
| 64 | 24,576 | 25 µs | نعم |
| 256 | 393,216 | 0.39 ms | نعم |
| 1,024 | 6,291,456 (~6 مليون) | 6.3 ms | هامشي |
| 4,096 | 100,663,296 (~100 مليون) | 100 ms | صعب |
| 1,048,576 (2²⁰) | ~6.6 × 10¹² | ~6,600 ثانية | مستحيل |
للإشارات الصغيرة يكون DFT سريعاً بما يكفي. تأتي الأزمة عند القيم الكبيرة لـ N. معالجة الصوت بجودة CD (44,100 عينة/ثانية) بأحجام نافذة 4,096–8,192 بالكاد قابلة للإدارة. أي تطبيق يتطلب تحويلات كبيرة — تحليل طيفي عالي الدقة، أنظمة OFDM اللاسلكية، معالجة إشارات الرادار، التصوير الطبي — يصطدم بجدار صلب مع DFT المباشر.
محلل الطيف الصوتي في الوقت الفعلي عند 48 كيلوهرتز بنافذة N = 8,192 يجب أن يكمل تحويلاً واحداً كل 170 ms (عند 50% تداخل، كل 85 ms). يتطلب DFT المباشر ~4×10⁸ عملية لكل نافذة. عند 1 GFLOP/s هذا يعني 0.4 ثانية — أبطأ بمرتين من الوقت الفعلي حتى قبل أي معالجة أخرى. بدون خوارزمية أسرع، يستحيل تشغيل التطبيق.
N = 8,192: DFT ≈ 4×10⁸ عملية → 400 ms لكل نافذة (الميزانية الزمنية: 85 ms)لماذا N² تحديداً؟ نظرة أعمق
لفهم مصدر N²، تخيّل ترتيب العملية الحسابية كضرب مصفوفة في متجه. مصفوفة DFT هي W، وهي مصفوفة N×N يساوي عنصرها (k, n) القيمة W_N^{kn}. حساب X = W·x يضرب متجهاً بطول N في مصفوفة N×N — وهذا تقليدياً N² عملية ضرب-تجميع. كل صف في المصفوفة يعطي قيمة خرج واحدة؛ وكل صف يحتوي على N عنصر.
العبارة الرئيسية هي استغلال بنية W. على عكس المصفوفة العشوائية، مصفوفة DFT شديدة البنية: عناصرها هي قوى جذر واحد من الوحدة W_N = e^{−j2π/N}. تتكرر القيم بشكل دوري، والعديد من العناصر مترابطة بانقلاب إشارة بسيط. خوارزمية أذكى يمكنها استخدام هذه البنية لتجنب حساب نفس الحاصلات أكثر من مرة — وهذا بالضبط ما يفعله تحويل فورييه السريع.
عندما لا يكون الحل في شراء أجهزة أسرع
رد الفعل الطبيعي هو: "فقط اشترِ أجهزة أسرع." لكن نمو O(N²) يتفوق على تحسينات الأجهزة. قانون مور يضاعف سرعة المعالج تقريباً كل 18 شهراً. لكن إذا تضاعف حجم الإشارات أيضاً مع تزايد متطلبات التطبيقات، فإن N² يعني أن مضاعفة N ترفع التكلفة أربعة أضعاف. يجب أن تتحسن الأجهزة 4× فقط لمواكبة زيادة 2× في حجم الإشارة — وهي معركة خاسرة.
الفكرة الرئيسية: استغلال الدورية والتناظر
الطريق إلى خوارزمية أسرع يبدأ بملاحظتين حول عامل الـ twiddle W_N^{kn} = e^{−j2πkn/N}:
هاتان الخاصيتان تعنيان أنه في الحساب الكامل N²، تُحسب كثير من الحاصلات أكثر من مرة. إذا استطعنا إعادة تنظيم الحساب بذكاء بحيث يُقيَّم كل حاصل فريد مرة واحدة فقط، يمكننا تقليل إجمالي العمل بشكل جذري. عدد قيم عامل الـ twiddle الفريدة هو N فقط، لا N² — لكن DFT المباشر يحسب N² حاصل ضرب مرجّح بعامل twiddle. نسبة التكرار هي N.
إزالة هذا التكرار هي الفكرة الجوهرية لتحويل فورييه السريع. بتقسيم DFT بشكل متكرر — أولاً إلى تحويلات فرعية للعينات ذات الإندكس الزوجي وتلك ذات الإندكس الفردي، ثم تكرار التقسيم — تخفّض الخوارزمية عدد عمليات الضرب المركّب من N² إلى (N/2)·log₂ N. وهذا الثنائي هو الاصطلاح الذي تقوم عليه كل أرقام التسريع في هذه الدورة: نحسب عمليات الضرب المركّب، فيكون التسريع هو النسبة N² ÷ (N/2)·log₂ N = 2N / log₂ N. عند N = 4,096 هذا تخفيض بعامل 683، وعند N = 1,048,576 يصل التخفيض إلى 100,000 تقريباً. الفرق بين "مستحيل في الوقت الفعلي" و"سريع بشكل تافه" على الأجهزة العادية.
لـ N = 1,024 (حجم نافذة صوتية شائع)، يتطلب DFT المباشر N² = 1,048,576 عملية ضرب مركّب. أما الـ FFT فلا يحتاج سوى (N/2)·log₂ N = 5,120 — تسريع بمقدار 205×. وعند N = 4,096 يصبح التسريع 683×، وعند N = 1,048,576 يصل إلى ~100,000×. هذا ليس تحسيناً هندسياً؛ بل خوارزمية مختلفة جذرياً.
DFT المباشر: O(N²) → FFT: O(N log₂ N) — نفس النتيجة الرياضية، عمليات أقل بكثير- يحسب DFT المباشر N قيمة خرج، كل منها يتطلب N عملية ضرب — تكلفة إجمالية O(N²) تنمو تربيعياً مع طول الإشارة.
- لـ N = 1,024 يتطلب DFT المباشر ~6 مليون عملية؛ لـ N = 2²⁰ يتطلب ~6.6 تريليون — تتجاوز بكثير ميزانيات الوقت الفعلي.
- لا يمكن لتحسينات الأجهزة التغلب على نمو O(N²): مضاعفة طول الإشارة يربّع العملية الحسابية، فالمعالجات الأسرع تؤخر الاختناق فحسب.
- التطبيقات الحقيقية — OFDM اللاسلكي، التصوير الطبي، الرادار — تتطلب تحويلات على آلاف إلى ملايين النقاط في ظل قيود زمنية صارمة، مما يجعل DFT المباشر غير عملي تماماً.
- مصفوفة DFT ليست مصفوفة عشوائية؛ عناصرها هي قوى جذر واحد من الوحدة W_N = e^{−j2π/N}، مما يخلق تكراراً هائلاً في الحساب المباشر.
- عامل الـ twiddle W_N^{kn} دوري (بدورة N في k وn) ولديه تناظر W_N^{k+N/2} = −W_N^k — خصائص يمكن لخوارزمية ذكية استغلالها لإعادة استخدام النتائج الوسيطة.
- إزالة تكرار عامل الـ twiddle يخفض عدد العمليات من N² إلى (N/2)·log₂ N — تحويل فورييه السريع، الذي يُستكشف في الدرس 6.2.