मुझे लगता है कि यह एक पारंपरिक सीपीयू, एक कोर, एक साधारण धागा, कोई फैंसी हार्डवेयर निष्पादित करने पर किया जा रहा है। अगर वहाँ चल रहा है कि अधिक से अधिक है, यह शायद एक सरल प्रणाली के लिए तर्क के लिए समायोजन के साथ जिम्मेदार हो सकता है। संभावनाओं की एक श्रृंखला को कवर करने के लिए या तो एक विशिष्ट प्रणाली, या पूरी पाठ्यपुस्तक या शोध पत्र के बिना बहुत कुछ नहीं कहा जा सकता है।
मुझे पावर-टू-साइज़ की चिंता नहीं होगी। इससे कोई फर्क नहीं पड़ता। तितली इकाइयों के साथ एफएफटी एल्गोरिदम और सभी जो कि 3 के कारकों के लिए मौजूद हैं, या कोई छोटी संख्या नहीं है, केवल 2. प्राइम-आकार डेटा श्रृंखला के लिए चतुर एल्गोरिदम भी हैं। मैं विकिपीडिया को इसके अप्रभावी स्वभाव के कारण उद्धृत करना पसंद नहीं करता , लेकिन फिर भी:
सभी N के लिए O (N log N) जटिलता के साथ FFTs भी हैं, यहां तक कि प्राइम एन के लिए भी
मनमाने ढंग से एन के लिए एफएफटी का कार्यान्वयन जीपीएलआईडी लाइब्रेरी एफएफटीडब्ल्यू में पाया जा सकता है ।
गंभीर इंजीनियरिंग के मामले में एकमात्र भरोसेमंद तरीका निर्माण और माप करना है, लेकिन हम निश्चित रूप से सिद्धांत से एक विचार प्राप्त कर सकते हैं, चर के साथ संबंधों को देखने के लिए। हमें अनुमान है कि प्रत्येक विधि के लिए कितने अंकगणितीय ऑपरेशन शामिल हैं।
बहु सीपीयू पर इसके अलावा गुणा अब भी धीमा है, भले ही यह अंतर पिछले कुछ वर्षों में काफी कम हो गया हो, तो चलिए सिर्फ गुणन को गिनते हैं। इसके अलावा लेखांकन के लिए थोड़ा और अधिक सोच और सामान रखने में मदद करता है।
एक सीधा कनवल्शन, वास्तव में गुणन कर्नेल का उपयोग करके गुणा करना और जोड़ना, प्रत्येक आउटपुट पिक्सेल के लिए दोहराता है, W² · K² गुणा की आवश्यकता होती है, जहाँ W छवि के एक तरफ पिक्सेल की संख्या है (सादगी के लिए वर्ग मान), और K का आकार है एक तरफ पिक्सेल के रूप में, सजा कर्नेल। इनपुट छवि के कर्नेल और समान-आकार वाले हिस्से का उपयोग करके एक आउटपुट पिक्सेल की गणना करने के लिए यह K pixel गुणन लेता है। सभी आउटपुट पिक्सल के लिए दोहराएं, जो इनपुट छवि के समान है।
(N mults ) सीधा = W² · K m
फूरियर अंतरिक्ष में काम करने के लिए, हमें फूरियर को छवि को बदलना चाहिए। यह प्रत्येक स्तंभ के लिए अलग से एक FFT लागू करके और फिर प्रत्येक पंक्ति में किया जाता है। N डेटा बिंदुओं के लिए FFT लगभग 2N · लॉग (N) गुणा लेता है; हम चाहते हैं कि एन डब्ल्यू डब्ल्यू हो, एक कॉलम या पंक्ति की लंबाई। यहाँ सभी लघुगण आधार दो हैं।
डब्ल्यू पंक्तियां और डब्ल्यू कॉलम हैं, इसलिए सभी एफएफटी किए जाने के बाद, हमने 2 डब्ल्यू · (2 डब्ल्यू · लॉग (डब्ल्यू)) गुणा किया है। डबल है, क्योंकि कर्नेल के फूरियर रूपांतरण से गुणा करने के बाद, हमें समझदार छवि को वापस लाने के लिए डेटा को उलटा करना होगा। यह 8W² · लॉग (W) है। बेशक, कर्नेल के फूरियर रूपांतरण से गुणा करना होगा, एक और डब्ल्यू multip गुणन। (एक बार किया गया, एक बार आउटपुट पिक्सेल प्रति पंक्ति या कुछ भी नहीं।) ये जटिल गुणन हैं, इसलिए यह 4Wations वास्तविक गुणा है।
इसलिए, जब तक कि मैं नासमझ न हो (और मैंने शायद किया) हमारे पास है
(N mults ) फूरियर = 4W m · (2 · लॉग (W) + 1)
हम चीजों को सीधा रास्ता कब देना चाहते हैं? जब K, W² · K than को 4W (· (2 · log (W) + 1) से छोटा बनाने के लिए पर्याप्त रूप से छोटा है। W common का एक सामान्य कारक आसानी से फैक्टर है। हम शायद "+1" को छोड़ सकते हैं क्योंकि हम आदर्शीकृत अनुमानों के साथ काम कर रहे हैं। +1 संभवतः वास्तविक कार्यान्वयन के सापेक्ष त्रुटियों में खो जाता है, न कि परिवर्धन, लूप ओवरहेड्स और इतने पर गिनती से। वह छोड़ देता है:
K² < 8·log(W)
यह एक आवृत्ति अंतरिक्ष दृष्टिकोण पर एक सीधा दृष्टिकोण चुनने के लिए अनुमानित स्थिति है।
ध्यान दें कि दो समान-आकार की छवियों का सहसंबंध ऐसा है जैसे कि K = W. फ़ॉयर स्पेस के कर्नेल को आकार देना हमेशा ऐसा करने का तरीका है।
यह परिष्कृत किया जा सकता है और ओवरहेड, ऑपकोड्स के पाइपलाइनिंग, फ्लोट बनाम फिक्स्ड-पॉइंट के लिए खाते में तर्क दिया जा सकता है और जीपीजीपीयू और विशेष हार्डवेयर के साथ खिड़की को बाहर फेंक दिया जा सकता है।