2012-01-09 8 views
5

में एफएफटी मैंने मैटलैब में और जावा में jtransforms लाइब्रेरी का उपयोग करके एफएफटी किया लेकिन परिणाम थोड़ा अलग हैं।मैटलैब और जावा

Matlab results: 
-0.0530528652679544 
-0.00775535711930750 + 0.0281791646147104i 
-0.0304104457750988 - 0.209776156064443i 
0.266945753193636 + 0.200338044445226i 

Jtransforms results: 
-0.05305448436232618 
-0.007755593801247046 + 0.028180024600812384 
-0.03041137385657606 -0.20978255812004887 
0.26695389998013486 + 0.20034415846373468 

क्या परिणाम अलग हैं या मैटलैब सिर्फ मूल्यों को गोल कर रहा है?

+1

थोड़ा अलग से अधिक। 32-बिट फ्लोटिंग पॉइंट और अन्य 64-बिट का उपयोग कर एक लाइब्रेरी है? –

उत्तर

7

एफएफटी करने के लिए several different algorithms हैं। सिद्धांत रूप में वे सभी बराबर हैं, लेकिन व्यावहारिक रूप से, floating-point arithmetic के साथ संयुक्त, परिणाम थोड़ा अलग होंगे। यहां तक ​​कि यदि मूल एफएफटी एल्गोरिदम समान है, तो कार्यान्वयन के विवरण जैसे सारांश के क्रम में अंतर हो सकता है। अनुकूलन झंडे के आधार पर कई modern processors do this भले ही आप कुछ भी विशेष न करें।

आपके परिणामों में, अंतर लगभग 5 वें महत्वपूर्ण अंक हैं। यह एक काफी छोटा अंतर है। आप परिणामों को उलटा करने की कोशिश कर सकते हैं (मैटलैब और जेट्रांसफॉर्म आईएफटी दोनों का उपयोग करके) यह देखने के लिए कि एक या दूसरा ट्रांसफॉर्म स्पष्ट रूप से अधिक सटीक है या नहीं।

1

अंतर डबल सटीक फ़्लोटिंग पॉइंट अंकगणितीय के लिए सामान्य संख्यात्मक परिशुद्धता मुद्दों से बड़े होते हैं। ऐसा लगता है कि एफएफटी में से एक की तरह कुछ छोटे फ्लोट अंकगणित या डेटा का उपयोग कर रहा है, और परिणाम को युगल के रूप में प्रिंट करना (जो उन सभी अतिरिक्त अंकों को बहुत बकवास बनाता है)।

+0

इस मामले में ऐसा हो सकता है या नहीं हो सकता है, लेकिन कम से कम एफपीए परिशुद्धता के लिए "सामान्य" जैसी कोई चीज़ नहीं है। विशेष रूप से, जमाकर्ताओं/एकीकृतकर्ताओं (जो एफएफटी एल्गोरिदम अनिवार्य रूप से होते हैं) में, गोल करने वाली त्रुटि लगभग असीमित रूप से जमा हो सकती है। –