एक विशिष्ट आवृत्ति रेंज के लिए एफएफटी।


11

मैं एक संकेत को फ़्रीक्वेंसी डोमेन में परिवर्तित करना चाहूंगा। वांछित आवृत्ति रेंज है 0.1 Hzकरने के लिए 1 Hzऔर आवृत्ति संकल्प है 0.01 Hz

की नमूना दर के साथ 30 Hz, एफएफटी 15 हर्ट्ज तक आवृत्ति घटक देता है। नमूनाकरण दर को बढ़ाने से बेहतर आवृत्ति संकल्प प्राप्त होता है। हालांकि, एफएफटी व्यापक आवृत्ति रेंज देता है। मेरे मामले में, मैं सिर्फ चाहते 0.1 Hzकरने के लिए 1 Hz, FFT के लिए देता है 15 Hz(अतिरिक्त गणना)।

मेरा सवाल यह है कि क्या कोई मानक तरीका है जो मैं विशिष्ट आवृत्ति रेंज और उच्च रिज़ॉल्यूशन के साथ सिग्नल के आवृत्ति डोमेन की गणना कर सकता हूं?


2
लगता है कि आप ज़ूम FFT arc.id.au/ZoomFFT.html
एंडोलिथ

यदि आप केवल एक मानक डीएफटी करते हैं जिसमें नमूना दर 2 हर्ट्ज और अवधि 100 एस है, तो आपको 0.01 हर्ट्ज रिज़ॉल्यूशन के साथ 0 से 1 हर्ट्ज तक आवृत्ति बैंड मिलेगा। आपके 10% नमूने केवल आपकी रुचि के बैंड के बाहर होंगे। क्या यह वास्तव में इस अपेक्षाकृत छोटी गणना की दक्षता में सुधार करने के लिए एक "नहीं-तो-मानक" एल्गोरिथ्म के विवरण के काम के लायक है?
फोटॉन

बाधा यह है कि, अवधि को यथासंभव कम होना चाहिए। 100s बहुत लंबा है। हमें लगभग 10+ s
NcJie

जवाबों:


5

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


2

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

यदि आप केवल FFT में कुछ डिब्बे की गणना करना चाहते हैं (और इस प्रकार MIPS सहेजें) ऐसा करने के लिए कुछ तरीके हैं। उदाहरण के लिए स्लाइडिंग डीएफटी। इस पत्र में संदर्भ एक बहुत अच्छा विवरण देता है http://www.comm.utoronto.ca/~dimitris/ece431/slidingdft.pdf । मुझे भी लगता है कि गोएर्टज़ेल एल्गो कुछ ऐसा ही करता है, लेकिन मुझे यह पता नहीं है।

फिर FFT'ing से पहले downsampling का विकल्प है। यह शायद कुछ MIPS भी बचाएगा।

संपादित करें: बस Goertzel एल्गोरिथ्म उपयोगी नहीं होने के बारे में टिप्पणी को स्पष्ट करने के लिए। इस विकी पृष्ठ के निचले भाग में पाए जाने वाले अभिव्यक्ति में सीधे मानों को जोड़कर http://en.wikipedia.org/wiki/Goertzel_algorithm तब GoFTzel दृष्टिकोण FFT की तुलना में अधिक जटिल हो जाएगा जब FFT का आकार 128 से बड़ा हो। (एफएफटी का आकार 2 और एक मूलांक -2 कार्यान्वयन का एक कारक है)।

हालांकि, अन्य कारक हैं जिन्हें ध्यान में रखा जाना चाहिए जो कि गोएर्टज़ेल के पक्ष में जाता है। विकी पृष्ठ का हवाला देने के लिए: "एफएफटी कार्यान्वयन और प्रसंस्करण प्लेटफार्मों के सापेक्ष प्रदर्शन पर एक महत्वपूर्ण प्रभाव पड़ता है। कुछ एफएफटी कार्यान्वयन [9] आंतरिक जटिल संख्या की गणना करते हैं, जो कि मक्खी पर गुणांक उत्पन्न करने के लिए आंतरिक रूप से उनकी लागत को बढ़ाते हैं। कार्य की इकाई। "एफएफटी और डीएफटी एल्गोरिदम बेहतर संख्यात्मक दक्षता के लिए पूर्व-गणना गुणांक मानों की तालिकाओं का उपयोग कर सकते हैं, लेकिन इसके लिए बाह्य मेमोरी में बफर किए गए गुणांक मानों तक अधिक पहुंच की आवश्यकता होती है, जिससे कैश कॉन्ट्रेशन बढ़ सकता है। । "

"दोनों एल्गोरिदम जटिल-मूल्यवान इनपुट डेटा के बजाय वास्तविक-मूल्यवान का उपयोग करते समय लगभग 2 दक्षता का एक कारक प्राप्त करते हैं। हालांकि, ये लाभ Goertzel एल्गोरिथ्म के लिए स्वाभाविक हैं, लेकिन वास्तविक को बदलने के लिए विशेष एल्गोरिथ्म वेरिएंट का उपयोग किए बिना FFT के लिए प्राप्त नहीं किया जाएगा। -प्राप्त डेटा


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

साभार @MattL Goertzel एल्गोरिथ्म कमजोरी को इंगित करने के लिए।
NcJie

1

आवृत्ति संकल्प जहाँ नमूना आवृत्ति है और FFT आकार है। तो वास्तव में नमूना आवृत्ति बढ़ने से आवृत्ति संकल्प बढ़ जाता है (मेरा मानना ​​है कि "बेहतर" आप कम मतलब है)। इसलिए आपको FFT साइज़ बढ़ाना चाहिए , यानी फ़्रीफ़ॉल रिज़ॉल्यूशन को कम करने के लिए डेटा के एक ब्लॉक में FFT द्वारा संसाधित किए जाने वाले नमूनों की संख्या। अपने उदाहरण में आपको वांछित आवृत्ति संकल्प को प्राप्त करने के लिए कम से कम 300 नमूनों की आवश्यकता होगी।

Δf=fsN
fsNN

यदि कम्प्यूटेशनल जटिलता के कारण को नहीं बढ़ाया जा सकता है, तो एफएफटी से पहले बैंडलेड सिग्नल को आवृत्ति शिफ्ट किया जा सकता है। बता दें कि निरंतर सिग्नल है, इसकी केंद्र आवृत्ति और इसकी बैंडविड्थ है। का नमूना संस्करण है , जिसका नाम । फिर एक आवृत्ति बदलाव जहां । नमूने की आवृत्ति को अब कम किया जा सकता है क्योंकि सिग्नल में कट-ऑफ आवृत्ति के विपरीत की कट-ऑफ आवृत्ति होती हैNs(t)fcfbx(n)s(t)x(n)=s(n/fs)

x~(n)=x(n)ej2πk0/N
k0=fc/fsfb~ रों~ एक्स ( एन ) एम = रों / एनfb+fc यह आवृत्ति परिवर्तन से पहले था । नए नमूने आवृत्ति प्रमेय नमूने के अनुसार से अधिक होना या करने के लिए बराबर होना चाहिए और इस तरह का एक पहलू से downsampled जा सकती है, इस प्रकार स्थिर रखते हुए फ़्रीक्वेंसी रिज़ॉल्यूशन बढ़ाना ।f~sfbx~(n)M=fs/fbN

यह विधि केवल तभी काम करती है जब को सख्ती से बंद किया जाए। यदि ऐसा नहीं है, तो वांछित आवृत्ति बैंड को फ़िल्टर करने के लिए बैंडपास फ़िल्टरिंग को अग्रिम में लागू किया जाना है। यह भी ध्यान दें कि एक आंशिक संख्या द्वारा डाउनसम्पलिंग भी अतिरिक्त कम्प्यूटेशनल जटिलता का परिचय देगा।एमs(t)M

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