एक तरह से जाने के लिए एक fft उपयोग करने के लिए वास्तव में है। चूंकि एफएफटी आपको सिग्नल की फ्रीक्वेंसी प्रस्तुति देता है, इसलिए आप अधिकतम की तलाश करना चाहते हैं, और चूंकि एफएफटी एक जटिल सिग्नल है, इसलिए आप पहले पूर्ण मूल्य लेना चाहेंगे। सूचकांक अधिकतम ऊर्जा के साथ सामान्यीकृत आवृत्ति के अनुरूप होगा। आखिरकार, अगर आपके सिग्नल में ऑफसेट है, जैसा कि आप दिखाते हैं, तो आप एफएफटी लेने से पहले उस ऑफ़सेट से छुटकारा पाना चाहते हैं ताकि आपको डीसी घटक का प्रतिनिधित्व करने वाले मूल में अधिकतम न मिले।
सब कुछ मैं एक पंक्ति में डाल में वर्णित किया जाएगा:
[maxValue,indexMax] = max(abs(fft(signal-mean(signal))));
जहां indexMax सूचकांक जहां अधिकतम fft मूल्य पाया जा सकता है है।
नोट: इंडेक्समैक्स से ब्याज की वास्तविक आवृत्ति तक पहुंचने के लिए, आपको एफएफटी की लंबाई एल (आपके सिग्नल की लंबाई के समान), और नमूना आवृत्ति एफएस जानना होगा। संकेत आवृत्ति तो हो जाएगा:
frequency = indexMax * Fs/L;
वैकल्पिक रूप से, तेजी से और काफी अच्छी तरह से भी काम कर रहे संकेत के आधार पर, अपने संकेत के autocorrelation ले:
autocorrelation = xcorr(signal);
और पहली अधिकतम के बाद होने वाली पाते हैं autocorrelation का केंद्र बिंदु। (स्वत: सहसंबंध मध्य में अधिकतम के साथ सममित होगा।) अधिकतम खोजकर, आपको पहली जगह मिलती है जहां स्थानांतरित सिग्नल स्वयं की तरह कम या कम दिखता है। अर्थात। आपको अपने सिग्नल की अवधि मिलती है। चूंकि इसकी अवधि के एकाधिक द्वारा स्थानांतरित सिग्नल हमेशा अपने जैसा दिखता है, आपको यह सुनिश्चित करने की ज़रूरत है कि आप जो अधिकतम पाते हैं वह वास्तव में सिग्नल की अवधि से मेल खाता है और इसके गुणकों में से एक नहीं है।
आपके सिग्नल में शोर के कारण, पूर्ण अधिकतम अवधि की अवधि के दौरान आपकी अधिकतम अवधि में पूर्ण अधिकतम हो सकता है। तो उस शोर के लिए खाते में, आप स्वत: सहसंबंध (स्वत: सहसंबंध (लंबाई (autocorrelation)/2 + 1) का पूर्ण अधिकतम ले लेंगे, और उसके बाद यह पता लगाएं कि ऑटोोकॉर्बेलेशन कहां से बड़ा है, कहें, पहले के लिए उस अधिकतम मूल्य का 9 5% सिग्नल के दूसरे भाग में समय। 95%, 99%, या कुछ अन्य नंबर इस बात पर निर्भर करेगा कि कितना शोर आपके सिग्नल को दूषित करता है।
अद्यतन: मुझे एहसास हुआ कि मैंने आपको अपने सिग्नल की "फ्रीक्वेंसी" का मतलब माना है अधिकांश ऊर्जा के साथ पिच या बेस हार्मोनिक या फ्रीक्वेंसी, हालांकि आप इसे देखना चाहते हैं। यदि आवृत्ति के अनुसार आप अपने सिग्नल की फ्रीक्वेंसी प्रस्तुति का मतलब रखते हैं, तो पहले अनुमान के लिए, आप बस एफएफटी के पेट को प्लॉट करना चाहते हैं ऊर्जा कहां है:
plot(abs(fft));
यदि आप समझना चाहते हैं कि एक पेट क्यों है, या एफएफटी के चरण का प्रतिनिधित्व न करके आप कौन सी प्रासंगिक जानकारी खो रहे हैं, तो आप डीएफटी ट्रांसफॉर्म के बारे में कुछ और पढ़ना चाहेंगे जो आपको समझ में आता है।
संकेत मेरे पास है कि कुछ एक दबाव नापने का यंत्र का उपयोग कर मापा जाता दोलनों से है। मैं उन परिशोधन की आवृत्ति को खोजना चाहता हूं। आपके द्वारा पोस्ट की गई 'fft' विधि का उपयोग करके, मुझे आवृत्ति के लिए 0.0357 मिलते हैं, लेकिन साजिश को देखकर, प्रति सेकंड लगभग 10 चक्र होते हैं, इसलिए मुझे आवृत्ति के लिए लगभग 10 नहीं मिलना चाहिए? – edc1591
यदि आपके पास प्रति सेकेंड 10 ऑसीलेशन हैं, तो यह 1 की अवधि है या वास्तव में 10 हर्ट्ज की आवृत्ति है। इंडेक्समैक्स, एल, और एफएस के लिए मूल्य क्या हैं? यह भी पुष्टि करने के लिए प्लॉट (एबी (एफएफटी)) चलाएं कि आपके पास एक बड़ा स्पाइक है और यह कि इंडेक्स मैक्स सही सूचकांक है जहां यह स्पाइक होता है। मैं उस ग्राफ में नोटिस करता हूं जो आप दिखाते हैं कि आपके सिग्नल में नकारात्मक ऑफसेट है, जिसका मतलब है कि डीसी घटक का प्रतिनिधित्व करने वाले आपके एफएफटी के लिए शून्य के करीब एक स्पाइक भी होगा। यह हो सकता है कि आप क्या माप रहे हैं। यदि ऐसा है, तो उस डीसी घटक को हटाने के लिए (सिग्नल-माध्य (सिग्नल)) का एफएफटी लें। – Lolo
जो स्पाइक मैं प्राप्त कर रहा था वह शून्य पर था (indexMax = 1)। मैंने मतलब (सिग्नल) घटाकर कहा था और अब मुझे आवृत्ति के लिए 9.8 हर्ट्ज मिल रहा है, जो सही लगता है! मदद के लिए बहुत बहुत धन्यवाद!! – edc1591