पिच का पता लगाने में हार्मोनिक उत्पाद स्पेक्ट्रम की सीमाएं


10

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

उच्च पिचों के लिए ( eg. >C6:1046.50hz) मैं एचपीएस से कचरा डेटा प्राप्त करना शुरू कर रहा हूं। जितनी अधिक पिच उतनी अधिक कचरा मुझे मिलता है (कचरे से मेरा मतलब आवृत्तियों से है जो ओक्टेव त्रुटियां नहीं हैं और न ही हार्मोनिक्स हैं और लगभग 1 हर्ट्ज-20 हर्ट्ज हैं)

क्या मैंने अनुभवजन्य अवलोकन किया है:

  1. परिणाम उच्च पिचों के लिए सबसे खराब हैं, अगर मौलिक ए 6 या तो ऊपर है, तो मुझे केवल कचरा डेटा मिलता है।

  2. एफएफटी बहुत ऊंची पिच के लिए भी ठीक काम करता है, (ठीक है मेरा मतलब है कि इसकी चोटी या तो मौलिक या इसके हार्मोनिक्स में से एक दिखाती है, लेकिन कचरा नहीं)

  3. यदि मैं एचपीएस के लिए विचार करने वाले हारमोंस की संख्या कम करता हूं, तो कचरा कम हो जाता है, लेकिन इससे मूलभूत और हार्मोनिक्स के बीच भेदभाव करना कठिन हो जाता है।

यहाँ मेरा एल्गोरिथ्म है:

->raw buffer -> hann window, 16384 samples, 50% overlap -> zero padding -> FFT -> HPS

किसी भी मदद की सराहना की है!

अद्यतन 1: तो, कुछ और चीजें हैं जिन्हें मैं जोड़ना चाहता हूं:

  1. मैं जिस नमूना दर को रिकॉर्ड कर रहा हूं वह 44100 हर्ट्ज है
  2. मैंने देखा है कि यह व्यवहार एक गिटार पर मुश्किल से दिखाई देता है, लेकिन एक डिजिटल पियानो (एक ही खेले गए नोट के लिए) पर बहुत अधिक दिखाई देता है
  3. यहाँ मेरा hps एल्गोरिथ्म है, शायद अधिक अनुभव वाला कोई व्यक्ति किसी समस्या को देख सकता है।

    int hps(float* spectrum, int spectrumSize, int harmonics) {
    
    int i, j, maxSearchIndex, maxBin;
    maxSearchIndex = spectrumSize/harmonics;
    
    maxBin = 1;
    for (j=1; j<=maxSearchIndex; j++) {
        for (i=1; i<=harmonics; i++) { 
            spectrum[j] *= spectrum[j*i];
        }
        if (spectrum[j] > spectrum[maxBin]) {
            maxBin = j;
        }
    }
    
    // Fixing octave too high errors    
    int correctMaxBin = 1;
    int maxsearch = maxBin * 3 / 4;
    for (i=2; i<maxsearch; i++) {
        if (spectrum[i] > spectrum[correctMaxBin]) {
            correctMaxBin = i;
        }
    }
    if (abs(correctMaxBin * 2 - maxBin) < 4) {
        if (spectrum[correctMaxBin]/spectrum[maxBin] > 0.2) {
            maxBin = correctMaxBin;
        }
    }
    
    return maxBin;
    }
    

1
आपका नमूना दर क्या है? ADC से पहले आपको कौन सा एंटी-अलियासिंग फिल्टर मिला है?
मार्टिन थॉम्पसन

मेरा रिकॉर्डिंग नमूना दर 44100 हर्ट्ज है, क्षमा करें मैंने पहले इसका उल्लेख नहीं किया था।
वैलेंटाइन रादु

1. आपको एचपीएस गणना में उपयोग किए जाने वाले मध्यवर्ती स्पेक्ट्रा और उत्पादों की साजिश रचने की जरूरत है और देखें कि यह कहां से गलत मान रहा है। 2. गिटार और पियानो इनहार्मोनिक हैं , जो चोटियों को पूरी तरह से लाइन नहीं करने का कारण बनेंगे । यह निश्चित नहीं है कि इसका कितना असर होगा, लेकिन HPS पूरी तरह से हार्मोनिक स्पेक्ट्रा मानता है।
14

जवाबों:


3

यह हो सकता है कि इन उच्च पिचों पर सिग्नल में बहुत कम हार्मोनिक भाग मौजूद हों। एचपीएस एल्गोरिथ्म बहुत सरल है और पृष्ठभूमि से मौलिक उभरने तक स्टैकिंग को बनाए रखने के लिए उन ऊपरी हार्मोनिक्स पर निर्भर करता है। बेशक, हमें आश्चर्य होना चाहिए कि आपकी नमूना दर क्या है? यदि यह 8000 हर्ट्ज है, तो 1000 हर्ट्ज पिच के 3 हार्मोनिक्स के लिए केवल कमरा है ...


मैं 44100 हर्ट्ज पर रिकॉर्डिंग कर रहा हूं, लेकिन फिर भी आपके जवाब ने मुझे इसके बारे में सोचने पर मजबूर कर दिया। हो सकता है कि इसका कुछ संबंधित हो और मुझे यह तय करना चाहिए कि मैंने अपने मूल एफएफटी में पाई गई चोटियों के आधार पर अपने एचपीएस में कितने हार्मोनिक्स पर विचार किया। एक और बात Ive देखी गई है कि यह मेरे इलेक्ट्रिक पियानो की तुलना में स्ट्रिंग इंस्ट्रूमेंट्स के साथ बेहतर तरीके से काम करता है, क्या ऐसा हो सकता है क्योंकि पियानो के मामले में हारमोंस वीक करने वाले हैं?
वैलेंटाइन रादु

@mindnoise: बोल्ड स्ट्रिंग इंस्ट्रूमेंट्स हार्मोनिक होते हैं, जबकि प्लक किए गए या स्ट्रिंग स्ट्रिंग इंस्ट्रूमेंट्स में en.wikipedia.org/wiki/Inharmonicity होता है । यकीन नहीं है कि अगर यह समस्या का हिस्सा है
endolith

@endolith विशेष रूप से हो सकता है क्योंकि: "कम लोचदार तार होते हैं (जो कि छोटे, मोटे, और सख्त होते हैं), वे जितनी अधिक धार्मिकता प्रदर्शित करते हैं ।" और मैं उन प्रकार के तार (उच्च नोट्स) पर बिल्कुल त्रुटि प्राप्त कर रहा हूं। दरअसल, बग होने पर मेरे एफएफटी में मूलभूत हमेशा सबसे मजबूत फ्रीक होता है, इसलिए इसे निश्चित रूप से हार्मोनिक्स या एचपीएस एल्गोरिदम के साथ करना पड़ता है, हालांकि मुझे यकीन नहीं है कि मुझे 1500 हर्ट्ज के मूल के लिए 20-50 हर्ट्ज कचरा क्यों मिलता है। hps एल्गोरिथ्म पोस्ट करेगा।
वैलेंटाइन रादु

1
@mindnoise: " पियानो में सबसे कम और सबसे ज्यादा नोटों में इनहेरोनिकिटी काफी हद तक प्रभावित करती है ... सबसे कम स्ट्रिंग्स, जो कि सबसे लंबी होती है, पियानो के आकार से सबसे ज्यादा सीमित होती हैं। एक छोटे पियानो के डिजाइनर को मजबूर किया जाता है। द्रव्यमान घनत्व को बढ़ाने के लिए मोटे तार और इस तरह से इसे धार्मिकता में प्रेरित किया जाता है। उच्चतम तार को सबसे बड़े तनाव में होना पड़ता है, फिर भी कम द्रव्यमान घनत्व की अनुमति देने के लिए पतला होना चाहिए। स्टील की सीमित ताकत पियानो डिजाइनर को बहुत कम उपयोग करने के लिए मजबूर करती है। तार जिनकी छोटी तरंग दैर्ध्य इस प्रकार धार्मिकता उत्पन्न करती है। "
15

2

कुछ उपकरणों के लिए, विभिन्न पिच रेंज में उत्पादित महत्वपूर्ण हार्मोनिक्स की संख्या बदल सकती है। कुछ भौतिक साधनों के लिए बहुत कम और उच्चतम नोटों के भाग अधिक धार्मिकता प्रदर्शित कर सकते हैं। एफएस / 2 के नीचे एंटी-अलियास फिल्टर कटऑफ के नीचे फिट होने वाले हार्मोनिक्स की संख्या निश्चित रूप से बहुत अधिक नोटों के लिए कम होगी। आपका एचपीएस पिच अनुमानक एमडी उन कारकों को ध्यान में रखना चाहता है।

कुछ उपकरणों के हमले के क्षणिक शोर के एक धार्मिक वर्णक्रमीय बैंड का उत्पादन कर सकते हैं जो कुछ पिचों के एचपीएस खोज क्षेत्र या उनके महत्वपूर्ण हार्मोनिक्स के साथ ओवरलैप हो सकता है।

संभावित रूप से, बहुत अधिक आवृत्तियों के ओवरटोन भी Fs / 2 के आसपास लपेट सकते हैं यदि ऑडियो ADC से पहले कम पास फिल्टर एक अच्छा पर्याप्त स्टॉप बैंड क्षीणन नहीं है।

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