2011-06-20 11 views
7

के लिए पार से संबंध मुझे पता है कि किसी को भी जानता है कि कैसे आईओएस पर दो श्रव्य संकेतों के बीच एक पार से संबंध प्रदर्शन करने के लिए करना चाहते हैं।उद्देश्य सी - ऑडियो देरी अनुमान

मैं ट्रांसमीटर (जो ऑडियो ट्रैक चला रहा है) पर रिसीवर (मुझे माइक्रो से सिग्नल प्राप्त हो रहा है) में प्राप्त एफएफटी विंडो को संरेखित करना चाहते हैं, यानी सुनिश्चित करें कि पहला नमूना प्रत्येक खिड़की के (ट्रांसमीटर पर "सिंक" अवधि के अलावा) रिसीवर पर पहली खिड़की भी होगी।

मैंने प्रेषित ऑडियो के हर हिस्से में एक ज्ञात तरंग (आवृत्ति डोमेन में) इंजेक्शन दिया। मैं ज्ञात तरंग और प्राप्त सिग्नल (लगातार कई हिस्सों में) के बीच पार-सहसंबंध के माध्यम से देरी का अनुमान लगा सकता हूं, लेकिन मुझे नहीं पता कि यह कैसे करना है।

ऐसा लगता है कि यह करने के लिए vDSP_convD विधि है, लेकिन मुझे नहीं पता कि इसका उपयोग कैसे किया जाए और मुझे पहले नमूने के वास्तविक एफएफटी को निष्पादित करना है (शायद हां, क्योंकि मुझे डबल पास करना है [])।

void vDSP_convD (
    const double __vDSP_signal[], 
    vDSP_Stride __vDSP_signalStride, 
    const double __vDSP_filter[], 
    vDSP_Stride __vDSP_strideFilter, 
    double __vDSP_result[], 
    vDSP_Stride __vDSP_strideResult, 
    vDSP_Length __vDSP_lenResult, 
    vDSP_Length __vDSP_lenFilter 
) 
+0

क्या आपने कभी यह पता लगाया है? यदि कोई संसाधन है तो आप सहायता के लिए जांच कर सकते हैं? – crgt

उत्तर

1

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

मान लीजिए, निश्चित रूप से, मैं आपको सही ढंग से समझता हूं।

फिर एक बार जब आप vDSP_convD() से परिणाम प्राप्त कर लेंगे, तो आप उच्चतम मूल्य की तलाश करना चाहेंगे, जो आपको बताएगा कि सिग्नल सबसे अधिक दृढ़ता से सहसंबंधित हैं। आपको उस मामले से निपटने की भी आवश्यकता हो सकती है जहां इनपुट सिग्नल में आपके संदर्भ सिग्नल पर्याप्त नहीं होते हैं, और उस स्थिति में आप (उदाहरण के लिए) एक निश्चित स्तर के नीचे परिणाम वेक्टर में मानों को अनदेखा कर सकते हैं।

+0

उत्तर बहुत अच्छा है, लेकिन इन विषयों से परिचित अन्य लोगों को स्पष्ट करने के लिए, http://en.wikipedia.org/wiki/Cross- सहसंबंध –

1

क्रॉस-सहसंबंध समाधान है, हां। लेकिन आपको संभालने के लिए कई बाधाएं हैं। यदि आपको ऑडियो फ़ाइलों से नमूने मिलते हैं, तो उनमें पैडिंग होती है जो क्रॉस-सहसंबंध फ़ंक्शन पसंद नहीं करता है। यह उन सभी नमूनों के साथ सहसंबंध करने के लिए भी बहुत अक्षम है - इसमें काफी समय लगता है। मैंने एक नमूना कोड बनाया है जो दो ऑडियो फ़ाइलों की समय-सारणी को दर्शाता है। यदि आप नमूना में रुचि रखते हैं, तो मेरे Github Project देखें।

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