MATLAB:


11

MATLAB में, विश्लेषण के लिए विचार करने से पहले fftऔर / या ifftफ़ंक्शंस के आउटपुट को अक्सर अतिरिक्त प्रसंस्करण की आवश्यकता होती है।

मैंने जो सही है उस पर कई अलग-अलग राय सुनी हैं:

  • स्केलिंग

    मैथवर्क्स बताता है कि fftऔर ifftफ़ंक्शन निम्न समीकरणों पर आधारित हैं: start

    X[k]=11n=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=1Nk=1NX[k]e+j2π(k1)(n1)N,where1nN
  • सिग्नल की लंबाई के आधार पर स्केलिंग

    मेरे साथी आमतौर पर प्रोसेसिंग के तुरंत बाद डेटा को द्वारा स्केल करते हैं । (हम स्केलिंग से पहले कच्चे डेटा पर विचार नहीं करते हैं ।)1Nfft
    fft

    %% प्रदर्शन करना
    X_f = fft (x, n_sample, 1) / n_sample; डेटा में नमूनों की संख्या से% fft को सामान्य किया जाना चाहिए। % यह कन्वेंशन सॉफ्टवेयर डेवलपर (मैथवर्क्स) द्वारा निर्धारित किया गया था।

    क्या ये सही है?

    1. यदि ऐसा है, तो MATLAB ifftफ़ंक्शन को यह उम्मीद क्यों है कि हमने पहले से ही नहीं बढ़ाया है ?1/N
    2. क्या कोई MATLAB ifftफ़ंक्शन या फ़ंक्शन विकल्प है जो स्वचालित रूप से द्वारा स्केल नहीं करता है ?1/N

    वैकल्पिक रूप से, क्या एक बेहतर सम्मेलन है जिसे हमें रखने में उपयोग करना चाहिए ? उदाहरण के लिए, रखने में के बजाय , या एक रखने दोनों समीकरणों में, एक के बजाय ?1 / एन 1 / 1/N1/Nfftifft 1/एन1/N1/N

  • नमूना अवधि द्वारा स्केलिंग

    मैंने सुना है कि fftऔर ifftफ़ंक्शंस मान लेते हैं कि नमूना अवधि , और यह कि फ़ंक्शंस के सत्य होने के लिए, निम्नलिखित को लागू करने की आवश्यकता होगी:Tsampling=1/fsampling=1

X[k]=1Tsamplingn=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=TsamplingNk=1NX[k]e+j2π(k1)(n1)N,where1nN

लिंक देखें:

  • लिंक 1 (मैट सीज़ेलोव्स्की को डॉ। सीस द्वारा टिप्पणी देखें)
  • लिंक 2 (डॉ। सेइस के रिक रॉसन बनाम जवाब देखें)
  • लिंक 3 (मैट द्वारा टिप्पणी देखें (संदेश: 7/16) और पूरी द्वारा टिप्पणी (14/16)
  • लिंक 4 (पृष्ठ 10 देखें, स्लाइड [1,1])
  • लिंक 5 (देखें पृष्ठ 8 + 9) [ऐसा लगता है कि वह एफएफटी और आईएफएफटी के लिए उलटा सम्मेलन का उपयोग कर रहा है]।

क्या ये सच है?

मैं विशेष रूप से हैरान हूं क्योंकि मुझे विकिपीडिया पर कोई डीएफटी या डीटीएफटी समीकरण नहीं मिला है जिसमें नमूना अवधि शामिल है।


2
BTW, कैंडो इसे केवल उसी रूप में बता रहा है जैसे कि (MATLAB के साथ): लेकिन मैं कि MATLAB के इस hardwired सम्मेलन डीसी बिन # 1 में (या आवृत्ति घटक के आयाम डाल करने के लिए कहना हैबिन में)ड्राइव मुझे कमबख्त nutz !!!!
X[k]=n=1Nx[n]ej2π(k1)(n1)N,where1kNx[n]=1Nk=1NX[k]e+j2π(k1)(n1)N,where1nN
k + kk+1
रॉबर्ट ब्रिस्टो-जॉनसन

जवाबों:


6

आगे एफएफटी को 1 / एन के पैमाने पर रखना या न करना इस बात पर निर्भर करता है कि आप आगे के विश्लेषण के लिए कौन सा परिणाम चाहते हैं: ऊर्जा (पार्सल की पहचान को संरक्षित करना), या आयाम (ऊंचाई या वोल्ट को मापना, आदि)।

यदि आप ऊर्जा को मापना या उसका विश्लेषण करना चाहते हैं, तो 1 / N से स्केल न करें, और समान आयाम का एक लंबा साइनसॉइड एक बड़ा FFT परिणाम उत्पन्न करेगा, जो लंबे सिग्नल की अधिक ऊर्जा के समानुपाती होगा।

थोड़ा अधिक सामान्यतः, यदि आप आयामों को मापना या उनका विश्लेषण करना चाहते हैं, तो एक छोटे से संकेत के रूप में एक ही एफएफटी परिणाम के बारे में उत्पादन करने के लिए एक लंबा साइनसॉइड (इस प्रकार सटीक एक ही आयाम में अधिक ऊर्जा के साथ) प्राप्त करने के लिए, आपको नीचे स्केल करने की आवश्यकता होगी लंबाई के अनुपात में एफएफटी योग। यह अनुपात reference_length / N हो सकता है, जो कि कभी-कभी 1 / N होता है यदि सिस्टम इनपुट लाभ 1.0 आयामों या इकाइयों के लिए 1.0 है, जिसमें समय अंतराल आयाम शामिल हैं, जिसे आप अपने आगे के विश्लेषण में उपयोग करना चुनते हैं। आपको आनुपातिक रूप से स्केल करने की आवश्यकता है क्योंकि एक डीएफटी एक योग है: जितना अधिक आप समान वस्तुओं का योग करते हैं, उतना बड़ा परिणाम होता है।

इसलिए। ऊर्जा या आयाम। तुम्हें कौनसा चाहिए?

अब यदि आप आगे FFT को स्केल करते हैं, तो आपको व्युत्क्रम को स्केल नहीं करना चाहिए ताकि IFFT (FFT (x)) == x। या इसके विपरीत करते हैं।

स्केलिंग के लिए 1 / sqrt (N) मेरे लिए ऐसा प्रतीत होता है जब किसी को किसी प्रमाण के लिए औपचारिक समरूपता की आवश्यकता होती है, या किसी प्रकार की हार्डवेयर पाइपलाइन का निर्माण करते समय जहां DFT और / के लिए अंकगणितीय इकाइयों / द्वार की संख्या और IDFT के लिए समान होना चाहिए। लेकिन आपको किसी भी विशिष्ट प्रकार के इंजीनियरिंग विश्लेषण के लिए ऊर्जा या आयाम का अच्छा प्रत्यक्ष माप नहीं मिलता है।


जब आप कहते हैं कि "अगर आप ऊर्जा को मापने के लिए चाहते हैं, तो द्वारा पैमाने पर नहीं है " ... मैं द्वारा पैमाने की जरूरत नहीं होगी 1 / 1/N ताकि परिवर्तन एकात्मक है और ऊर्जा को संरक्षित करता है? या ऐसा इसलिए है क्योंकि मुझे ऊर्जा प्राप्त करने के लिए पूरे सिग्नल को स्क्वायर करने की आवश्यकता है जो1/एनप्रभावी रूप सेउपज देता है? अगर यह सच है, फिर भी, क्याहैस्पेक्ट्रम द्वारा बढ़ाया1/1/N1/N वास्तव में मुझे तब दिखा? 1/N
9

इसके अतिरिक्त, जब "इस प्रकार ठीक उसी आयाम पर अधिक ऊर्जा के साथ" कहा जाता है ... तो क्या आपका मतलब "आवृत्ति" नहीं होगा?
LCsa

7

डीएसपी में मतलाब द्वारा इस्तेमाल किया जाने वाला स्केलिंग सम्मेलन आम है। आप एकात्मक डीएफटी का उपयोग भी कर सकते हैं जहां डीएफटी और आईडीएफटी दोनों को 1 / un के कारक द्वारा बढ़ाया जाता है । आपDFT के लिएकारक1/NऔरIDFT के लिएकारक1 काभी उपयोग कर सकते हैं। जब तक आप सुसंगत होते हैं तब तक यह वास्तव में कोई मायने नहीं रखता है (इसके अलावा संख्यात्मक विचारों के अलावा, विशेष रूप से फिक्स्ड-पॉइंट कार्यान्वयन का उपयोग करते समय)। तो कोई "बेहतर" कन्वेंशन नहीं हैं, बस "कन्वेंशन" हैं, और आपको केवल उस पर सहमत होने की आवश्यकता है जिस पर आप उपयोग करते हैं।1/N1/N1

टिप्पणी

डेटा में नमूनों की संख्या से% fft को सामान्य किया जाना चाहिए।
% यह कन्वेंशन सॉफ्टवेयर डेवलपर (मैथवर्क्स) द्वारा निर्धारित किया गया था।

गलत है। कोई नहीं कहता है कि आपको एफएफटी के परिणाम को सामान्य करना होगा । यदि आप इसे करने के लिए स्वतंत्र हैं।

TT

(1)X(2πkNT)Tn=0N1x(nT)ej2πkn/N,0k<N

TNx(t)X(ω)(1)Nx(t)Tx(t)t[0,NT]। निरंतर उत्तर-फूरियर रूपांतरण को अनुमानित करने के लिए डीएफटी का उपयोग करने के बारे में अधिक विवरण इस उत्तर में पाया जा सकता है ।


2
के लिए क्या downvote है? कृपया टिप्पणी करें।
मैट एल।

1
मैं आमतौर पर गुप्त मतदान द्वारा मतदान करता हूं, लेकिन मैं इस बार अपवाद बनाऊंगा। डीएफटी के साथ जो कर रहा है, उसके आधार पर, निश्चित रूप से दूसरों की तुलना में "बेहतर" कन्वेंशन हैं। (लेकिन सभी परिस्थितियों में कोई भी सम्मेलन दूसरों से बेहतर नहीं है।)
रॉबर्ट ब्रिस्टो-जॉनसन

5

विशेष रूप से यह सम्मेलन के बारे में एक सवाल है, मैं MATLAB के हास्यास्पद सम्मेलन को सुदृढ़ नहीं करूंगा और केवल सही और उचित सम्मेलन या सम्मेलनों के साथ जवाब दूंगा । यानी DFT के लिए MATLAB का अनुक्रमण सही और उचित नहीं है, लेकिन मैं तीन सामान्य स्केलिंग सम्मेलनों में से किसके बारे में बहुत अधिक अज्ञेय हूं।

0n<N0k<Nx[n]NX[k]N

x[n+N]=x[n] nZ
X[k+N]=X[k] kZ

x[n]X[k]

h[n]x[n]i=0N1h[i]x[ni]=i=0N1x[i]h[ni]
W[k]X[k]i=0N1W[i]X[ki]=i=0N1X[i]W[ki]

तो दूसरे पर एक सम्मेलन का एकमात्र लाभ (दोनों सम्मेलनों को मान्य मानते हैं) कुछ प्रमेयों की अभिव्यक्ति की सादगी के बारे में हो सकता है।


DFT के लिए सबसे आम स्केलिंग कन्वेंशन:

DFT{x[n]}X[k]n=0N1x[n]ej2πkn/NiDFT{X[k]}x[n]=1Nk=0N1X[k]e+j2πkn/N

"टाइम डोमेन" में सर्कुलर कनविक्शन के बारे में सरलता का लाभ

DFT{h[n]x[n]}=H[k]X[k]

लेकिन अगर आपको "फ़्रीक्वेंसी डोमेन" में हल करने के बारे में चिंता करनी है तो एक स्केलिंग कारक है :

iDFT{W[k]X[k]}=1Nw[n]x[n]

Parseval का प्रमेय एक स्केलिंग कारक है जिसके बारे में भी चिंता करने की ज़रूरत है।

n=0N1|x[n]|2=1Nk=0N1|X[k]|2

और द्वंद्व प्रमेय:

DFT{X[n]}=Nx[k]
iDFT{x[k]}=1NX[n]

DFT के लिए अन्य सामान्य स्केलिंग सम्मेलन:

iDFT{X[k]}x[n]k=0N1X[k]e+j2πkn/NDFT{x[n]}X[k]=1Nn=0N1x[n]ej2πkn/N

फूरियर सीरीज़ के लिए, अवधारणा के अनुसार, थोड़ा छोटा होने का फायदा है, जहाँ हैं फूरियर फ़ंक्शंस और फूरियर गुणांक हैं। इसलिए यदि आप कच्चे समय-डोमेन डेटा, को देख रहे हैं, और नमूनों के बफर में चक्रों के साथ एक sinusoid देखें और (शून्य से शिखर) आयाम , तो इसका मतलब होगा कि ।ejωknej(2πk/N)nX[k]x[n]kNA|X[k]|=|X[k]|=|X[Nk]|=A2

फ्रिक्वेंसी डोमेन में सर्कुलर कनवल्शन के संबंध में भी अधिक सरलता है

iDFT{W[k]X[k]}=w[n]x[n]

लेकिन एक स्केलिंग कारक है जिसके बारे में आपको चिंता करने की ज़रूरत है यदि आप समय क्षेत्र में हल कर रहे हैं :

DFT{h[n]x[n]}=1NH[k]X[k]

Parseval का प्रमेय एक स्केलिंग कारक है जिसके बारे में भी चिंता करने की ज़रूरत है।

1Nn=0N1|x[n]|2=k=0N1|X[k]|2

और द्वंद्व प्रमेय:

DFT{X[n]}=1Nx[k]
iDFT{x[k]}=NX[n]

एकात्मक एफ टी के लिए स्केलिंग सम्मेलन में अपने उलटा और बरकरार रखता है ऊर्जा के साथ स्केलिंग में समान होता है को बदलने या उलटा परिणत:

DFT{x[n]}X[k]1Nn=0N1x[n]ej2πkn/NiDFT{X[k]}x[n]=1Nk=0N1X[k]e+j2πkn/N

या तो डोमेन या फ़्रीक्वेंसी डोमेन में कनवल्शन के बारे में चिंता करने के लिए समान स्केलिंग कारक होता है:

DFT{h[n]x[n]}=1NH[k]X[k]

iDFT{W[k]X[k]}=1Nw[n]x[n]

लेकिन Parseval के प्रमेय के बारे में चिंता करने के लिए कोई स्केलिंग कारक नहीं है।

n=0N1|x[n]|2=k=0N1|X[k]|2

न ही द्वंद्व प्रमेय:

i D F T { x [ k ] } = X [ - n ]

DFT{X[n]}=x[k]
iDFT{x[k]}=X[n]


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

जब MATLAB में यह एक "गैर-मुद्दा" नहीं है, तो आप max(abs(X))फ़ंक्शन का उपयोग यह पता लगाने के लिए करते हैं कि एक वर्णक्रमीय शिखर कहां है और आप 1लौटे हुए सूचकांक से घटाना भूल जाते हैं और आप इस पर गणित करने जा रहे हैं। यह एक मुद्दा है। और उस पर एक दुख की बात है। इंडेक्सिंग मूल के पास " DFT की परिभाषा " के साथ स्केलिंग के रूप में करने के लिए बहुत कुछ है । यह क्या बहीखाता की आवश्यकता है या नहीं के साथ क्या करना है।
रॉबर्ट ब्रिस्टो-जॉनसन

मुझे हो सकता है, लेकिन इस बार यह नहीं है :) लेकिन फिर भी, मैं उस महत्व से सहमत नहीं हूं जो आप अनुक्रमण के साथ संलग्न करते हैं, लेकिन मैं सराहना करता हूं कि यह व्यक्तिगत है। फिर से, कोई डाउनवोट नहीं क्योंकि मैं जवाब में आपके द्वारा डाले गए समय की सराहना करता हूं।
मैट एल।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.