क्या मैं पियानो पर संगीत नोटों को पहचानने के लिए एफएफटी का उपयोग कर सकता हूं?


13

मैं एक उपकरण बनाना चाहता हूं जो कुछ संगीत नोटों को पहचानता है (मुझे पता है कि यह पहिया का फिर से आविष्कार कर रहा है)। इसलिए मैं एक पियानो पर मध्य सी, डी और ई खेलूंगा और यह उन नोटों को वर्गीकृत करने में सक्षम होना चाहिए। यहां बताया गया है कि मुझे लगता है कि मुझे इसे देखना चाहिए:

  1. नोट चलाने के लिए मेरा एक नमूना रिकॉर्ड करें
  2. तेजी से फूरियर रूपांतरण का उपयोग करके आवृत्ति डोमेन में सिग्नल को परिवर्तित करें
  3. उस आवृत्ति को खोजें जो सबसे अधिक मौजूद है (मूल रूप से आवृत्ति डोमेन डेटा का argmax)
  4. मान लें कि आवृत्ति नोट खेले जाने से आती है और उस नोट को वर्गीकृत करने के लिए उपयोग करें

मैंने अभी तक इसमें से कोई भी कोशिश नहीं की है क्योंकि मैं गलत रास्ते को शुरू नहीं करना चाहता। तो, सैद्धांतिक रूप से, यह काम करेगा?


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

1
@ ठीक है मैंने इसे बदल दिया
michaelsnowden

1
एक नोट चलाने का आपका "नमूना" पहले से ही आयाम और समय का तरंग होना चाहिए। अनिवार्य रूप से, बिंदु 2 निरर्थक है। अपेक्षाकृत सरल कार्यान्वयन के लिए, आपके उपरोक्त चरण ठीक होने चाहिए।
user2943160

@ user2943160 मैंने इसे स्पष्ट करने के लिए जोड़ा। ध्वनि को बहुत सारे स्वरूपों में संग्रहित किया जा सकता है, और आमतौर पर इसे समय के साथ एक अच्छे आयाम में लाने के लिए कुछ प्रबंध करना पड़ता है।
michaelsnowden

@michaelsnowden: आप शब्द "आयाम" गलत उपयोग कर रहे हैं: एक sinusoidal समारोह के आयाम है । यह सिग्नल (वोल्टेज, विस्थापन, ...) की अधिकतम सीमा है और यह एक स्थिर (या आवृत्ति के संबंध में धीरे-धीरे बदल रहा है) है। आपके कहने का मतलब सिर्फ संकेत । अन्यथा मुझे लगता है कि "समय के साथ आयाम" से आपको संकेत के लिफाफे से मतलब है, लेकिन जहां तक ​​मैं समझता हूं कि आप नहीं करते हैं। एक y ( टी )y(t)=Asin(ωt)Ay(t)
दही

जवाबों:


23

अवधारणा अच्छी है, लेकिन आप पाएंगे कि यह व्यवहार में इतना सरल नहीं है।

पिच केवल प्रमुख स्वर नहीं है, इसलिए समस्या नंबर 1 है।

एफएफटी फ़्रीक्वेंसी डिब्बे संगीत पैमाने के सभी (या यहां तक ​​कि कई) टोन को एक साथ हिट नहीं कर सकते हैं।

मैं एक ऑडियो प्रोग्राम (उदाहरण के लिए, दुस्साहस) के साथ खेलने का सुझाव दूंगा जिसमें एफएफटी एनालाइज़र और टोन जनरेटर शामिल है, जो एफएफटी का उपयोग करके किसी विशेष कार्य को लागू करने का प्रयास करने से पहले यह महसूस कर सकता है (और नहीं कर सकता)।

यदि आपको कुछ विशिष्ट स्वरों का पता लगाने की आवश्यकता है, तो आपको गोर्टज़ेल एल्गोरिथ्म आसान और तेज़ लग सकता है।

पिच का पता लगाना जटिल है, और उस क्षेत्र में अभी भी अनुसंधान चल रहा है। टोन का पता लगाना बहुत सीधा है, लेकिन हो सकता है कि आपको वह न मिले जो आप चाहते हैं।


यदि हम इस धारणा से शुरू करते हैं कि नमूने एक विशिष्ट उपकरण के हैं, तो समस्या से निपटने के लिए थोड़ा आसान हो सकता है, है ना?
मकिथ

यह वास्तव में अच्छा लग रहा है। एक अनुवर्ती प्रश्न है: क्या दो नोटों का पता लगाने के लिए Goertzel Algorithm का उपयोग किया जा सकता है?
माइकल्सवल्डन

इसका उपयोग एक साथ स्वर का पता लगाने के लिए किया जा सकता है। चाहे वह एक साथ नोट का पता लगाने के लिए पर्याप्त हो, एक अलग सवाल है, और एक मैं अभी भी काम कर रहा हूं। मेरे पास एक Goertzel आधारित गिटार नोट डिटेक्टर है जो मैं वर्षों से बंद कर रहा हूं।
JRE

2
@mkeith: क्रमबद्ध करें। आप नोटों का परीक्षण कर सकते हैं और यह देख सकते हैं कि किसी विशेष उपकरण (और शायद सिर्फ ब्याज के नोट्स) के लिए पर्याप्त स्वर का पता लगाना पर्याप्त है। जहां तक ​​मुझे पता है, हालांकि, सभी उपकरणों से सभी नोटों का पता लगाने के लिए कोई सामान्य समाधान नहीं है।
JRE

3

मैं कहूंगा कि सिग्नल की एक मल्टीमॉडल अवलोकन खिड़की का उपयोग करना बेहतर होगा। आपके ऑडियो सिग्नल के तरंगिका अपघटन की तर्ज पर कुछ जो आपको नोट के अंदर कई ओवरटोन की पहचान करने की अनुमति देगा। हाँ, वास्तव में वेवलेट्स, मैं कहूंगा कि जाने का रास्ता है।

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

निश्चित रूप से वेवलेट अपघटन के बाद वू को एल्गोरिदम को लागू करने की आवश्यकता होगी जो नोट और परिधीय टन की पहचान करते हैं।

मुझे लगता है कि वेवलेट वास्तव में उन समस्याओं को संबोधित करते हैं जो लोग पिच पहचान के संदर्भ में बात कर रहे हैं।

यदि आप सीखना चाहते हैं कि तरंगिका कैसे काम करती है, तो यह HP द्वारा जारी किया गया एक अद्भुत व्हाइटपेपर है :) http://www.hpl.hp.com/hpjournal/94dec/dec94a6.pdf और वेवलेट से परिचय

कार्यान्वयन के लिए, MATLAB में एक तरंगिका उपकरण है और मुझे यकीन है कि आर आदि जैसे प्लेटफार्मों के लिए उपलब्ध अन्य संकुल का ढेर है।


1

मुझे लगता है कि आप पियानो की सीमा के बीच में खेले जाने वाले नोटों के बारे में सोच रहे हैं (200 और 500 हर्ट्ज के बीच), लेकिन उस श्रेणी में भी एक एकल नोट में कई ओवरटोन होंगे, जो मौलिक आवृत्ति के सटीक गुणक नहीं हैं , और एक भी प्रत्येक नोट के शुरू में ब्रॉडबैंड की महत्वपूर्ण मात्रा, और शायद अंत में भी।

नोट रेंज के निचले सिरे पर ज़ोर से नोटों के लिए, आप पाएंगे कि बहुत कम ध्वनि ऊर्जा (1% से कम) वास्तव में नोट की मूलभूत पिच में है।

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

आप बेहतर समय-सारणी फूरियर रूपांतरण विधियों की बेहतर जांच कर सकते हैं, उदाहरण के लिए गैबोर परिवर्तन या वेवलेट-आधारित विधियाँ।

ध्यान दें कि चूंकि प्रत्येक नोट के लिए लगातार नोटों की मौलिक पिच 6% बढ़ जाती है, इसलिए आपको ऑडियो में हार्मोनिक्स की आवृत्तियों की पहचान करने में बहुत अधिक सटीकता की आवश्यकता नहीं है। संगीत के नोटों की सही पहचान करना यह निर्धारित करने के रूप में काफी समस्या नहीं है कि क्या नोट संगीत के पैमाने के अनुरूप हैं, जहां आवृत्तियों को 0.1% से अधिक सटीकता से मापा जा सकता है।


0

हाँ, यह वही है जो एफएफटी के बारे में है! आपके द्वारा फीड किए गए डेटा की आवृत्ति स्पेक्ट्रम देने के लिए। कठिन हिस्सा कार्यान्वयन विवरण है, जैसा कि आपने उल्लेख किया है।

आप जो करना चाहते हैं, उसके आधार पर, वास्तव में, उत्तर को बदल देता है।

यदि आप केवल अपने स्वयं के संगीत का विश्लेषण करना चाहते हैं, तो ऐसा करने के लिए पहले से ही सॉफ़्टवेयर हैं। आप ईक्यू को देख सकते हैं जो प्रतिक्रिया (मूल रूप से एफएफटी) दिखाते हैं, या एक "संगीत ईक्यू" प्राप्त करते हैं जो पिचों को भी दिखाता है। आप मिडी वीएसटी के लिए ऑडियो प्राप्त कर सकते हैं जो कि आप मिडी नोटों में जो खेलते हैं उसे रूपांतरित करते हैं। यदि आपका कीबोर्ड मिडी है, तो बस VST छोड़ें, और मिडी को सीधे रिकॉर्ड करें।

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

यदि आप ऐसा काम करने के लिए एक उपकरण का निर्माण करना चाहते हैं तो यह काफी जटिल है। गणना करने के लिए आपको एक uC / dsp / fpga / etc की आवश्यकता होगी। अधिकांश लोकप्रिय डिवाइस पहले से ही एफएफटी कोड के साथ आते हैं, इसलिए आपको इसे स्वयं (जटिल भी) कोड नहीं करना होगा।

आपको सर्किटरी और वह सब बनाना होगा। यह मुश्किल नहीं है, लेकिन आपके अनुभव / ज्ञान के आधार पर इसमें काफी समय लग सकता है और इसमें सीखने की अवस्था में सुधार होता है। यह अंतिम उत्पाद की गुणवत्ता पर भी निर्भर करता है।

गणितीय रूप से, एक आदर्श संगीत नोट में "मौलिक" की एक ज्यामितीय श्रृंखला होती है।

मान लीजिए कि F0 मौलिक आवृत्ति है, तो अधिकांश संगीत नोटों को F (t) + F0 * sum (a_k e ^ (2 ^ k F0 * pi i t) = = F0 + a_1 * F1 + F2/ F2 + F2 द्वारा अनुमानित किया जाएगा। ...

A_k की उन उच्च आवृत्तियों की ताकत है F_k और F_k, F0 के कुछ गुणक हैं। यदि सभी के लिए a_k = 0 है, तो हमारे पास एक शुद्ध साइनसॉइड है। इस की पिच का पता लगाना आसान है। बस एफएफटी का अधिकतम पता लगाएं और वह आवृत्ति स्वर की मौलिकता = संगीत नोट है।

जब आप एफएफटी लेते हैं, तो आप उस डेटा के साथ समाप्त होते हैं, और बस गणित करते हैं। यह मूल रूप से कलन है।

यह सब अपेक्षाकृत आसान है।

कुछ समस्याओं से आपको निपटना होगा। ध्यान दें कि ये सभी "हल" नहीं हैं।

  1. लेटेंसी - अगर आप किसी भी प्रकार का रियल टाइम सामान करने जा रहे हैं, तो यह एक समस्या बन सकती है।

  2. एकाधिक नोट्स - सभी अतिरिक्त हार्मोनिक्स के कारण नोट्स के समूह को निर्धारित करना मुश्किल है। यदि A = 440hz और A '= 880hz खेलते हैं, तो अधिकांश हारमोंस ओवरलैप हो जाएंगे। आप आसानी से A = 440hz प्राप्त कर सकते हैं, लेकिन A '= 880hz प्राप्त करना अधिक कठिन है। जब आप जीवा के बारे में सोचते हैं, तेजी से दौड़ते हैं, आदि, तो सभी जानकारी (नोट) को ठीक से प्राप्त करना बहुत मुश्किल हो सकता है। जबकि सब कुछ आम तौर पर गणितीय रूप से संभव है, डेटा में स्वयं त्रुटियां और विपत्तियां हैं, और समीकरण कुछ मामलों में परिभाषित किए गए हैं।

  3. शोर - संकेत में शोर आपको चंचल परिणाम दे सकता है। यदि एक संगीतमय शोर होता है, तो यह आपके परिणामों को खराब कर सकता है। तब बेहतर एल्गोरिदम की आवश्यकता होगी = समय + पैसा + ज्ञान।

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