मैंने यहां विभिन्न एफएफटी प्रश्न देखे हैं लेकिन मैं कार्यान्वयन के हिस्से पर उलझन में हूं। वास्तविक समय में एफएफटी करने के बजाय, मैं इसे ऑफ़लाइन करना चाहता हूं। मान लें कि मेरे पास float[] audio
में कच्चा डेटा है। नमूना दर 44100 है और इसलिए audio[0] to audio[44099]
में 1 सेकंड का ऑडियो होगा। अगर मेरा एफएफटी फ़ंक्शन विंडोिंग (जैसे हैनिंग) को संभालता है, तो क्या मैं बस पूरे audio
बफर को फ़ंक्शन में एक ही बार में डाल सकता हूं? या, क्या मुझे 4096 (मेरी खिड़की के आकार) के टुकड़ों में ऑडियो काटना है और फिर उस एफएफटी में इनपुट करना है जो तब शीर्ष पर विंडोिंग फ़ंक्शन करेगा?एफएफटी - खिड़की कब?
उत्तर
आपको अपने इनपुट डेटा को एक अलग बफर में कॉपी करने और इसे सही प्रारूप में प्राप्त करने की आवश्यकता हो सकती है, उदा। यदि आपका एफएफटी जगह में है, या यदि इसे अंतःस्थापित जटिल डेटा (असली/काल्पनिक) की आवश्यकता है। हालांकि यदि आपका एफएफटी दिनचर्या पूरी तरह से वास्तविक इनपुट ले सकता है और यह जगह नहीं है (यानी गैर विनाशकारी) तो आप उचित आकार पैरामीटर के साथ मूल नमूना डेटा में पॉइंटर पास कर सकते हैं।
आमतौर पर ऑडियो के 1s के लिए, उदा। भाषण या संगीत, आप एक एफएफटी आकार चुनेंगे जो ऑडियो के एक उचित स्थिर खंड से मेल खाता है, उदा। 10 एमएस या 20 एमएस। तो 44.1 केएचजेड पर आपका एफएफटी आकार 512 या 1024 कह सकता है। फिर आप अपने बफर के माध्यम से आगे बढ़कर और प्रत्येक शुरुआती बिंदु पर एक नया एफएफटी करके लगातार स्पेक्ट्रा उत्पन्न करेंगे। ध्यान दें कि इन लगातार बफर को ओवरलैप करना आम बात है, आमतौर पर 50% तक। तो यदि एन = 1024 आपका पहला एफएफटी नमूने 0..1023 के लिए होगा, तो आपका दूसरा नमूने 512..1535, फिर 1024..2047, आदि
मदद पॉल के लिए धन्यवाद। मैं ऐप्पल के त्वरित फ्रेमवर्क का उपयोग करने जा रहा हूं, जो मुझे लगता है कि एक जगह में एफएफटी करता है, इसलिए मुझे लगता है कि मुझे डेटा को एक अलग बफर में हेरफेर करने की आवश्यकता है। तो अगर मेरे पास एक गीत है जो 180 सेकंड लंबा है, तो मैं बस बफर पर फिर से सक्रिय करता हूं जैसा कि वर्णन किया गया है और एफएफटी को एन = 7938000 (44100 * 180) तक निष्पादित करता है? – Skoder
यदि फ़ंक्शन का नाम "आईपी" में समाप्त होता है तो यह जगह में है, उदा। 'VDSP_fft_zrip'। तो हां, इनपुट डेटा के प्रत्येक हिस्से को एक उपयुक्त एफएफटी बफर में कॉपी करें, एक विंडो फ़ंक्शन (उदाहरण के लिए हन) लागू करें, एफएफटी, गणना पावर स्पेक्ट्रम या जो भी आप करना चाहते हैं, स्टोर करें और/या इस खंड के लिए पावर स्पेक्ट्रम प्रदर्शित करें, आगे बढ़ें अगले खंड में ... –
यह भी देखें: http://stackoverflow.com/questions/3398753/using-the-apple-fft-and-accelerate-framework –
आपके द्वारा उठाए गए हिस्से के आकार या खिड़की की लंबाई को नियंत्रित करता है आवृत्ति संकल्प और एफएफटी परिणाम का समय संकल्प। आपको यह निर्धारित करना होगा कि आप कौन सा चाहते हैं या किस व्यापार को बंद करना है।
लंबी खिड़कियां आपको बेहतर आवृत्ति संकल्प देती हैं, लेकिन खराब समय संकल्प। छोटी खिड़कियां, इसके विपरीत। प्रत्येक एफएफटी परिणाम बिन में खिड़की के आकार (आयताकार, वॉन हन, इत्यादि) के आधार पर एफएफटी लंबाई से विभाजित नमूना दर लगभग 1 से 2 गुणा की आवृत्ति बैंडविड्थ होगी, केवल एक ही आवृत्ति नहीं। यदि आपका पूरा डेटा हिस्सा स्थिर है (आवृत्ति सामग्री नहीं बदली जाती है), तो आपको किसी भी समय संकल्प की आवश्यकता नहीं हो सकती है, और आपके 1 सेकंड डेटा में 1 से 2 हर्ट्ज आवृत्ति "रिज़ॉल्यूशन" के लिए जा सकती है। कई छोटी एफएफटी विंडो औसत से आपके वर्णक्रमीय अनुमानों के अंतर को कम करने में मदद मिल सकती है।
सुनिश्चित नहीं है कि आप इससे परिचित हैं, लेकिन मैं ऑडियोसर्फ के समान कुछ बनाने की कोशिश कर रहा हूं (यह वीडियो http://www.youtube.com/watch?v= में 20 सेकंड के बारे में टेम्पो पहचान का एक अच्छा उदाहरण दिखाता है 2EsVyEnhxWY)। ऑडियोसर्फ वास्तविक समय में इसे करने के बजाए ऑडियो प्रीप्रोकैस करता है और मुझे पूरा यकीन नहीं था कि यह कैसे किया गया था। – XSL
@SSL - आप टेम्पो पहचान के लिए केवल 1 सेकंड डेटा के एफएफटी क्यों देख रहे हैं? या यदि यह ओपीएस मूल प्रश्न से परे कुछ के बारे में है, तो शायद आपको SO पर अपना नया प्रश्न पूछना चाहिए। – hotpaw2
यह मूल प्रश्न से परे था, लेकिन मैं ओपी के समान चीज के बारे में उत्सुक था। मुझे अभी जानकारी की आवश्यकता नहीं है, इसलिए जब मैं उस पुल को पार करता हूं तो मैं एक नया धागा बनाउंगा। – XSL
संपूर्ण डेटा सेट (ओपी के मामले में, डेटा के 1-सेकंड का प्रतिनिधित्व करने वाले 44100 नमूने) में एक एफएफटी की गणना करना है या नहीं, या पूर्ण डेटा सेट के एफएफटी के छोटे सबसेट की श्रृंखला को करने के लिए, डेटा, और एफएफटी के उद्देश्य के उद्देश्य पर निर्भर करता है।
यदि डेटा पूर्ण डेटा सेट पर अपेक्षाकृत स्थिर रूप से स्थिर है, तो पूरे डेटा सेट पर एक एफएफटी शायद इसकी आवश्यकता है।
हालांकि, यदि डेटा डेटा सेट पर स्पेक्ट्रिक रूप से गतिशील है, तो डेटा के छोटे सबसेट पर एकाधिक स्लाइडिंग एफएफटी डेटा के अधिक सटीक समय-आवृत्ति प्रतिनिधित्व को बनाएगा।
नीचे दी गई साजिश ए 4 नोट खेलने वाले एक ध्वनिक गिटार के पावर स्पेक्ट्रम को दिखाती है। ऑडियो सिग्नल 44.1 केएचजेज़ पर नमूना था और डेटा सेट में 131072 नमूने हैं, लगभग 3 सेकंड डेटा। यह डेटा सेट एक हन विंडो फ़ंक्शन के साथ पूर्व-गुणा किया गया था।
नीचे साजिश 16384 नमूने (0 16,383 करने के लिए) ध्वनिक गिटार ए 4 टिप्पणी का पूरा डेटा सेट से लिया का एक सबसेट की शक्ति स्पेक्ट्रम को दर्शाता है। यह सबसेट भी एक हन विंडो फ़ंक्शन के साथ पूर्व-गुणा किया गया था।
सूचना कैसे सबसेट के वर्णक्रमीय ऊर्जा वितरण पूर्ण डेटा सेट के वर्णक्रमीय ऊर्जा वितरण से काफी अलग है।
अगर हम पूर्ण डेटा सेट से सबसेट निकालने के लिए, एक स्लाइडिंग 16384 नमूना फ्रेम का उपयोग करके, और प्रत्येक फ्रेम के पावर स्पेक्ट्रम की गणना करते हैं, तो हम पूर्ण डेटा सेट की सटीक समय-आवृत्ति तस्वीर तैयार करेंगे।
संदर्भ:
रियल ऑडियो संकेत डेटा, हेन खिड़की समारोह, भूखंडों, FFT, और वर्णक्रमीय विश्लेषण यहाँ किया गया:
Fast Fourier Transform, spectral analysis, Hann window function, audio data
निश्चित रूप से यह FFT पुस्तकालय की बारीकियों पर निर्भर करता है कि आप का उपयोग कर रहे हैं। – Mankarse
यह सवाल dsp.stackexchange.com के लिए एक बेहतर फिट है। इसे स्थानांतरित किया जाना चाहिए? –
@Mankarse - हाँ, क्षमा करें, मुझे और अधिक विशिष्ट होना चाहिए था। मेरे पास तीन अलग-अलग एफएफटी लिब थे और मुझे यकीन नहीं था कि मैं किस का उपयोग करने जा रहा था। मैंने ऐप्पल के त्वरित ढांचे में एक का उपयोग करने का फैसला किया है। – Skoder