2012-06-26 10 views
5

आरप्रोफ का उपयोग करके डीटी पैकेज में डीटीटी को आर कोड के एक टुकड़े में मुख्य अपराधी बताया गया जो काफी धीरे-धीरे चल रहा था। आंकड़े पैकेज में एफएफटी के लिए इसे स्वैप करना (जो एक ही परिवर्तन नहीं है, लेकिन गणना करने के लिए एक ही समय लेना चाहिए) मेरे रन टाइम नाटकीय रूप से सुधार हुआ। वास्तव में मेरी आरप्रोफ लाइनों में से 2/3 पहले डीटीसी कॉल थे और स्विच करने के बाद लगभग 600 की केवल 3 लाइनें एफएफटी कॉल थीं।आर में * फास्ट * डीसीटी (असतत कोसाइन ट्रांसफॉर्म) कैसे करें?

क्या डीटी पैकेज में डीटीटी कार्यान्वयन तेजी से असतत चौकोर परिवर्तन का उपयोग नहीं किया गया है? यदि हां, तो क्या कोई पैकेज है जिसमें एक है? (मुझे पता है कि कोई डेटा को दोगुना कर सकता है, फिर उन एफएफटी गुणांक से डीसीटी के लिए गुणांक निकालें, लेकिन एक सीधा तेज़ डीटी निश्चित रूप से अच्छा होगा, और वहां वास्तव में एक होना चाहिए)।

+0

शीर्षक में नकारात्मक (और इस प्रकार शैतान के वकील/लड़ाकू पोस्टर होने के लिए दिखाई देने) से बचने की कोशिश करें ;-) –

+0

'लाइब्रेरी (एसओएस); findFn ("फास्ट फूरियर कोसाइन ट्रांसफॉर्म") '' वावेथ्रेश 'में' rfft' फ़ंक्शन दिखाता है। ऐसा लगता है कि यह पैकिंग/अनपॅकिंग तंत्र द्वारा काम करता है - * संख्यात्मक व्यंजनों की जंगली स्मृति के आधार पर * यह शायद अधिक कुशलतापूर्वक किया जा सकता है, लेकिन शायद यह उपयोगी है? –

+0

मैं समझता हूं कि डीटीटी के लिए तेज गति का उपयोग न करने के लिए क्या प्रेरणा हो सकती है। एक, तेज़ डीटीटी लिखना बहुत कठिन है। इसके अलावा आकार का एक वेक्टर एन तेजी से डीटीटी की गति एन के प्रमुख कारक पर निर्भर करता है। इसलिए कुछ डीटीटी संस्करण केवल वेक्टर को प्रदर्शन के लिए 2 की अगली सबसे बड़ी शक्ति के लिए पैड करेंगे, लेकिन फिर लौटे गुणांक वास्तव में नहीं हैं " "वेक्टर के डीसीटी गुणांक क्योंकि वे पैडिंग से प्रभावित होते हैं। साथ ही, ऐसी स्थितियों में जहां एन को पहली जगह में 2 की शक्ति के रूप में चुना जा सकता है, तेज़ संस्करण होने से पागल प्रदर्शन में वृद्धि होती है। –

उत्तर

7

कोई तेज़ डीटीसी प्रतीत नहीं होता है, लेकिन आंकड़े पैकेज में एक एफएफटी (फास्ट फूरियर ट्रांसफॉर्म) है, इसलिए यहां आप एफएफटी का उपयोग करके तेज़ डीटीटी प्राप्त करने के बारे में कैसे जा सकते हैं।

इसे अपने जोखिम पर उपयोग करें। मैंने इसकी गंभीर जांच नहीं की है। मैंने इसे विभिन्न आकारों के कुछ वैक्टरों पर चेक किया और इसने पैकेज पर डीटीपी के समान परिणाम दिए। यदि कोई मुझे डीटीटी से आउटपुट की तुलना करके मुझे दोबारा जांचना चाहता है तो ऐसा करने के लिए स्वतंत्र महसूस करें और अपने परिणाम पोस्ट करें।

अपना वेक्टर लें और इसे एक वेक्टर में दो बार तक बढ़ाएं: यदि आपका वेक्टर v = (1,2,3) है तो प्रविष्टियों को w = (1,2,3,3,2, 1)। ऑर्डरिंग पर ध्यान दें। यदि आपका वेक्टर v = (1,2,4,9) है तो प्रविष्टियों को w = (1,2,4,9,9,4,2,1)

एन की लंबाई होने दें आपका मूल वेक्टर (इससे पहले कि आप इसकी लंबाई दोगुनी हो)।

फिर .5 * fft (डब्ल्यू)/exp के पहले एन गुणांक (जटिल (काल्पनिक = pi/2/एन) * (सेक (2 * एन) -1)) कंप्यूटिंग डीसीटी से सहमत होना चाहिए (v) इसे छोड़कर लगभग सभी मामलों में नाटकीय रूप से तेज़ होना चाहिए।

स्पीड विचार। यदि आप प्रमुख कारक एन हैं तो तेज़ डीटीटी की गणना करने में लगने वाला समय उन प्रमुख कारकों के लिए धीमी गति से करने के लिए होता है। तो अगर एन 2^के है तो यह लंबाई के दो के वेक्टर पर एक अलग अलग धीमी डीटीसी रूपांतरित करने जैसा है, इसलिए वास्तव में तेज़ है। यदि एन प्रमुख है (सबसे खराब स्थिति परिदृश्य) तो कोई गति नहीं है। सबसे बड़ी गति वेक्टरों पर है जो लंबाई में दो की शक्ति हैं।

नोट: ऊपर दिया गया आर कोड अविश्वसनीय रूप से असभ्य दिखता है, तो मुझे बताएं कि क्या हो रहा है। सही तरीके से लंबाई को दोगुना करने के बाद, आपको प्राप्त होने वाले एफएफटी के पहले एन गुणांक लगभग सही चीज़ हैं। हालांकि गुणांक को थोड़ा सा tweaked की जरूरत है। चलो ई^(पीआई * i/2/एन) के लिए खड़े हो जाओ। अकेले पहले गुणांक छोड़ दें। पी द्वारा दूसरे गुणांक को विभाजित करें, पी^2 द्वारा तीसरे को विभाजित करें, चौथे को पी^3, आदि द्वारा विभाजित करें ... फिर सभी को गुणांक 2 (पहले एक सहित) को गुणांक के साथ सहमत करने के लिए आर का उपयोग करता है डीटीसी

यह पैकेज डीटी में डीटीसी फ़ंक्शन का उपयोग करने के समान ही देना चाहिए, लेकिन लगभग सभी मामलों में नाटकीय रूप से तेज़ होना चाहिए।

संबंधित मुद्दे