एंबेडेड अप्लायन्स के लिए फिक्स्ड पॉइंट ट्रिग्नोमेट्री


9

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

मैं एप्लिकेशन के लिए एक कोर्टेक्स M3 का उपयोग करने के बारे में सोच रहा हूं, इसलिए मैं अनुप्रयोगों को ज़िप्पी रखने के लिए जितना संभव हो सके फ्लोटिंग पॉइंट से दूर रहना चाहता हूं।


दो विचार: रोटेशन का एक पारंपरिक आदिम कार्यान्वयन CORDIC एल्गोरिदम है। आप यह भी देख सकते हैं कि क्या आपका विक्रेता अब एम 3 के साथ एक कॉर्टेक्स एम 4 प्रतिस्पर्धी प्रदान करता है, जिस पर आप विचार कर रहे थे।
क्रिस स्ट्रैटन

4
आप लुकअप टेबल का उपयोग क्यों नहीं करना चाहते हैं? यह पाप और ब्रह्मांड के लिए बहुत अच्छा काम करता है। पाप और कॉस को एल्गोरिथ्म में करने में अधिक समय लगने वाला है। एकमात्र लाभ कम प्रोग्राम मेमोरी स्पेस का उपयोग किया जा सकता है, लेकिन क्या यह आपके आवेदन में वास्तव में मायने रखता है?
ओलिन लेथ्रोप

@ ओलिनथ्रॉप, मैं यह जानना चाहता हूं कि दूसरों ने क्या पाया है: शायद मेमोरी स्पेस को बचाते हुए थोड़ी त्रुटि के साथ समस्या को हल करने का कुछ कुशल तरीका मौजूद है जो मुझे नहीं मिला है? जो मुझे पता है (और मैं गलत हो सकता है) से, मानक पुस्तकालयों के साथ एल्गोरिदम को हल करने के लिए सबसे बड़ी समस्या यह है कि सभी गणित फ्लोटिंग पॉइंट में किए जाते हैं, और एफपीयू के बिना सभी को संख्यात्मक रूप से किया जाना है, जो कि भयानक रूप से अक्षम है। .. लुक-अप तालिकाओं के साथ सबसे बड़ी परेशानी यह है: मुझे कितना सटीक होना चाहिए? और अगर उस सटीकता में परिवर्तन होता है, तो क्या मेरे पास अभी भी पर्याप्त प्रोग्राम मेमोरी होगी?
बॉब

आपको कितनी सही जरूरत है? एक मामूली आकार देखने की मेज सबसे एम्बेडेड पाप / कॉस जरूरतों के लिए काफी पर्याप्त है। 1025 तालिका प्रविष्टियों के साथ, आपको 4096 कोण रिज़ॉल्यूशन मिलता है। उस बिंदु पर, रैखिक अंतःक्षेपण आपको तालिका प्रविष्टियों के बीच अच्छी सटीकता प्रदान करता है। लगता है कि साइन लुकिंग के बारे में बहुत सारे गलत मिथक हैं। अधिक विवरणों के लिए मेरे उत्तर पर Electronics.stackexchange.com/a/16516/4512 देखें।
ओलिन लेथ्रोप

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

जवाबों:


6

एम्बेडेड अनुप्रयोगों में त्रिकोणमिति करने का एक अच्छा तरीका यह है कि आप जिन कार्यों की आवश्यकता है, उनके लिए बहुपद सन्निकटन का उपयोग करें । कोड कॉम्पैक्ट है, डेटा में कुछ गुणांक होते हैं, और केवल आवश्यक संचालन को गुणा और जोड़ना / घटाना होता है। कई एम्बेडेड सिस्टम में अच्छा प्रदर्शन देने वाले हार्डवेयर गुणक होते हैं।


1
क्या किसी ने इसका एक संस्करण जारी किया है जो सी में एम्बेडेड बिंदु निर्देशों का उपयोग न करते हुए एम्बेडेड अनुप्रयोगों के लिए अनुकूलित है? बहुपद सन्निकटन के दोनों ओर उच्च त्रुटि त्रुटि को कम करने के लिए विभिन्न क्षेत्रों के लिए विभिन्न बहुपद का उपयोग करने के लिए चाल का उपयोग करने के लिए उधार देती है, या कुछ अन्य चाल ...
बॉब

1
जेनेरिक C सीधे गैर-पूर्णांक फिक्स्ड-पॉइंट डेटा प्रकार और संचालन का समर्थन नहीं करता है, इसलिए इस डेटा प्रकार के लिए अनुकूलन काफी प्लेटफ़ॉर्म-विशिष्ट होते हैं। उदाहरण के लिए, अधिकांश डीएसपी सीधे उनके हार्डवेयर में एक निश्चित बिंदु वाले आंशिक डेटा प्रकार का समर्थन करते हैं। सी से, आप इसे मालिकाना पुस्तकालयों के माध्यम से एक्सेस करते हैं।
डेव ट्वीड


जेनेरिक C _Fract डेटा प्रकार के माध्यम से समर्थन प्राप्त कर रहा है, लेकिन अधिकांश माइक्रोकंट्रोलर कार्यान्वयन में विक्रेता-विशिष्ट पुस्तकालय हैं। मैं अपने सभी निर्धारित बिंदुओं की जरूरतों के लिए libmathq15 का उपयोग करता हूं। अब तक काम किया है।
थोड़ा

_Fractबकवास IMHO का एक टुकड़ा है; मुझे इस तथ्य से नफरत है कि यह सी समिति द्वारा "मानकीकृत" था। यह आपको सब कुछ के लिए Q15 या Q31 का उपयोग करने के लिए मजबूर करता है, जो कई स्थितियों में समझ में नहीं आता है, और उन स्थितियों के लिए बिना फंसे आपको छोड़ देता है।
जेसन एस

3

क्या आप इसके लिए निर्धारित बिंदु कॉर्टेक्स पुस्तकालयों का उपयोग करने के विरोध में हैं?

q31_t arm_sin_q31 (q31_t x) 531
डेटा के लिए त्रिकोणमितीय साइन फ़ंक्शन के लिए तेज़ सन्निकटन।

से:

सीएमएसआईएस-डीएसपी: विभिन्न डेटा प्रकारों के लिए 60 से अधिक कार्यों के साथ डीएसपी लाइब्रेरी संग्रह: फिक्स-प्वाइंट (आंशिक q7, q15, q31) और एकल सटीक फ़्लोटिंग-पॉइंट (32-बिट)। पुस्तकालय Cortex-M0, Cortex-M3 , और Cortex-M4 के लिए उपलब्ध है।

यह द्विघात प्रक्षेप के साथ एक लुकअप तालिका का उपयोग करता है, लेकिन यह बहुत तेज़ है। आप इसे तेज गति लेकिन अधिक त्रुटि के लिए रैखिक प्रक्षेप में अनुकूलित कर सकते हैं।

यह भी ध्यान दें कि यहां तक ​​कि कॉर्टेक्स एम 4 में भी एफपीयू नहीं है। मैंने उन्हें "M4F" कहा है अगर वे करते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.