2013-06-16 6 views
8

मैं कुछ matlab कोड scipy का उपयोग कर अजगर को पोर्टिंग कर रहा हूँ और निम्न पंक्ति के साथ अटक गया:periodogram सप्टक/Matlab में बनाम SciPy

मैटलैब/सप्टक कोड

[Pxx, f] = periodogram(x, [], 512, 5) 

अजगर कोड

f, Pxx = signal.periodogram(x, 5, nfft=512) 

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

क्या मुझे कुछ याद आ रही है? किसी भी सलाह की काफी सराहना की जाएगी! http://pastebin.com/czNeyUjs
सरल अजगर + वास्तविक डेटा के साथ scipy कोड: आप परिणामों को देखने http://pastebin.com/zPLGBTpn

+0

एक साजिश बहुत उपयोगी होगी। –

उत्तर

5

सप्तक और scipy के periodogram स्रोत कोड मैंने पाया कि वे गणना करने के लिए अलग अलग एल्गोरिथ्म का उपयोग शोध करने के बाद बिजली वर्णक्रमीय घनत्व अनुमान। ऑक्टवे (और MATLAB) use FFT, जबकि scipy's periodogram Welch method का उपयोग करते हैं।

जैसा कि @georgesl ने उल्लेख किया है, आउटपुट काफी समान दिखता है, लेकिन फिर भी, यह अलग है। और कारण पोर्टिंग के लिए यह महत्वपूर्ण था। अंत में, मैंने बस FFT का उपयोग करके PSD अनुमान की गणना करने के लिए एक छोटा सा फ़ंक्शन लिखा, और अब आउटपुट समान है। timeit परीक्षण के मुताबिक, यह ~ 50% तेज (1.9006 बनाम 2.9176s लूप पर 10.000 पुनरावृत्तियों के साथ काम करता है)। मुझे लगता है कि यह तेजी से होने के कारण, एससीआई के कार्यान्वयन में वेल्च की तुलना में एफएफटी तेज है।

रुचि दिखाने वाले सभी लोगों के लिए धन्यवाद।

0

था


सरल मैटलैब वास्तविक डेटा के साथ/सप्टक कोड?

Outputs

दो परिणाम हो सकता है अनुकूलन/डिफ़ॉल्ट खिड़कियों/कार्यान्वयन/से आता है के बीच मामूली अंतर जो कुछ आदि

1

मैं एक ही समस्या का सामना करना पड़ा लेकिन फिर मैं scipy's periodogram

के प्रलेखन में आए तुम वहाँ कि detrend देखना होगा के रूप में = 'निरंतर' डिफ़ॉल्ट तर्क है। इसका मतलब है कि पायथन स्वचालित रूप से प्रत्येक बिंदु से इनपुट डेटा के माध्य को घटा देता है। (Read here)। जबकि Matlab/Octave ऐसी कोई बात नहीं करते हैं। मेरा मानना ​​है कि यही कारण है कि आउटपुट अलग हैं। Detrend = गलत निर्दिष्ट करने का प्रयास करें, scipy के periodogram को कॉल करते समय आपको Matlab के समान आउटपुट प्राप्त करना चाहिए।

2

मैटलैब और सिस्पी दस्तावेज पढ़ने के बाद, विभिन्न मानों में एक और योगदान यह हो सकता है कि वे अलग-अलग डिफ़ॉल्ट विंडो फ़ंक्शन का उपयोग करें। मैटलैब एक हैमिंग विंडो का उपयोग करता है, और सिस्पी एक हैनिंग का उपयोग करता है। दो खिड़की के कार्यों और समान लेकिन समान नहीं है।