वास्तविक समय मानव पिच का पता लगाने


11

मैं एक गायन खेल को लागू करने की कोशिश कर रहा हूं जो कच्चे माइक इनपुट की घोषणा करेगा और खिलाड़ी को बताएगा कि वह कितना अच्छा गा रहा है। जिसे वास्तविक समय में करने की जरूरत है।

मैं एक ही सवाल पूछने वाले बहुत सारे थ्रेड्स पर आया हूं, लेकिन मैं अभी भी इसके साथ नहीं किया गया हूं, शायद क्षेत्र और उथले गणित की पृष्ठभूमि में मेरे अनुभव की कमी के कारण। मैंने DSPDimension वेबसाइट पिच शिफ्ट के लेख के आधार पर एक एल्गोरिथ्म लागू किया है: http://www.dspdimension.com/admin/pitch-shifting-use-the-ft/

मैं सही आवृत्ति और परिमाण को वैसे ही निकालता हूं जैसे लेख बताता है, लेकिन मुझे नहीं पता कि इसके साथ मौलिक आवृत्ति क्या है। मैंने सबसे बड़ी परिमाण के साथ बिन पाने की कोशिश की है, लेकिन यह केवल मुझे उच्च पिच संकेतों के लिए सही परिणाम देता है, इससे कोई फर्क नहीं पड़ता कि मैं किस ओवरसम्पलिंग कारक का उपयोग करता हूं मैं अभी भी कम फ्रीक संकेतों के लिए खराब डेटा प्राप्त करता हूं। क्या यह दृष्टिकोण पूरी तरह से गलत है या मैं सही रास्ते पर हूं लेकिन अभी कुछ याद नहीं है?

अग्रिम में धन्यवाद,

संपादित करें: मैं यह उल्लेख करना भूल गया कि मैं केवल पिच क्लास में दिलचस्पी रखता हूं, इसलिए यह ठीक है कि अगर मौलिक गायब है, लेकिन मेरे पास नमूने में एक मजबूत ओवरटोन है।

EDIT2: सभी के लिए धन्यवाद, मैंने अभी एक एल्गोरिथ्म का एक संस्करण समाप्त किया है जो एक आकर्षण की तरह काम कर रहा है। मेरे इनपुट परीक्षण के कारण कम पिच अनुमान समस्या थी। जब मैंने नोट गाया तो यह सही ढंग से मेल खाता था। इसके अलावा, मैं अब सभी हार्मोनिक्स पर विचार कर रहा हूं, न कि केवल उच्चतम चोटी पर।


विकिपीडिया पर कुछ जानकारी है।
एमरे

जवाबों:


9

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

ऐसा इसलिए है क्योंकि हार्मोनिक्स मौलिक से बड़े हैं । अपना स्पेक्ट्रम प्लॉट करें और आप देखेंगे। असली मौलिक खोजने के लिए एक बेहतर तरीका है स्वसंबंध। फिर आप अपने आप को तरंग को "स्लाइड" कर रहे हैं और देरी का पता लगा रहे हैं, जिस पर लहर का आकार अपने आप ऊपर आ जाता है।

http://www.phon.ucl.ac.uk/courses/spsci/matlab/lect10.html

क्या आप वास्तव में उन्हें सटीक नोट गाना चाहते हैं, या क्या यह ठीक है अगर वे अपनी आवाज रजिस्टर के आधार पर ऊपर या नीचे एक ओक्टेव गाते हैं?


आप सही हैं, मैं यह उल्लेख करना भूल गया कि मुझे केवल पिच क्लास में दिलचस्पी है। मैं अपने टूल का परीक्षण करने के लिए इस वेबसाइट का उपयोग कर रहा हूं: सातवास्तृंग . com / tuningfork / tuningfork.html । ए (220 हर्ट्ज) के इनपुट के लिए यह पाया गया पिच क्लास के रूप में ई (660 हर्ट्ज) देता है। मैंने स्पुरक्टम पर एक नज़र डाली और 220Hz वास्तव में है, लेकिन 660Hz से कम परिमाण के साथ। अपनी वांछित सीमा में न्यूनतम परिमाण और कैप फ़्रीक्वेंसी के नीचे के मानों को फ़िल्टर करने के बाद, मुझे जो स्पिरिटम मिलता है उसमें 4 चोटियाँ होती हैं। [शिखर, पत्रिका] = [२२०, ३२०], [६ =०, ०४०४२], [६६०, ०.०६६]], [7०३, ०.०४४3]।
फेलिप लीरा

मुझे बस यह सोच कर मिला कि शायद मुझे परिमाण की गणना करते समय चरण को ध्यान में रखना चाहिए, जैसे मैं सच्ची आवृत्ति प्राप्त करने के लिए कर रहा हूं। क्या इसका कोई मतलब है? मेरा क्या मतलब है, अगर मेरे पास एक बिन के लिए लगभग 90 a का एक चरण ऑफसेट है, तो "शिखर" 0 परिमाण पर होगा?
फेलिप लीरा

@elipedrl: तो आप अनिवार्य रूप से एक गिटार ट्यूनर लिख रहे हैं। :) जैसा कि मैं समझता हूं, वे लहर आकार को साफ करने के लिए कम-पास फिल्टर करते हैं और फिर पिच पाने के लिए चोटियों की गिनती करते हैं। electronicdesign.com/article/articles/... aboutmicrocontroller.blogspot.com/2008/04/... अगर आप की तुलना में घटियापन नहीं बल्कि सटीकता के लिए जा रहे हैं वहाँ बेहतर तरीके, हालांकि, कर रहे हैं gist.github.com/255291
endolith

@elipedrl: एक बिन के लिए चरण ऑफसेट पिच के लिए अप्रासंगिक होना चाहिए। प्रत्येक बिन एक जटिल संख्या है, और आप उस संख्या के पूर्ण मूल्य या परिमाण में रुचि रखते हैं। en.wikipedia.org/wiki/Absolute_value#Complex_numbers
एंडोलिथ

1
और यदि आप किसी कारण (विलंबता, समय क्वांटा, आदि) के लिए 2 छोटे एफएफटी होते हैं, तो एक चरण वोकडर गणना एक और लंबे समय तक एफएफटी करने और उसको प्रक्षेपित करने की तुलना में कम संगणना है।
hotpaw2

6

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

यहाँ एक है: /programming/4227420/matlab-missing-fundamental-from-an-fft/4231322#4231322 , और दूसरा: पिच का पता लगाने में सुधार के लिए टिप्स

ADDED # 1: इससे मिलता-जुलता प्रश्न इतनी बार पूछा जाता है कि मैंने इस विषय पर एक लंबा ब्लॉग पोस्ट लिखा: http://www.musingpaw.com/2012/04/musical-pitch-is-not-just-fft- frequency.html


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

@elipedrl: FFT को तब काम करना चाहिए। कई चोटियाँ प्राप्त करना और फिर चालाकी से उनमें से किसी एक को चुनना काफी अच्छा होना चाहिए। याद रखें कि मान्य चोटियाँ मूल के करीब (लेकिन बिल्कुल नहीं) पूर्णांक के गुणकों के बराबर होंगी, जबकि स्थानिक चोटियाँ नहीं होंगी। आपको गंभीर चोटियों का चयन करने से बचना होगा और 3 हार्मोनिक आदि का चयन करने से बचना चाहिए, जो आपके द्वारा खोजे जा रहे नोटों से दूर नहीं हैं।
एंडोलिथ

यह संभव है, हालांकि संभवत: संभावना नहीं है, संगीत की पिच आवृत्ति पर कोई आवृत्ति चोटी के लिए नहीं। कुछ पुरुष स्वर इसके करीब हो सकते हैं, केवल उच्च ओवरटोन को स्वर फॉर्मेंट द्वारा फ़िल्टर करने के बाद छोड़ दिया जाता है।
hotpaw2

हार्मोनिक उत्पाद स्पेक्ट्रम विधि प्रारंभिक एफएफटी परिणामों को संसाधित करके, वर्णक्रमीय चोटियों के एक समूह के एलसीडी निम्नतम सामान्य भाजक अनुमान लगाने के लिए उपयुक्त हो सकता है।
hotpaw2
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.