कच्चे WAV से बाइनरी मैग्नेटिक-स्ट्रिप कार्ड डेटा निकालना


23

मुझे एक कठिन चुनौती का सामना करना पड़ रहा है: एक iPhone चुंबकीय पट्टी कार्ड रीडर से द्विआधारी डेटा निकालने के लिए । यह वह है जो कार्ड पर चुंबकत्व जैसा दिखता है:

यहाँ छवि विवरण दर्ज करें
स्रोत

यहां .WAV तब प्राप्त करता है जब आप कार्ड स्वाइप करते हैं (अपनी उम्मीदें बहुत अधिक न बढ़ाएं, यह एक बोनस लॉयल्टी कार्ड है;))। यह तीन स्वाइप्स हैं अलग-अलग गति से। यह स्वाइप मैं उपयोग कर रहा है के लिए कच्चे SInt16 डंप है

ऐसा लगता है कि किसी ने इसे यहां किया है, लेकिन मैं जिस वास्तविक डेटा को कैप्चर करता हूं, उसे संसाधित करना आसान नहीं है।

रीडिंग शुरू (और खत्म) 'शून्य' की एक अनिश्चित संख्या के साथ - ध्यान दें कि तरंग केवल 2 ZEROS के बाद दोहराती है, यह NS का प्रतिनिधित्व करता है और उसके बाद SN:

यहाँ छवि विवरण दर्ज करें

(ध्यान दें कि तीन पंक्तियों में से प्रत्येक मुझे एक अलग कार्ड स्वाइप करने का प्रतिनिधित्व करता है; इस छवि में निचला कार्ड 15 साल पुराना है, इसलिए चुंबकीय क्षेत्र स्पष्ट रूप से कुछ स्थानों पर गंभीर रूप से नीचा है, इस शॉट में दिखाई नहीं देता है)

यह एक एल्गोरिथ्म को एक घड़ी की टिक का पता लगाने की अनुमति देगा।

चुंबकीय क्षेत्र प्रत्येक घड़ी टिक पर उलट जाता है। एक बाइनरी 1 के लिए, चुंबकीय क्षेत्र एक टिक के बीच में बिल्कुल उलट होता है:

यहाँ छवि विवरण दर्ज करें

अनुक्रम हमेशा एक 1101 + 0 (समता बिट) प्रहरी के साथ शुरू होता है। आप उपरोक्त ग्राफ में तीनों रीडिंग में इसे चुन सकते हैं। यह प्रश्न के शीर्ष पर जुड़े हुए कॉस्मोड्रो लेख में अधिक स्पष्ट रूप से इंगित किया गया है।

यहाँ चुंबकीय गिरावट का एक उदाहरण है (नीचे कार्ड पढ़ने पर साथ लिया गया): यहाँ छवि विवरण दर्ज करें

मैं इस तरंग को अपने संबंधित बाइनरी अनुक्रम में बदलने के लिए एक समझदार तरीका निकालने की कोशिश कर रहा हूं।

मुझे एक पीडीएफ मिला है जो कुछ विस्तार में जाता है, लेकिन मैं उनके द्वारा उपयोग किए जा रहे एल्गोरिदम का पता नहीं लगा सकता।

इस पीडीएफ में एक दिलचस्प छवि है: यहाँ छवि विवरण दर्ज करें

यदि मैं इस आरेख के अनुसार लाल और नीली रेखाएं निकाल सकता हूं, तो मैं डेटा निकालने के लिए उनमें से किसी एक का उपयोग कर सकता हूं, लेकिन मैं निर्माण के पीछे के तर्क का पता नहीं लगा सकता।

तो यह मेरा सवाल है: मैं बाइनरी अनुक्रम कैसे निकालूं?

पुनश्च। ध्यान दें कि स्वाइप स्पीड स्थिर नहीं रहने वाली है। इसलिए एक बार घड़ी का निर्धारण हो जाने के बाद, लगातार एक टिक से दूसरे में समायोजित होने की आवश्यकता होती है।

पी पी एस। क्या ऑटोकैरेक्शन टिक्स के जोड़े को पकड़ पाएगा? (टिक के रूप में देखेंगे NS SN ...)


EDIT (जून '12): मुझे इस पर बहुत मदद की ज़रूरत थी, लेकिन आखिरकार मैंने एक ठोस पाठक ( http://www.magstripedecoder.com/ ) पूरा कर लिया है । सभी की मदद के लिए धन्यवाद! मैं आईआरसी के एफ़नेट चैनल पर #musicdsp की सिफारिश करता हूं कि किसी को भी गणित के साथ पकड़ पाने की चुनौती लेने के लिए पर्याप्त समर्पित है - यह वास्तव में बहुत कठिन है!


क्या आप वास्तविक wav फ़ाइल पोस्ट कर सकते हैं?
एंडोलिथ

1
किया हुआ! 9876543210
पी आई

हम्म। आपका तरंग मुझे अन्य सभी उदाहरणों की तरह नहीं दिखता है जो मुझे मिल सकते हैं। 2.bp.blogspot.com/_QF4k-mng6_A/TOzDBOzIB3I/AAAAAAAAAbM/... monografias.com/trabajos43/banda-magnetica/Image4228.gif embeddedsoftwareengineering.com/img/mag-flux.gif
endolith

प्रश्न का संपादन और संपादन करने के लिए आपका बहुत बहुत धन्यवाद।
पी आई

आप अपने प्रश्न में तीन कार्डों का उल्लेख करते हैं। WAV फाइल किस कार्ड से जुड़ी है?
जेसन आर

जवाबों:


10

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

यहाँ छवि विवरण दर्ज करें

कम-बूस्ट फ़िल्टर का उपयोग करके आप अधिक स्पंदित आकार को बहाल कर सकते हैं:

यहाँ छवि विवरण दर्ज करें

और फिर नाड़ी की लंबाई को मापें कि वे कितने समय से कुछ सीमा से ऊपर खर्च करते हैं। हो सकता है कि एक बेहतर विचार है कि इनपुट को अलग-अलग करने के लिए बड़े स्पाइक्स में बदलाव करें, निरपेक्ष मान लें और जब वे किसी सीमा से ऊपर जाएं तो उनका पता लगाएं:

यहाँ छवि विवरण दर्ज करें

फिर दालों के बीच के समय को मापें, और जब दो दालों के बीच का समय लगभग दो दालों के बराबर होता है, तो यह 0 होता है, जब यह पिछले दो दालों के बीच लगभग आधा होता है, तो यह 1 होता है।

आप जिस चुंबकीय गिरावट की बात करते हैं, उसे कम-पास फिल्टर के साथ निकालना आसान होना चाहिए।


धन्यवाद! मुझे दूसरी व्युत्पन्न के साथ काम करने के लिए कुछ बहुत ही दिलचस्प सहसंबंध मिल गए हैं जिन्हें मैं उचित समय पर पोस्ट करूंगा। क्या आप कम-बूस्ट फ़िल्टर पर विस्तृत कर सकते हैं? मैं किसी भी विचार मैं यह कैसे लागू करेगा नहीं है ...
मैं पी

@endolith क्या आप प्रश्न के लिए बेहतर टैग जोड़ सकते हैं? मैंने आपके उत्तर के आधार पर इसे अंतर-कोडिंग के रूप में चिह्नित किया है , लेकिन आप इस विषय को बेहतर जानते हैं।
लोरेम इप्सुम

@ योदा: हाहा नो मैं नहीं। मैंने इस उत्तर को लिखने के लिए कुछ घंटे पहले ही इसके बारे में जाना।
एंडोलिथ

@endolith मैं अभी इस पार आया था - यह अच्छा है - हालांकि क्या आप इस 'लो बूस्ट फिल्टर' की व्याख्या कर सकते हैं? बहुत दिलचस्प लगता है, और गूगल बहुत मदद की नहीं है ...
Spacey

@ मोहम्मद: केवल एक फिल्टर जो उच्च आवृत्तियों को छोड़ने के दौरान कम आवृत्तियों को बढ़ाता है। मुझे लगता है कि मैंने Adobe ऑडिशन में एक ग्राफिक इक्वलाइज़र का उपयोग किया है। एक ठंडे बस्ते में डालने की कोशिश करो फिल्टर crca.ucsd.edu/~msp/techniques/latest/book-html/node142.html
endolith

4

यह काफी चुनौती थी। मैंने इसे क्रैक करने से पहले कम से कम चार तरीकों की कोशिश की। मैंने इस तरह से इसे किया:

यहाँ छवि विवरण दर्ज करें

मैं एक सरल के साथ डेटा ( पहले पढ़ना ) को चौरसाई करके शुरू करता हूं ...

x_new = 0.9 * x_prev + 0.1 * x_in

... IIR फ़िल्टर। मैं इसे दोनों दिशाओं ( दूसरी रीडिंग ) में करता हूं । यह सभी फजी शोर से छुटकारा दिलाता है, हालांकि यह असंतोष पैदा करता है जो डेरिवेटिव में प्रतिशोध के साथ वापस आते हैं।

फिर मुझे चौथे ( तीसरे और चौथे रीडिंग तीसरे और चौथे व्युत्पन्न का प्रतिनिधित्व करते हैं) तक सभी डेरिवेटिव मिलते हैं , और एक नया फ़ंक्शन बनाते हैं:

g(x) = f'''(x)^2 + k*f''''(x)^2

क्यूं कर? क्योंकि मैंने देखा कि जब तक हम तीसरे व्युत्पन्न के पास पहुंचते हैं, तब तक हमारे पास प्रभावी रूप से एक लिफाफे के अंदर एक साइनसाइड होता है:

यहाँ छवि विवरण दर्ज करें

... और हाई स्कूल से सभी जानते हैं कि:

sin^2 + cos^2=1 

यहाँ छवि विवरण दर्ज करें

और वह पाप और कॉस एक दूसरे में अंतर करते हैं:

यहाँ छवि विवरण दर्ज करें

इसलिए निहित लिफाफा बरामद किया जा सकता है।

क्यों डेरिवेटिव 3 और 4? मूल रूप से प्रत्येक उच्च व्युत्पन्न संकेत को शुद्ध करता है। जो sinusoidal है वह sinusoidal रहता है (सिर्फ 90 ° इसलिए शिफ्ट- sin / cos चरण) जबकि वह दूर नहीं गिरता है।

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

यह हर फ्लक्स संक्रमण ( पांचवीं रीडिंग ) पर एक अद्भुत छोटी टक्कर पैदा करता है ।

आगे मैं टर्निंग पॉइंट्स से गुजरता हूं, डूड्स ( छठी रीडिंग ) को खारिज करता हूं ।

अंत में मैं मैक्सिमा ( सातवें पढ़ने ) के माध्यम से चलता हूं , मूल्यांकन करता हूं कि क्या प्रत्येक स्किप एक आधा कदम या एक पूरा कदम है, और फिर बाइनरी को फिर से संगठित करें।

वाह!

EDIT: इस परियोजना को पूरा किए हुए अब कई महीने हो चुके हैं। सबसे कठिन चुनौती कुछ परिवर्तनों का निर्माण करना है जो फ्लक्स संक्रमण को अलग करता है; तकनीकी रूप से, 'आयाम लिफाफे को पुनः प्राप्त करना'। यह मूल से π / 2 चरण शिफ्ट सिग्नल का निर्माण करके किया जाता है (इसे क्वाडरेचर सिग्नल के रूप में भी जाना जाता है)। तब E (t) ^ 2 = S (t) ^ 2 + Q (S (t)) ^ 2।

द्विघात संकेत प्राप्त करने के लिए, मैंने बस एक एफएफटी किया, और प्रत्येक बिन को एक चौथाई मोड़ घुमाया, फिर संशोधित वर्णक्रमीय घटकों को पुन: संयोजित किया।

इस क्षेत्र में बहुत अधिक भ्रमित करने वाली अपमानजनक शब्दावली है; कीवर्ड 'एनालिटिक सिग्नल', 'हिल्बर्ट ट्रांसफॉर्म' हैं ... मैंने उन कीवर्ड का उपयोग करने से परहेज किया है क्योंकि विभिन्न विषय उनके लिए अलग-अलग अर्थ प्रदान करते हैं।

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

यह प्रक्रिया एक तरंग पैदा करती है जिसमें प्रत्येक प्रवाह संक्रमण पर एक अद्वितीय टक्कर होनी चाहिए।

द्विआधारी अनुक्रम में इस तरंग को डिकोड करना अभी भी एक नॉनवेज वर्क है। जटिलता और यह घटक गणितीय के बजाय एल्गोरिदम है; कठिनाई तुलनीय है।

इन सब में यह एक अत्यंत कठिन समस्या है। उनके प्रदर्शन एल्गोरिथ्म को हासिल करने में मुझे तीन महीने का सबसे अच्छा हिस्सा लगा। मैं समय के पूर्णता में अपने दृष्टिकोण का दस्तावेजीकरण करूंगा और सार्वजनिक रूप से उपलब्ध डिकोडर इंजन का उत्पादन करूंगा।


1
पढ़ें सिर आसन्न चुंबकीय डोमेन के साथ-साथ वर्तमान में पढ़े गए सिर के नीचे संक्रमण से प्रभावित हो सकते हैं, जो आसपास के बिट पैटर्न के आधार पर समय में आगे और पीछे पढ़ने के संक्रमण को धक्का देता है।
hotpaw2

ध्यान दें कि यह तकनीक विश्वसनीय नहीं है। हालांकि यह अधिकांश ट्रैक के लिए उत्कृष्ट परिणाम देता है, यह प्रत्येक फ्लक्स संक्रमण के लिए जल्दी पर एक अद्वितीय टक्कर का उत्पादन करने में विफल रहता है। यानी यह एक दोहरी टक्कर बनाता है। मैं अनुमान लगा रहा हूं क्योंकि इस बिंदु पर इनपुट तरंग बेहतर रूप से साइनसोइडल नहीं है। इसलिए मैं अभी भी तकनीकों की तलाश में हूं।
पी आई

बस जिज्ञासु, "विश्लेषणात्मक संकेत" या "हिल्बर्ट ट्रांसफॉर्म" की अन्य क्या परिभाषाएं हैं? यदि आप सिग्नल के लिफाफे की तलाश कर रहे हैं, तो आप पा सकते हैं कि पहले इसे एक (जटिल) एनालिटिक सिग्नल में परिवर्तित करके। ऐसा करने के कुछ तरीके हैं, लेकिन आपने जो संकेत दिया है वह आमतौर पर उपयोग नहीं किया जाता है।
जेसन आर

@JR कुछ स्रोत एनालिटिक सिग्नल को 90 ° फेज शिफ्ट यानी क्वाड (f (x)) के रूप में परिभाषित करते हैं। अन्य लोग f (x) + i.Quad (f (x)) के रूप में। मुझे लगता है कि मैंने हिल्बर्ट परिवर्तन को इन दोनों के रूप में भी देखा है। पूरी तरह से निश्चित नहीं है, इसलिए मैं एक संकेतन के साथ फंस गया हूं जो अस्पष्ट होना चाहिए। मुझे संकेत के लिफाफे को पुनः प्राप्त करने की अन्य तकनीकों में दिलचस्पी है; dsp.stackexchange.com/questions/424/… इस धागे को आगे बढ़ाने के लिए सही जगह है।
पी आई
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.