शून्य-पैड वाले एफएफटी के केवल कम गुणांक की कुशलता से गणना कैसे करें


14

मुझे एक एल्गोरिथ्म मिला है जो शून्य 4N को एक अनुक्रम देता है, एक एफएफटी करता है, और केवल उत्पन्न आवृत्ति एनएन से बाहर सबसे कम आवृत्ति एन अंक का उपयोग करता है।

यह बहुत सारे बर्बाद काम की तरह लगता है, किसी भी विचार यह कैसे तेजी से किया जा सकता है?


@Dilip। मैं FFTW या IMKL पुस्तकालयों का उपयोग करूँगा। मैं निश्चित रूप से मेरी kissfft पुस्तकालय इस्तेमाल कर सकते हैं, लेकिन यह एक गति नुकसान बनाम दूसरों पर शुरू है
मार्क Borgerding

2
मैंने उस टिप्पणी को हटा दिया, जिसका आपने जवाब दिया था क्योंकि मेरा मतलब था कि डीमिशन-इन-फ़्रीक्वेंसी है, लेकिन इसके बजाय डेमिनेशन-इन-टाइम लिखा। लेकिन यहां तितली के आरेख को देखें । यदि आप एफएफटी के लिए पहले दो चरणों के लिए कुछ कोड लिखते हैं , तो बड़ी संख्या में शून्य को ध्यान में रखते हैं और संबंधित गुणा को छोड़ते हैं, फिर आप एन -एफएफटी के लिए एफएफटी लाइब्रेरी सबरूटीन को 4 बार कॉल कर सकते हैं जिसमें इनपुट वैक्टर भरे हुए है"। बेशक, आपको प्रत्येक सबरूटीन कॉल से केवल एन / 4 आउटपुट की आवश्यकता है। 4N4NN/4
दिलीप सरवटे 17

जवाबों:


2

यदि आप केवल कुछ डिब्बे हैं, तो निम्न आपके लिए बहुत कुशल हो सकते हैं:
1. बस प्रत्येक आवृत्ति पर डीएफटी की आवश्यकता होती है।
2. प्रश्न में प्रत्येक आवृत्ति के लिए Goertzel एल्गोरिथ्म का उपयोग करें।


मार्क ने कहा कि उन्हें 4 एन में से डिब्बे की आवश्यकता है , इसलिए 1) एक उचित विकल्प नहीं लगता है। Goertzel एल्गोरिथ्म इस तरह के ऑनलाइन गणना के रूप में डेटा प्राप्त कर रहे हैं, छोटे भंडारण, आदि के रूप में फायदे हैं, लेकिन जरूरत है 2 एन + 4 बिन प्रति गुणा है, जबकि प्रत्येक बिन होर्नर के शासन के माध्यम से एक बहुपद मूल्यांकन की गणना इस प्रकार केवल जरूरत एन गुणा। इस प्रकार, 2) एक विशेष रूप से उचित विकल्प प्रतीत नहीं होता है। N4N2N+4N
दिलीप सरवटे

आप सही हैं, प्रश्न को पढ़ते हुए मैंने किसी तरह विवरण को याद किया। जब मैं जवाब दे रहा था मैं सोच रहा था, "जी, यह जानना अच्छा होगा कि वह कितने डिब्बे चाहता है ..." लगता है कि मुझे जवाब देने से पहले प्रश्न को फिर से पढ़ना चाहिए।
जैकब

2

शून्य से 4X लंबाई तक पैडिंग, लंबे एफएफटी की गणना करता है, और फिर केवल नीचे 1/4 वें डिब्बे का उपयोग करके मूल लंबाई एफएफटी के सिन इंटरपोलेशन को विंडो में लगभग समान परिणाम उत्पन्न करता है।

तो बस मूल FFT लंबाई का उपयोग करें और एक उपयुक्त विंडो चौड़ाई के साथ 3 चरण Sinc प्रक्षेप कर्नेल का उपयोग करके प्रक्षेप करें।


0

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


x(z)=i=0N1xizixiN1Nαn,0nN1α=exp(j2π/N)NNXn=x(αn)x(z)Nx(z)βn,0nN1β=exp(j2π/4N)यूनिट सर्कलकेपहले चतुर्थांशपर एन अंक। मैं यह नहीं देखता कि रैखिक, तख़्ता आदि प्रक्षेप कैसे काम करने वाले हैं। कृपया समझाएँ। N
दिलीप सरवटे

β4=αx(β4k)x(β4k)=x(αk)

मुझे संदेह है कि बड़ा एफएफटी करने की तुलना में तेजी से एक सभ्य प्रक्षेप करना मुश्किल होगा।
मार्क बोरर्जिंग

मान लीजिए कि आपके पास 128 पॉइंट FFT और 12800Hz नमूना दर है। एक 128 पॉइंट FFTs 0Hz, 100Hz, 200 Hz, 300Hz, आदि पर मान देता है। शून्य पैडिंग क्या करता है, आवृत्ति रिज़ॉल्यूशन को 0 Hz, 25Hz, 50 Hz, 100Hz आदि को बढ़ाना है। इसे इंटरपोलेशन समस्या के रूप में देखा जा सकता है। मुझे गणितीय रूप से पूर्वनिर्धारित करने के लिए आपको 128 वें क्रम के सर्कुलर सिनकोपरेशन करने की आवश्यकता है। यह निश्चित रूप से परेशान करने लायक नहीं है, लेकिन आवेदन और परिशुद्धता के आधार पर बहुत कम क्रम के प्रक्षेप की आवश्यकता होती है जो काफी अच्छा होगा
हिल्मार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.