2011-09-19 8 views
6

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

  1. टन उत्पन्न स्थान पर नहीं कर रहे हैं, अर्थात्: उत्सर्जक 150Hz बाहर बारी 145-155Hz प्राप्त अंत पर हो सकता है, यह एक बहुत बड़ा मुद्दा के रूप में मैं सिर्फ प्राप्त अंत पर सीमाएं निर्धारित कर सकते हैं नहीं है कम या उच्च।

  2. वास्तविक समस्या यह है कि यदि मैं एक स्वर छोड़ देता हूं, और यह खेला जाता है, तो प्राप्त करने वाले अंत में कंप्यूटर इसे कई बार पढ़ सकता है या इसे आने वाले ऑडियो के नमूने के आधार पर इसे बिल्कुल नहीं पढ़ सकता है। मैंने स्वरों को उसी गति से खेलने की कोशिश की है, लेकिन यह बहुत आसान है।

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

मैंने इस पर और अधिक देखा है कि इसमें बीपीएसके या बाइनरी चरण शिफ्ट कीिंग शामिल हो सकती है, हालांकि मुझे यकीन नहीं है कि इसे कैसे कार्यान्वित किया जाए। किसी भी सुझाव या कोड नमूने की सराहना की जाएगी!

परियोजना के लिए मेरे कोड पाया जा सकता है here लेकिन मुख्य फ़ाइलें मैं पर काम कर रहा हूँ द्विआधारी डिकोडिंग और एन्कोडिंग जो here और here है के लिए कर रहे हैं। मैं अजगर में एक विशेषज्ञ नहीं हूं इसलिए कृपया मुझे माफ़ कर दो अगर मैंने जो भी कहा है वह गलत है, तो मेरा कोड सबसे अच्छा नहीं है, या अगर मैंने कुछ बुनियादी बातों को अनदेखा कर दिया है।

धन्यवाद! :-)

उत्तर

7

जीएनयू रेडियो पर एक नज़र डालें!

http://gnuradio.org/redmine/projects/gnuradio/wiki

जीएनयू रेडियो, सॉफ्टवेयर में, के रूप में रेडियो संकेत संचरण या स्वागत के बहुत संभव करने के लिए एक परियोजना है। चूंकि रेडियो पहले से ही चरण शिफ्ट कुंजीिंग का उपयोग करता है, इसलिए जीएनयू रेडियो लोगों ने आपके लिए समस्या हल कर दी है, और जीएनयू रेडियो पहले से ही एक पायथन परियोजना है! और जटिल डीएसपी सामान सी ++ में गति के लिए लिखा गया है, लेकिन पायथन में उपयोग के लिए लपेटा गया है।

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

http://www.wu.ece.ufl.edu/projects/softwareRadio/

मैं देख रहा हूँ अपनी परियोजना MIT लाइसेंस के तहत है। जीएनयू रेडियो जीपीएल 3 के तहत है, जो आपके लिए एक समस्या हो सकती है। आपको यह पता लगाने की ज़रूरत है कि क्या आप अपने प्रोजेक्ट को व्युत्पन्न काम में लाने की आवश्यकता के बिना जीएनयू रेडियो का उपयोग कर सकते हैं, इस प्रकार आप अपना लाइसेंस बदल सकते हैं। एक स्टैंडअलोन "डिमन भेजना" और एक स्टैंडअलोन "प्राप्त डिमन" बनाना संभव होना चाहिए, जिसका स्रोत कोड जीपीएल 3 होगा, और उसके बाद आपका एमआईटी कोड सॉकेट या किसी चीज़ से कनेक्ट हो।

http://cnx.org/content/m10280/latest/

गुड लक:

वैसे, अपनी खोजों में से एक कैसे BPSK काम करता है के इस बहुत स्पष्ट विवरण मिल गया!

+0

धन्यवाद, इससे बहुत मदद मिलेगी! शून्य-पैडिंग के लिए – sbrichards

4

आवृत्ति के बारे में पहले अंक के जवाब में:

अपने डिकोडर को देखते हुए, मुझे लगता है कि अपने नमूना दर 44100 है और अपने हिस्सा आकार 2048 है यदि यह सही पढ़ रहा हूँ, मतलब है कि आपके FFT आकार है 2048. यह आपके एफएफटी बिन आकार को ~ 21hz पर रखेगा। क्या आपने अपने एफएफटी को पैड शून्य करने की कोशिश की है? एफएफटी शून्य-पैडिंग आवृत्ति को नहीं बदलेगा लेकिन आपको बेहतर रिज़ॉल्यूशन देगा। मुझे लगता है कि आप अपने आवृत्ति अनुमान को बेहतर बनाने के लिए एक वर्गबद्ध इंटरपोलेशन का उपयोग कर रहे हैं। मैंने उस तकनीक का उपयोग नहीं किया है, इसलिए मैं उससे प्राप्त सुधार से परिचित नहीं हूं। हो सकता है कि शून्य-पैडिंग के बीच संतुलन और एक वर्गबद्ध इंटरपोलेशन करने से आपको बेहतर आवृत्ति सटीकता मिल जाएगी।

इसके अलावा, ट्रांसमिशन और प्राप्त करने वाले हार्डवेयर के आधार पर, आवृत्ति त्रुटि ए/डी - एक या दोनों घड़ियों को चलाने वाले विभिन्न घड़ियों का परिणाम हो सकती है, वास्तव में 44100Hz पर नहीं हैं। ऐसा कुछ आपके एफएफटी आउटपुट पर आवृत्ति को प्रभावित कर सकता है।

+0

+1। इससे भी बेहतर अगर आप केवल खंड आकार बढ़ा सकते हैं और अधिक डेटा संसाधित कर सकते हैं। http://zone.ni.com/devzone/cda/tut/p/id/4880 – steveha

+0

धन्यवाद भी! हालांकि दो उत्तरों को स्वीकार नहीं कर सकते हैं: / – sbrichards