2011-02-07 18 views
5

हाल ही में मैं इस प्रश्न पूछा: How to get the fundamental frequency from FFT? (आप वास्तव में इसे पढ़ने के लिए की जरूरत नहीं है)सेपस्ट्रल का उपयोग कैसे करें?

मेरे संदेह अभी यह: कैसे Cepstral एल्गोरिथ्म उपयोग कैसे करें?

मुझे नहीं पता कि इसका उपयोग कैसे किया जाए क्योंकि केवल एक ही भाषा जिसे मैं जानता हूं एक्शनस्क्रिप्ट 3 है, और इस कारण से मुझे सी, जावा और अन्य में पाए गए मूल कार्यों के बारे में कुछ संदर्भ हैं, और मैं कैसे उन्हें एएस पर लागू करना चाहिए। अधिकांश लेख =/ (हालांकि, के रूप में अतिरिक्त अन्य भाषाओं में जवाब स्वागत हैं, बस कैसे स्क्रिप्ट कृपया काम करता है समझाने) एक FFT परिणाम की मौलिक आवृत्ति खोजने के लिए

लेख मैं Cepstral के बारे में पाया इन भाषाओं के बारे में हैं मुझसे कहा था कि मैं यह कर देना चाहिए:

संकेत → एफटी → पेट() → वर्ग → लोग इन → एफटी → पेट() → वर्ग → बिजली cepstrum

गणितीय: | एफ {लॉग (| एफ {च (टी)} | ²)} | ²

महत्वपूर्ण जानकारी:

  • मैं फ़्लैश
  • में एक गिटार ट्यूनर विकासशील हूँ यह पहली बार मैं उन्नत ध्वनि के साथ काम कर रहा हूँ
  • मैं संकेत है कि उपयोगकर्ता के पहुंचता है से आवृत्ति डिब्बे को निकालने के लिए एक FFT उपयोग कर रहा हूँ माइक्रोफोन, लेकिन मैं मौलिक आवृत्ति प्राप्त करने में अटक गया यह

मैं नहीं जानता से:

  • एक ARRAY में एक वर्ग को कैसे लागू करें (मेरा मतलब है, मेरा एफएफटी मुझे वह डेटा देता है जो एक सरणी है। क्या मुझे इसे स्वयं से गुणा करना चाहिए? जब मैं fftResults * fftResults)
  • "लॉग" को कैसे लागू करें, तो एक्शनस्क्रिप्ट की डीबग त्रुटियों को फेंकता है। मैं नहीं जानता कि इसे कैसे लागू किया जाए, भले ही मेरे पास एक ही संख्या हो।
  • जटिल सेपरस्ट्रल और पावर सेपस्ट्रल के बीच क्या अंतर है। इसके अलावा, मुझे उनमें से किस का उपयोग करना चाहिए? मैं एक गिटार ट्यूनर विकसित करने की कोशिश कर रहा हूं।

धन्यवाद!

उत्तर

1

मौलिक आवृत्ति (एफ 0) खोजने के कई तरीके हैं।

जावा आदि जैसी भाषाओं के लिए पहले से लागू किए गए एल्गोरिदम के साथ कई पुस्तकालय हैं (आप उनके स्रोतों का अध्ययन कर सकते हैं)।

  • एमएफसीसी (सीपस्ट्रल पर आधारित) Comirva (ओपन सोर्स) में लागू किया गया।
  • ऑडेसिटी (बीटा संस्करण!) (ओपन सोर्स) cepstrum, autocorellation, बढ़ाया autocorellation, प्रस्तुत करता है
  • यिन ऑटो सहसंबंध के आधार पर (example)
  • FFT

इन सभी एल्गोरिदम के बाद अधिकतम संकेत मान ढूँढना हो सकता है आपके लिए बहुत उपयोगी हो।हालांकि एफ 0 (एचजे में एक मूल्य) प्राप्त करने का सबसे आसान तरीका यिन का उपयोग करना होगा।

+0

क्या ये विधियां गिटार ट्यूनर बनाने के लिए सटीक हैं? मेरा मतलब है ... मुझे वास्तव में उच्च परिशुद्धता की आवश्यकता है! –

+0

यह कई चीजों पर निर्भर करता है - माइक्रोफोन गुणवत्ता, शोर आदि। कभी-कभी denoising के लिए कुछ एल्गोरिदम भी आवश्यक हो सकता है। आप उस यिन उदाहरण को चला सकते हैं - यह वह एप्लिकेशन है जो माइक्रोफ़ोन से ध्वनि कैप्चर करता है और f0 - test प्रदर्शित करता है और सामान्य (हार्डवेयर?) ट्यूनर के साथ सत्यापित करता है। – mmatloka

+0

मैंने इस के आधे हिस्से को पढ़ा: http://recherche.ircam.fr/equipes/pcm/cheveign/ps/2002_JASA_YIN_proof.pdf यह किसी प्रकार का दस्तावेज दिखता है, लेकिन यह मेरे दिमाग को फ्राइंग कर रहा है। मैं आपको परेशान नहीं करना चाहता, लेकिन क्या आप मुझे बताएंगे कि मुझे इन समीकरणों को कैसे लागू करना चाहिए? सिग्नल में, एक एफएफटी परिणाम में, और कैसे? आपकी सहायता के लिए बहुत धन्यवाद! –

6

ध्यान दें कि एफएफटी का आउटपुट जटिल मानों की एक सरणी है, यानी प्रत्येक बिन = re + j*im। मुझे लगता है कि आप केवल एबी और स्क्वायर ऑपरेशंस को जोड़ सकते हैं और प्रत्येक बिन के लिए re*re + im*im की गणना कर सकते हैं। यह आपको प्रत्येक बिन के लिए एक सकारात्मक मूल्य देता है, और जाहिर है कि आप प्रत्येक बिन के लिए आसानी से लॉग मान की गणना कर सकते हैं। इसके बाद आपको इस लॉग स्क्वायर डेटा पर दूसरा एफएफटी करने की आवश्यकता है और फिर इस दूसरे एफएफटी के आउटपुट का उपयोग करके आप प्रत्येक बिन के लिए re*re + im*im की गणना करेंगे। इसके बाद आपके पास पोस्टिव मानों की एक श्रृंखला होगी जिसमें आपके इनपुट की मौलिक आवृत्ति या आवृत्तियों का प्रतिनिधित्व करने वाला एक या अधिक चोटियां होंगी।

+0

मुझे प्राप्त एक सरणी का एक उदाहरण है: [0.123123,0.4809,0.0498356,0.000231,82.31240987,0.1230987 ................. ....................... मूल्य 1020, मूल्य 1021, मूल्य 1022, मूल्य 1023, मूल्य 1024]। ये मान सिर्फ संख्याएं हैं। वे जटिल नहीं हैं, क्या वे हैं? –

+0

@ लुकास: यह इस बात पर निर्भर करता है कि आप किस विशेष एफएफटी का उपयोग कर रहे हैं, इनपुट और आउटपुट डेटा कैसे व्यवस्थित किया जाता है। कुछ जटिल डेटा प्रकार का उपयोग करेंगे, कुछ वास्तविक और काल्पनिक भागों को अंतःस्थापित करेंगे, और कुछ में सरणी के पहले भाग में सभी वास्तविक भाग होंगे और दूसरे में काल्पनिक भागों (दो सरणी, प्रभावी रूप से) होंगे - आपको पढ़ने की आवश्यकता है और अपने चुने हुए एफएफटी के लिए दस्तावेज़ों को समझें। –

+0

@PaulR: एन नमूने पर एफएफटी लेना एन मान देता है जो एन/2 कॉम्प्लेक्स नंबर (डिब्बे) से मेल खाता है। लेकिन, वर्ग परिमाण की गणना करने के बाद, मुझे केवल एन/2 मानों के साथ छोड़ दिया गया है जो एफएफटीिंग पर फिर से केवल एन/4 जटिल संख्या देता है। क्या यह सच है? दूसरे एफएफटी के बाद हम बिन आवृत्ति की गणना कैसे करते हैं? क्या आप इसे सही/सहायता कर सकते हैं? – Ravi

2

स्वत: सहसंबंध सबसे आसान और सबसे तार्किक दृष्टिकोण है, और शुरू करने के लिए सबसे अच्छी जगह है।

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

हालांकि एफएफटी दृष्टिकोण भी काम कर सकते हैं, वे थोड़ा और भ्रमित हैं। मुद्दा यह है कि आप वास्तव में क्या कर रहे हैं अवधि है, और यह एफएफटी द्वारा अच्छी तरह से प्रतिनिधित्व नहीं है। लापता मौलिक इसका एक अच्छा उदाहरण है, जहां आपके पास 2 हर्ट्ज और 3 हर्ट्ज है, तो मूलभूत 1 हर्ट्ज है, लेकिन एफएफटी में कहीं भी नहीं है, जबकि 1 हर्ट्ज समय-समय पर प्रतिनिधित्व (उदा। ऑटोकोरेशन) में स्पष्ट है। इसमें जोड़ें कि ओवरटोन आवश्यक रूप से हार्मोनिक, और शोर, आदि नहीं हैं ... और इन सभी मुद्दों से समस्या के सीधे दृष्टिकोण के साथ शुरुआत करना सबसे अच्छा होता है।

+0

क्या आपको मुझे दिखाने के लिए कुछ ऑटोकोरेशन कोड पता है? इसके अलावा, कुछ बिंदु पर एफएफटी के आधार पर स्वत: सहसंबंध है? –

+0

स्वत: सहसंबंध लागू करना बहुत आसान है, यद्यपि आप जो भी करते हैं, वह इस बात पर निर्भर करेगा कि आपके पास कौन से टूल्स उपलब्ध हैं, और मुझे क्रियालेख नहीं पता है। सरणी पर गणित करने वाले अधिकांश पुस्तकालयों में "सहसंबंध" फ़ंक्शन होता है, और उसके बाद डेटा को स्वयं से संबंधित करता है। यदि आपके पास इस प्रकार की चीज़ नहीं है, तो यहां एक सी ++ उदाहरण है (http://www.koders.com/cpp/fidEB813F60127CA4FA79CE6ACDF6741303707951AD.aspx?s=include)। लेकिन अपने आप को लिखना आसान है, बस वस्तु को अपने स्थानांतरित संस्करण के साथ गुणा करें। – tom10

+0

आपके प्रश्न के दूसरे भाग के लिए: कभी-कभी एफएफटी का उपयोग करके ऑटोकोरेशन की गणना करने के लिए तेज़ होता है, लेकिन अभी के लिए, इसे गणना गणना के रूप में पूरी तरह से सोचें। कोई भी एफएफटी के साथ या इसके बिना, इसे किसी भी तरह से कर सकता है। – tom10

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

  • कोई संबंधित समस्या नहीं^_^