दिलचस्प पोस्ट
यह देखने के लिए सबसे अच्छा क्या है कि आइटम अस्तित्व में है या नहीं: काउंट (आईडी) चुनें या मौजूदा (…)? Haskell / GHC में `forall` कीवर्ड क्या करता है? लैम्ब्डा अभिव्यक्ति और विधि ओवरलोडिंग संदेह सिक्का समस्या के लिए संभावित संयोजन की गणना कैसे करें जावा: कंसोल साफ़ करें मीडियाकोडक और कैमरा: रंगीन स्थान मेल नहीं खाते हैं अगर मैं सी / सी ++ में एक 0-आकार की सरणी को परिभाषित करता हूं, तो क्या होगा? jQuery का नक्शा बनाम प्रत्येक "\ N" या '\ n' या std :: endl को std :: cout? मैं नवीनतम जेआरई / जेडीके को एक्सई या एमएसआई इंस्टॉलर के बजाय एक ज़िप फ़ाइल के रूप में कैसे प्राप्त करूं? एसेट लाइब्रेरी फ़्रेमवर्क का उपयोग करके एक सरणी में एक iPhone photoLibrary से सभी चित्र प्राप्त करें? GetClass द्वारा लोड हो रहा है फ़ाइल ()। GetResource () मैं विकसित क्रोम एक्सटेंशन को कैसे स्वत: पुनः लोड कर सकता हूं? ADO.NET प्रदाता के लिए अपरिवर्तनीय नाम 'System.Data.SqlClient' के साथ कोई इकाई फ़्रेमवर्क प्रदाता नहीं मिला विज़ुअल स्टूडियो 2010 एक्सप्रेस में एक्सटेंशन या ऐड-इन को स्थापित करने पर प्रतिबंध

डेटा से FFT चोटियों को प्राप्त करना

मैं स्क्रैच से एक भाषण मान्यता प्रणाली विकसित कर रहा हूँ, जो ओक्टेव का उपयोग कर रहा है। मैं फ़्रिक्वेंसी में मतभेदों का पता लगाकर phonemes का पता लगाने का प्रयास कर रहा हूं। वर्तमान में मैंने एक wav फ़ाइल में पढ़ा है, ब्लॉक में मूल्यों को संगठित किया और समग्र डेटा पर fft लागू किया। इसके बाद, मैं नए डेटा को plot(abs(real(fft(q)))) हूं जो इस ग्राफ को बनाता है: एफएफटी ग्राफ

मैं आवृत्ति मान कैसे प्राप्त कर सकता हूं (ग्राफ़ के चोटियों)?

वेब के समाधान से एकत्रित समाधान "डेटा से FFT चोटियों को प्राप्त करना"

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

जैसे, आप क्या कर सकते हैं, दो अतिरिक्त सिग्नल बनाते हैं जो सिग्नल को 1 और 1 की दाईं ओर स्थानांतरित करते हैं। जब हम ऐसा करते हैं, तो हम वास्तव में आपके सिग्नल में दूसरे तत्व से शुरू होने वाले चोटियों की जांच करेंगे बाईं ओर देखने के लिए कमरे बनाने के लिए आदेश सही देखने के लिए कमरे बनाने के लिए हम दूसरे अंतिम तत्व तक जांच करते रहते हैं। इसलिए, हम वास्तव में सिग्नल के N N - 2 संस्करण पर चोटियों की जांच करेंगे जहां N आपके सिग्नल की लंबाई है। इसलिए, जब हम बाएं स्थानांतरित सिग्नल बनाते हैं, तो हम तीसरे अंतिम तत्व तक सिग्नल का पहला तत्व निकालते हैं। जब हम सही स्थानांतरित संकेत बनाते हैं, तो हम अंतिम तत्व तक तीसरे तत्व से निकाले जाते हैं। मूल सिग्नल में केवल उसके पहले और अंतिम तत्वों को हटा दिया जाएगा।

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

जैसे, आपके सिग्नल को मानते हुए f में संग्रहीत किया गया था, आप निम्न कार्य करेंगे:

 f1 = abs(f(2:end-1)); %// Original signal f2 = abs(f(1:end-2)); %// Left shift f3 = abs(f(3:end)); %// Right shift idx = find(f1 > f2 & f1 > f3) + 1; %// Get the locations of where we find our peaks 

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

 t = 0 : 0.01 : 3; f = sin(2*pi*t); 

अब, अगर हम इस संकेत के साथ उपरोक्त कोड चलाते हैं, तो हमें हमारी चोटियों का स्थान मिल जाएगा। इसके बाद हम इन स्थानों को सूचकांक में t और f में इस्तेमाल कर सकते हैं और सिग्नल को भू-भाग कर सकते हैं और साथ ही जहां हमने अपनी चोटियों का पता लगाया है। इसलिए:

 plot(t, f, t(idx), f(idx), 'r.') 

मुझे यही मिलता है:

यहां छवि विवरण दर्ज करें

याद रखें कि यह चोटियों का पता लगाने का एक बहुत ही सरल तरीका है, लेकिन यह वही है जो मूलतः findpeaks में किया जाता है। यदि आप उपरोक्त कोड का इस्तेमाल करते हैं, तो यह मूल रूप से सभी चोटियों को मिलेगा। जैसे, कोड ऊपर दिए गए ग्राफ में दर्जनों चोटियों को मिलेगा, क्योंकि आपके स्पेक्ट्रम में स्थानीय श्रेष्ठता है आप शायद यह निर्धारित करना चाहते हैं कि कड़ी चोटियों कहाँ स्थित हैं। आम तौर पर लोग क्या करते हैं यह तय करने के लिए एक थ्रेशोल्ड का उपयोग करते हैं कि यह एक मान्य चोटी है या नहीं, यह तय करने से पहले कि पीक कितना बड़ा होना चाहिए। जैसे, आप एक सीमा को लागू कर सकते हैं, और ऐसा कुछ कर सकते हैं:

 thresh = ... ; %// Define threshold here idx = find(f1 > f2 & f1 > f3 & f1 > thresh) + 1; %// Get the locations of where we find our peaks 

आपके ग्राफ़ के लिए आपके मामले में, आप इसे सेट करना चाहते हैं ताकि आप किसी भी चोटियों को ढूंढ सकें जिनकी परिमाण 10 से अधिक बड़ा हो।


कई अन्य चीजें हैं जो findpeaks करती हैं, जैसे शोर चोटियों को छानने और कुछ अन्य मजबूत उपाय। यदि आप findpeaks का उपयोग करना चाहते हैं, तो आपको यह सुनिश्चित करना होगा कि आप संकेत पैकेज इंस्टॉल करें। आप केवल ओक्टेव कमांड प्रॉम्प्ट से pkg install उपयोग कर सकते हैं और signal पैकेज इंस्टॉल कर सकते हैं। विशेष रूप से, यह प्रयास करें:

 pkg install -forge signal 

signal पैकेज स्थापित करने के बाद, आप इसे ओक्टेव वातावरण में लोड कर सकते हैं:

 pkg load signal 

यदि आपको निर्भरता स्थापित करना है, तो आपको यह बताता है कि जब आप signal पैकेज स्थापित करने का प्रयास करेंगे। अधिक जानकारी के लिए इस लिंक को देखें: https://www.gnu.org/software/octave/doc/interpreter/Installing-and-Removing-Packages.html

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

सौभाग्य!

आप ऑक्टेव संकेत पैकेज से फिक्सेप्क्स फ़ंक्शन का उपयोग कर सकते हैं:

http://octave.sourceforge.net/signal/function/findpeaks.html