एक्सेलेरोमीटर पढ़ने को हेक्स से दशमलव में परिवर्तित करना


2

मेरे पास टाइम स्टैम्प के साथ एक्सेलेरोमीटर उत्पन्न हेक्स फ़ाइल है, इसमें तीन अक्षों से त्वरण डेटा है। डेटा इस तरह दिखता है:

C1 EB C1 F9 C1 C6

12:57:39.046:

41 F0 81 FA 41 C6

12:57:39.062:

01 F7 C1 FA 81 C6

12:57:39.078:  

मुझे इसे इस तरह से अलग करने की आवश्यकता है:

C1EB C1F9 C1C6 

41F0 81FA 41C6 

01F7 C1FA 81C6  

अंत में मुझे त्वरण को देखने के लिए इसे माटलाब में दशमलव में बदलने की आवश्यकता है। क्या कोई इस में मेरी मदद कर सकता है?


क्या भाषा??
केनी

1
आप हर दूसरी पंक्ति को हटाना चाहते हैं और शेष लाइनों में पहला, तीसरा और पाँचवाँ स्थान निकालना चाहते हैं? यह sed, awk, cut, या आपकी पसंदीदा स्क्रिप्टिंग भाषा के लिए एक नौकरी है, न कि इलेक्ट्रिकल डिज़ाइनर के लिए एक प्रश्न। यदि आप उस जानकारी को जनरेट करने के लिए अपने डिवाइस के फर्मवेयर को संशोधित करना चाहते हैं तो यह ऑन-टॉपिक हो सकता है, लेकिन यह संभवतः एक स्निपरफ () स्टेटमेंट के प्रारूपण को संशोधित करना होगा।
केविन वर्मर

@kenny: इस प्रारूप में मूल्यों के साथ इसकी सिर्फ एक सादा फ़ाइल, क्षमा करें मुझे नहीं पता कि यह किस भाषा में है।

@reemrevnivek: sed, awk, cut ?? क्या आप मुझे बता सकते हैं कि कैसे करें और इस हेक्स फ़ाइल से त्वरण पढ़ें?

@ दिलीप, आप इसे अपनी इच्छानुसार किसी भी भाषा में कर सकते हैं, शायद मतलूब भी। यदि आपको नहीं पता कि आप किस भाषा में शेल रोल्स का उपयोग करना चाहते हैं, जैसा कि @reemrevnivek द्वारा सुझाया गया है।
केनी

जवाबों:


2

यदि 'माप.टेक्स्ट' नामक फ़ाइल की प्रत्येक पंक्ति के अनुरूप प्रतीत होती है

C1 EB C1 F9 C1 C6 12:57:39.046:

एक नियमित अभिव्यक्ति का उपयोग हेक्साडेसिमल नंबरों को निकालने के लिए किया जा सकता है (प्रत्येक 4 अंकों में से एक मौजूदा), रिक्त स्थान को हटा दें और MATLAB का उपयोग करके दशमलव को संख्या में परिवर्तित करें, निम्न कोड के साथ:

data = importdata('measurement.txt',' ');
data_hex = [];
for m = 1 : size(data,1)
    [start_idx, end_idx, extents, matches, tokens, names, splits] = regexp(data{m,1},'([A-F0-9]{2} [A-F0-9]{2}) ([A-F0-9]{2} [A-F0-9]{2}) ([A-F0-9]{2} [A-F0-9]{2}).*');

    for n = 1 : size(tokens{1,1},2)
        data_hex{m,n} = strrep(tokens{1,1}(1,n),' ','');
        data_dec(m,n) = hex2dec(data_hex{m,n});
    end
end

@Peter: यदि संभव हो तो मैं आपको फ़ाइल भेज सकता हूँ। समस्या यह है कि फ़ाइल 4000 पंक्तियों के करीब है इसलिए मैं इसे मैन्युअल रूप से नहीं कर सकता।

मैं अनिश्चित हूं कि क्या प्रत्येक पंक्ति के बाद एक रिक्त रेखा है। यदि हां, तो मेरे कोड को थोड़ा अनुकूलित करना होगा। अब यह उन सभी पंक्तियों की खोज करता है जिनमें कोई ':' अक्षर नहीं है।

@ पीटर: धन्यवाद यह बहुत अच्छा काम करता है, लेकिन मेरी समस्या यह है कि मुझे फाइल C1 EB C1 F9 C1 C6 12: 57: 39.046: C1EB C1F9 C1C6 से 49365 49657 49606 में फाइल में कुछ इस तरह बदलने की जरूरत है

@Dipip: कृपया फ़ाइल के सटीक प्रारूप पर विस्तार से बताएं। तो अंतरिक्ष दो हेक्साडेसिमल संख्याओं को अलग करता है? कृपया अपनी पहली पोस्ट संपादित करें और अपनी फ़ाइल की सामग्री पर हस्ताक्षर करें। फिर इसे कोड के रूप में प्रदर्शित किया जाएगा।

@ पेटर: यह है कि पहली कुछ पंक्तियाँ 12: 57: 18.281: C1 F3 81 F6 81 C5 12: 57: 18.296: 01 F0 41 F7 01 C6 12: 57: 18.296: 41 C1 F7 01 C6 12:57 : 18.312: C1 E8 01 F8 01 C6

0

डेटा संग्रह के लिए इस तार्किक प्रारूप को मानते हुए:

12:57:18.281: C1 F3 81 F6 81 C5
12:57:18.296: 01 F0 41 F7 01 C6
12:57:18.296: 41 ED C1 F7 01 C6
12:57:18.312: C1 E8 01 F8 01 C6

यह पर्ल प्रोग्राम:

#!/usr/bin/perl
$time=0;$data='';
while(<>){
  if(s/^(\d+):(\d+):(\d+)\.(\d+):\s*//) {
    $time=3600*$1+60*$2+$3+$4/1000;
  }
  if(s/(..)\s+(..)\s*/(hex($1)<<8|hex($2))."\t"/eg) {
    s/\t$//;
    $data=$_;
  }
  print "$time\t$data\n";
}

इस कमांड लाइन के साथ:

perl accelerometer-parse.pl < data.in > data.out

इसे एक सार्वभौमिक टैब से अलग प्रारूप में बदल देगा जो कुछ भी साथ काम करेगा:

46638.281       49651   33270   33221
46638.296       496     16887   454
46638.296       16877   49655   454
46638.312       49640   504     454

डेटा के किसी भी सार्थक अर्थ को बनाने के लिए आपको समय की धुरी की भी आवश्यकता होगी। T = 0 से शुरू करने के लिए, बाद के सभी डेटा बिंदुओं से पहली बार प्रविष्टि घटाएँ।

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