2011-02-15 16 views
10

मैं किसी दिए गए डेटासेट पर विश्लेषण करने के लिए Jtransforms जावा लाइब्रेरी का उपयोग कर रहा हूं।जेट्रांसफॉर्म से पावर स्पेक्ट्रल घनत्व DoubleFFT_1D

980,988,1160,1080,928,1068,1156,1152,1176,1264 

मैं jTransforms में DoubleFFT_1D समारोह का उपयोग कर रहा:

डेटा का एक उदाहरण इस प्रकार है। डेटा उत्पादन इस प्रकार है:

10952, -152, 80.052, 379.936, -307.691, 12.734, -224.052, 427.607, -48.308, 81.472 

मैं मुसीबत उत्पादन की व्याख्या हो रही है। मैं समझता हूं कि आउटपुट सरणी में पहला तत्व 10 इनपुट (10952) का कुल है। यह

आउटपुट सरणी के अन्य तत्व जिन्हें मैं समझ नहीं पा रहा हूं। आखिरकार, मैं ग्राफ पर इनपुट डेटा के पावर स्पेक्ट्रल घनत्व को प्लॉट करना चाहता हूं और 0 और .5 हर्ट्ज के बीच की रकम पाता हूं।

jTransform कार्यों राज्यों के लिए दस्तावेज़ (जहां एक डेटा सेट है):

public void realForward(double[] a) एक में परिणाम छोड़ने असली डेटा की -1 डी आगे एफ टी गणना करता है।

यदि n तो

a[2*k] = Re[k], 0 <= k < n/2 
a[2*k+1] = Im[k], 0 < k < n/2 
a[1] = Re[n/2] 

भी है अगर n विषम है तो

a[2*k] = Re[k], 0 <= k < (n+1)/2 
a[2*k+1] = Im[k], 0 < k< (n-1)/2 
a[1] = Im[(n-1)/2] 

इस विधि के तत्वों का केवल आधा गणना करता है: आउटपुट डेटा के भौतिक लेआउट इस प्रकार है वास्तविक परिवर्तन दूसरा आधा समरूपता की स्थिति को संतुष्ट करता है। यदि आप पूर्ण वास्तविक आगे रूपांतरण चाहते हैं, तो realForwardFull का उपयोग करें। मूल डेटा वापस पाने के लिए, इस विधि के आउटपुट पर realInverse का उपयोग करें।

पैरामीटर: एक - डेटा

को बदलने के लिए अब उपरोक्त विधि का प्रयोग: (के बाद से अपने डेटा सरणी की लंबाई 10 है, "n भी है" तरीकों का इस्तेमाल किया जाता है)

Re[0] = 10952 
Re[1] = 80.052 
Re[2] = -307.691 
Re[3] = -224.052 
Re[4] = -48.308 
Re[5] = 12.734 

Im[0] = -152 
Im[1] = 379.936 
Im[2] = 12.734 
Im[3] = 427.607 
Im[4] = 81.472 

तो कुछ प्रश्न: क्या यह आउटपुट सही दिखता है? ऐसा लगता है कि रे [0] 10952 नहीं होना चाहिए जो मूल सरणी में सभी तत्वों का योग है।

लगता उत्पादन की तरह थोड़ा सही किया जाना चाहिए: (मैं गलत कर रहा हूँ?)

Re[0] = 80.052 
Re[1] = -307.691 
Re[2] = -224.052 
Re[3] = -48.308 
Re[4] = -152 

Im[0] = 379.936 
Im[1] = 12.734 
Im[2] = 427.607 
Im[3] = 81.472 

अब निम्न विधि मंच में तैनात का उपयोग कर:

बिन की भयावहता प्राप्त करने के लिए k आप की जरूरत है sqrt(re * re + im * im) की गणना करें, जहां फिर से, मैं bin k के लिए FFT आउटपुट में वास्तविक और काल्पनिक घटक हैं।

आपके विशेष एफएफटी re[k] = a[2*k] and im[k] = a[2*k+1] के लिए।

for k in 0 to N/2 - 1 
{ 
    spectrum[k] = sqrt(sqr(a[2*k]) + sqr(a[2*k+1])) 
} 

इस प्रकार:

spectrum[0] = 388.278 
spectrum[1] = 307.955 
spectrum[2] = 482.75 
spectrum[3] = 94.717 

कुछ सवाल इसलिए शक्ति स्पेक्ट्रम की गणना करने के। क्या यह डेटा सही दिखता है? क्या मैं सही रास्ते पर हूं?

388.278 at .125 Hz 
307.955 at .25 Hz 
482.75 at .375 Hz 
94.717 at .5 Hz 

एम आई रास्ता बंद: इस स्पेक्ट्रम डेटा तो कुछ इस तरह बाहर साजिश चाहेंगे? मेरा लक्ष्य 0 से 5 हर्ट्ज

+0

क्या यह कल से आपके प्रश्न का डुप्लिकेट नहीं है: http://stackoverflow.com/questions/4996747/interpreting-jtransform-fft-results? –

+0

हां। कुछ अनुवर्ती के साथ। लॉग इन करने के बाद, मैं पुराने धागे में हेरफेर करने में असमर्थ था। मेरे खाते में मेरे पुराने प्रश्नों में से कोई भी नहीं (एक संदर्भ सहित) दिखाया गया है। तो मैंने इसे स्थानांतरित कर दिया और कुछ फॉलोअप डेटा जोड़ा। माफ़ कीजिये। मैं भ्रम जोड़ना नहीं चाहता। उपयोगकर्ता से लॉग इन करने के लिए अतिथि से स्टैक ओवरफ्लो में बस परेशानी थी। मैं वास्तव में सहायता के लिए आभारी हूं। मुझे लगता है कि मैं आपकी मदद से प्रगति कर रहा हूं। – Damon

+1

आपके लिए खाता समस्याओं को ठीक करने के लिए मोड से पूछें। इसके अलावा पॉल आर के जवाब को स्वीकार करने और इसे ऊपर उठाने के बारे में चिह्नित करने के बारे में, ऐसा लगता है कि यह आपके लिए बहुत उपयोगी था। – Kev

उत्तर

9

मुझे लगता है कि आप इस प्रकार आउटपुट डेटा की व्याख्या करने की जरूरत है:: इसलिए शक्ति स्पेक्ट्रम की गणना करने के

10952  Re[0] = sum of all inputs = DC component 
-152  Re[5] - see note about a[1] being special - there is no Im[0] 
    80.052 Re[1] 
    379.936 Im[1] 
-307.691 Re[2] 
    12.734 Im[2] 
-224.052 Re[3] 
    427.607 Im[3] 
    -48.308 Re[4] 
    81.472 Im[4] 

परिमाण इसलिए कर रहे हैं:

spectrum[0] = 10952 
spectrum[1] = sqrt(80.052^2 + 379.936^2) = 388.278 
spectrum[2] = sqrt(-307.691^2 + 12.734^2) = 307.427 
spectrum[3] = sqrt(-224.052^2 + 427.607^2) = 482.749 
spectrum[4] = sqrt(-48.308^2 + 81.472^2) = 94.717 

[वहाँ होने के बारे में क्षमा करें अब मुझसे दो अलग-अलग जवाब - मुझे लगता है कि जब मैं नए जवाब पर काम कर रहा था तो दो संबंधित प्रश्न विलय हो गए थे]

+0

धन्यवाद पॉल। यह इसे बहुत साफ करता है! मेरी कमी को क्षमा करें, लेकिन स्पेक्ट्रम परिणाम [0-4] 0 और .5 हर्ट्ज के बीच आवृत्तियों से कैसे संबंधित हैं? उपरोक्त उदाहरण के लिए – Damon

+0

, मुझे लगता है कि एफएस = 1 हर्ट्ज (जिस तरह गणित काम करता है)। – Damon

+0

@ डैमन: क्षमा करें, हाँ, मेरा मतलब था 'एफएस = 1 हर्ट्ज'। मैं एक सही टिप्पणी दोबारा पोस्ट करूंगा। –

1

ट्रांसफॉर्म में प्रत्येक प्रविष्टि नमूना में आवृत्ति के (जटिल) परिमाण का प्रतिनिधित्व करती है, जो पावर स्पेक्ट्रल घनत्व बार चार्ट का उत्पादन करना है।

किसी दिए गए आवृत्ति में पावर घनत्व केवल उस आवृत्ति में परिवर्तन के जटिल आयाम की परिमाण है। एक जटिल संख्या की परिमाण को इसके घटकों से गणना की जाती है और आपको

प्राप्त करने में कोई समस्या नहीं होनी चाहिए प्रत्येक कॉलम 0 (पहली प्रविष्टि) से शुरू होने वाली आवृत्तियों को बढ़ाने के लिए आयामों का प्रतिनिधित्व करता है, फिर 2 पीआई/टी (जहां टी है आपके नमूने की लंबाई), अंतिम नमूना 2 * पीआई * एन/टी (जहां एन नमूने की संख्या है) तक

ऐसे अन्य सम्मेलन हैं जहां -पीआई * एन/टी आवृत्ति के लिए ट्रांसफॉर्म वापस किया जाता है पी * एन/टी, और 0 आवृत्ति घटक के लिए सरणी के बीच में है

आशा है कि यह मदद करता है

0

बिन के परिमाण को प्राप्त करने के लिए आपको sqrt (re * re + im * im) की गणना करने की आवश्यकता है, wheer re, im bin k के लिए FFT आउटपुट में वास्तविक और काल्पनिक घटक हैं।

आपके विशेष एफएफटी re[k] = a[2*k] और im[k] = a[2*k+1] के लिए।

for k in 0 to N/2 - 1 
    spectrum[k] = sqrt(sqr(a[2*k]) + sqr(a[2*k+1])) 
+0

मदद के लिए धन्यवाद। यह अब तक की सबसे अच्छी जानकारी है। मैंने निम्नलिखित डेटा सेट के लिए मानों की गणना करने के लिए अपने स्पेक्ट्रम समीकरण का उपयोग किया है:
1068,1116,1140,1144,1160,1136,1100,1080,1200,1212,1092,952,1060,1068 – Damon

+1

@Damon, अगर यह आपकी मदद की, कृपया चेकमार्क को ग्रीन बनने के उत्तर के दाईं ओर क्लिक करें – lurscher