2013-04-09 3 views
5

मैंने अभी एक electret microphone को एक Arduino में जोड़ दिया है, और मैं 1   kHz और 4   kHz की सीमाओं के बीच नमूना देना चाहता हूं।माइक्रोसॉन्ड में 1-4 केएचजेड के लिए एक आर्डिनो नमूना ऑडियो कर सकते हैं?

मुझे लगता है कि यह मशीन कोड और ADC तक सीमित है, इसलिए मैं sketch सरल रखने की कोशिश कर रहा हूं।

क्या इन आवृत्तियों के बीच नीचे स्केच के साथ नमूना करना संभव है?

const int analogPin = 0; 
int ledPin = 13; 

void setup() { 
    pinMode(ledPin, OUTPUT); 
} 

void loop() { 
    int mn = 1024; 
    int mx = 0; 
    for (int i = 0; i < 5; ++i) { 
     int val = analogRead(analogPin); 
     mn = min(mn, val); 
     mx = max(mx, val); 
    } 
    if (mx-mn >= 50) { 
     digitalWrite(ledPin, HIGH); 
    } 
    else { 
     digitalWrite(ledPin, LOW); 
    } 
} 
+0

आप किस प्रकार का Arduino उपयोग कर रहे हैं? – angelatlarge

उत्तर

0

मैंने सुना है, या बल्कि पढ़ने याद है, कि एडीसी प्रति सेकंड 10k-नमूनों को संभाल सकता है, तो यह 5   kHz करने के लिए ठीक ऊपर होना चाहिए। हालांकि, मैंने यह कोशिश नहीं की है और न ही मेरे पास इस समय इसे वापस करने का एक लिंक है।

बस कोशिश करें और देखें।

अब मुझे पता है कि कुछ Arduino लाइब्रेरी फ़ंक्शन धीमे हैं, विशेष रूप से डिजिटल रीड/लिखें जिसमें सैकड़ों चक्र हैं। इनमें से अधिकांश सैनिटी जांच है जो लोगों को बस सब कुछ सेट करने के बारे में सोचने के बिना डिजिटल रीड/लिखने की अनुमति देती है।

हालांकि, अधिकतम प्रदर्शन को निचोड़ने के लिए आप अपने स्वयं के एनालॉग रीड को लिखने में देख सकते हैं जो आपके उपयोग के मामले के लिए अनुकूलित है। इस विषय पर

कम से कम कुछ लिंक:

+0

मैंने http://ururoelec.com/2011/03/fft-library-for-arduino/ की जांच करने के लिए न्यूरोलेक्स एफएफटी लाइब्रेरी की कोशिश की और जब प्रयोगशाला शांत थी तो मेरे पास निम्नलिखित परिणाम थे http://i45.tinypic.com/ dfaqts.jpg। कोई विचार क्या हो सकता है? मैंने माइक को भी अनप्लग किया और यह अभी भी शीर्ष छोर पर मोटा है। क्या यह सिर्फ सर्किट से शोर हो सकता है? – user2119971

+0

उन स्पाइक्स पर कितनी आवृत्ति है? ठीक है कि स्पाइक ... –

1

Arduino एक प्रोटोटाइप एक नंबर से मिलकर मंच है हार्डवेयर बोर्डों के साथ एक सॉफ्टवेयर abstraction परत। इस तरह के एक प्रश्न के लिए, अंतर्निहित हार्डवेयर की क्षमताओं पर विचार करना उपयोगी है, क्योंकि ये अंतिम सीमाएं प्रदान करते हैं। मुझे लगता है कि आप Arduino Uno/Nano का उपयोग कर रहे हैं, कहानी के कारण कहानी अलग है।

डेटाशीट के अनुसार, प्रत्येक एडीसी पढ़ने (पहले से परे) 13 एडीसी घड़ी चक्र लेता है। एडीसी घड़ी (एमसीयू से अलग) घड़ी कुछ कारकों से कम से कम 2 कारकों को सिस्टम घड़ी को विभाजित करके प्राप्त की जाती है। इसलिए 16 मेगाहट्र्ज बोर्ड पर यह प्रति सेकंड 0.6 मिलियन नमूने तक है। अब तक सब ठीक है। हालांकि, यह कहानी का अंत नहीं है, आपको अभी भी डेटा को पढ़ने की जरूरत है। यदि आप इंटरप्ट्स का उपयोग करते हैं, भले ही आप कुछ सरल करते हैं, अनुभव से पता चलता है कि आप प्रसंस्करण को बाधित करने के लिए लगभग 100 घड़ी खो देंगे। अब आप नीचे 126 के नमूने/दूसरे हैं। लेकिन यह एक सैद्धांतिक अधिकतम है।

डेटाशीट का कहना है कि एडीसी के लिए अधिकतम सटीकता के लिए 50kHz - 200kHz एडीसी घड़ी की आवश्यकता है। (wiring.c में) Arduino कोड में, 128 का एक प्रभाग कारक चुना जाता है:

sbi(ADCSRA, ADPS2); 
sbi(ADCSRA, ADPS1); 
sbi(ADCSRA, ADPS0); 

इसका मतलब है कि प्रत्येक रूपांतरण 128 * 13 = 1764 घड़ियों जो प्रति सेकंड 10K नमूनों की एक सैद्धांतिक अधिकतम पैदावार ले जाता है,। यह 0 बिटफ़ंक्शन केवल एडीसी रूपांतरण शुरू करने और इसके समाप्त होने की प्रतीक्षा करने से परे कुछ करता है, लेकिन यह बहुत खराब नहीं होना चाहिए। इसमें आपके पाठ्यक्रम का कोड शामिल नहीं है: readAnalog() के परिणामों पर आपके द्वारा किए जाने वाले किसी भी प्रसंस्करण से अधिक नमूने कैप्चर करना अधिक कठिन हो जाएगा।लेकिन हां, 4 किलोहर्ट्ज़ पर कैप्चर करने के लिए आपको यह सुनिश्चित करना होगा कि कोड 1.5k घड़ी चक्र/नमूना से कम खर्च करता है, जो करने योग्य होना चाहिए। ध्यान दें कि यदि आप पांच रीडिंग कर रहे हैं जैसे आप पोस्ट किए गए कोड में कर रहे हैं, तो आपका कोड बहुत कम होने पर अधिकतम कैप्चर रेट 2kHz होगी।


जहाँ तक डेटा पर कब्जा करने के लिए कैसे के रूप में, आप तथ्य यह है कि प्रवर्धन के बिना माइक्रोफोन आप 0-5V रीडिंग है कि आप अगर आप analogRead() उपयोग कर रहे हैं उम्मीद कर सकते हैं नहीं देंगे साथ सौदा करने की जरूरत है। वास्तव में, माइक्रोफ़ोन आउटपुट वोल्टेज सकारात्मक से नकारात्मक तक स्विंग करते हैं, हालांकि, नकारात्मक वोल्टेज एडीसी द्वारा नहीं उठाए जाएंगे, और जब तक आप अपना माइक्रोफ़ोन वोल्टेज ऑफसेट नहीं देते हैं, तब तक केवल शून्य के रूप में दिखाई दें।


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

संबंधित मुद्दे