समय-श्रृंखला दी गई शक्ति और क्रॉस स्पेक्ट्रल घनत्वों का अनुकरण करना


20

मुझे स्थिर रंगीन समय-श्रृंखला का एक सेट उत्पन्न करने में समस्या हो रही है, उनके सहसंयोजक मैट्रिक्स (उनकी पावर वर्णक्रमीय घनत्व (PSDs) और क्रॉस-पावर वर्णक्रमीय घनत्व (CSDs)) को देखते हुए।

मुझे पता है कि, दो टाइम-सीरीज़ और , मैं उनकी पावर वर्णक्रमीय घनत्व (PSDs) का अनुमान लगा सकता हूं और कई व्यापक रूटीनों का उपयोग करके क्रॉस स्पेक्ट्रल घनत्व (CSDs) कर सकता हूं, जैसे कि और Matlab, आदि में कार्य और PSDs और CSD सहसंयोजक मैट्रिक्स बनाते हैं: yमैं(टी)yजे(टी)psd()csd()

सी()=(पीमैंमैं()पीमैंजे()पीजेमैं()पीजेजे()),
जो सामान्य रूप से फ्रीक्वेंसी का एक फंक्शन है ।

अगर मैं रिवर्स करना चाहता हूं तो क्या होगा? सहसंयोजक मैट्रिक्स को देखते हुए, मैं और एहसास कैसे उत्पन्न ?yमैं(टी)yजे(टी)

कृपया कोई भी पृष्ठभूमि सिद्धांत शामिल करें, या ऐसा करने वाले किसी भी मौजूदा टूल को इंगित करें (पायथन में कुछ भी महान होगा)।

मेरा प्रयास

नीचे मैंने जो कोशिश की है, और मैंने जिन समस्याओं पर ध्यान दिया है, उनका वर्णन है। यह थोड़ा लंबा पढ़ा गया है, और यदि इसमें ऐसे शब्द शामिल हैं, जिनका दुरुपयोग हुआ है, तो क्षमा करें। यदि जो गलत है, उसे इंगित किया जा सकता है, तो यह बहुत मददगार होगा। लेकिन मेरा सवाल ऊपर बोल्ड में एक है।

  1. PSDs और CSD को टाइम-सीरीज़ के फूरियर ट्रांसफॉर्म के उत्पादों के अपेक्षा मूल्य (या पहनावा औसत) के रूप में लिखा जा सकता है। तो, सहसंयोजक मैट्रिक्स के रूप में लिखा जा सकता है: जहां
    सी()=2τY()Y(),
    Y()=(y~मैं()y~जे())
  2. एक सहसंयोजक मैट्रिक्स एक हर्मिटियन मैट्रिक्स है, जिसमें वास्तविक ईजेंवल्यूल्स होते हैं जो या तो शून्य या सकारात्मक होते हैं। तो, इसे
    सी()=एक्स()λ12()मैंλ12()एक्स(),
    में विघटित किया जा सकता है। : \ boldsymbol \ lambda ^ {\ frac {1} {2}} (f) \ mathbf {X} ^ {\ dagger} (f) \;; जहां λ12() एक विकर्ण मैट्रिक्स है, जिसके गैर-शून्य तत्व सी() के eigenvalues के वर्ग-मूल हैं; एक्स() वह मैट्रिक्स है जिसके कॉलम सी() ;मैं पहचान मैट्रिक्स है।
  3. पहचान मैट्रिक्स को रूप में लिखा जाता है जहां और शून्य माध्य और इकाई विचरण के साथ असंबंधित और जटिल आवृत्ति-श्रृंखला है।
    मैं=z()z(),
    z()=(zमैं()zजे()),
    {zमैं()}मैं=मैं,जे
  4. 3. में 3 का उपयोग करके। और फिर 1 के साथ तुलना करें। टाइम-सीरीज़ के फूरियर रूपांतरण हैं:
    Y()=τ2z()λ12()एक्स()
  5. समय-श्रृंखला को व्युत्क्रम तेजी से फूरियर रूपांतरण की तरह दिनचर्या का उपयोग करके प्राप्त किया जा सकता है।

मैंने इसे करने के लिए पायथन में एक दिनचर्या लिखी है:

def get_noise_freq_domain_CovarMatrix( comatrix , df , inittime , parityN , seed='none' , N_previous_draws=0 ) :
    """                                                                                                          
    returns the noise time-series given their covariance matrix                                                  
    INPUT:                                                                                                       
    comatrix --- covariance matrix, Nts x Nts x Nf numpy array                                                   
      ( Nts = number of time-series. Nf number of positive and non-Nyquist frequencies )                     
    df --- frequency resolution
    inittime --- initial time of the noise time-series                                                           
    parityN --- is the length of the time-series 'Odd' or 'Even'                                                 
    seed --- seed for the random number generator                                                                
    N_previous_draws --- number of random number draws to discard first                                          
    OUPUT:                                                                                                       
    t --- time [s]                                                                                               
    n --- noise time-series, Nts x N numpy array                                                                 
    """
    if len( comatrix.shape ) != 3 :
       raise InputError , 'Input Covariance matrices must be a 3-D numpy array!'
    if comatrix.shape[0]  != comatrix.shape[1] :
        raise InputError , 'Covariance matrix must be square at each frequency!'

    Nts , Nf = comatrix.shape[0] , comatrix.shape[2]

    if parityN == 'Odd' :
        N = 2 * Nf + 1
    elif parityN == 'Even' :
        N = 2 * ( Nf + 1 )
    else :
        raise InputError , "parityN must be either 'Odd' or 'Even'!"
    stime = 1 / ( N*df )
    t = inittime + stime * np.arange( N )

    if seed == 'none' :
        print 'Not setting the seed for np.random.standard_normal()'
        pass
    elif seed == 'random' :
        np.random.seed( None )
    else :
        np.random.seed( int( seed ) )
    print N_previous_draws
    np.random.standard_normal( N_previous_draws ) ;

    zs = np.array( [ ( np.random.standard_normal((Nf,)) + 1j * np.random.standard_normal((Nf,)) ) / np.sqrt(2)
                 for i in range( Nts ) ] )

    ntilde_p = np.zeros( ( Nts , Nf ) , dtype=complex )
    for k in range( Nf ) :
        C = comatrix[ :,:,k ]
        if not np.allclose( C , np.conj( np.transpose( C ) ) ) :
            print "Covariance matrix NOT Hermitian! Unphysical."
        w , V = sp_linalg.eigh( C )
        for m in range( w.shape[0] ) :
            w[m] = np.real( w[m] )
            if np.abs(w[m]) / np.max(w) < 1e-10 :
                w[m] = 0
            if w[m] < 0 :
                print 'Negative eigenvalue! Simulating unpysical signal...'

        ntilde_p[ :,k ] =  np.conj( np.sqrt( N / (2*stime) ) * np.dot( V , np.dot( np.sqrt( np.diag( w ) ) , zs[ :,k ] ) ) )

    zerofill = np.zeros( ( Nts , 1 ) )
    if N % 2 == 0 :
        ntilde = np.concatenate( ( zerofill , ntilde_p , zerofill , np.conj(np.fliplr(ntilde_p)) ) , axis = 1 )
    else :
        ntilde = np.concatenate( ( zerofill , ntilde_p , np.conj(np.fliplr(ntilde_p)) ) , axis = 1 )
    n = np.real( sp.ifft( ntilde , axis = 1 ) )
    return t , n

मैंने इस दिनचर्या को PSDs और CSDs में लागू किया है, जिसके विश्लेषणात्मक भाव कुछ डिटेक्टरों के मॉडलिंग से प्राप्त किए गए हैं जिनके साथ मैं काम कर रहा हूं। महत्वपूर्ण बात यह है कि सभी आवृत्तियों पर, वे एक सहसंयोजक मैट्रिक्स बनाते हैं (अच्छी तरह से कम से कम वे उन सभी ifबयानों को दिनचर्या में पास करते हैं)। सहसंयोजक मैट्रिक्स 3x3 है। 3 समय-श्रृंखला लगभग 9000 बार उत्पन्न हुई है, और अनुमानित PSDs और CSDs, इन सभी अहसासों को औसतन विश्लेषणात्मक लोगों के साथ नीचे प्लॉट किए गए हैं। जबकि समग्र आकार सहमत हैं, CSDs (Fig.2) में कुछ आवृत्तियों पर ध्यान देने योग्य शोर विशेषताएं हैं । PSDs (Fig.3) में चोटियों के आसपास एक क्लोज-अप के बाद, मैंने देखा कि PSDs वास्तव में कम करके आंका गया है, और यह कि सीएसडी में शोर की विशेषताएं PSDs में चोटियों के समान होती हैं। मुझे नहीं लगता कि यह एक संयोग है, और यह कि किसी भी तरह PSDs से CSD में बिजली लीक हो रही है। मुझे उम्मीद है कि डेटा के इस अहसास के साथ घटता एक दूसरे के ऊपर झूठ बोल सकता है।

चित्र 1: P11
चित्र 2: P12 चित्र 2: P11 (क्लोज़-अप)


साइट पर आपका स्वागत है। मैंने इस सवाल को वोट दिया है, भाग में, ताकि आप छवियों को पोस्ट करने में सक्षम न हों। यदि नहीं, तो बस लिंक पोस्ट करें और पर्याप्त प्रतिष्ठा वाला व्यक्ति छवियों को एम्बेड करने के लिए संपादित करेगा।
कार्डिनल

1
क्या आपने उच्च आवृत्ति शोर को छानने की कोशिश की है?
कार्ल

जवाबों:


1

चूँकि आपके सिग्नल स्थिर हैं, इसलिए एक सरल तरीका यह होगा कि सफेद शोर का उपयोग एक आधार के रूप में किया जाए और अपने PSDs को फिट करने के लिए इसे फ़िल्टर किया जाए। इन फिल्टर गुणांक की गणना करने का एक तरीका रैखिक भविष्यवाणी का उपयोग करना है

ऐसा लगता है कि इसके लिए एक अजगर समारोह है, इसे आज़माएं:

from scikits.talkbox import lpc

यदि आप चाहें (मैंने केवल MATLAB समकक्ष का उपयोग किया है)। यह भाषण प्रसंस्करण में उपयोग किया जाने वाला एक दृष्टिकोण है, जहां फॉर्मेंट का अनुमान इस प्रकार लगाया जाता है।


क्या आपको मतलब नहीं है कि सफेद शोर के बजाय सिग्नल पर फ़िल्टर लागू करें?
माइकल आर। चेरनिक

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

0

हमेशा की तरह, पार्टी के लिए थोड़ा देर से, लेकिन मुझे कुछ हालिया गतिविधि दिखाई देती है, इसलिए मैं अपनी दो येन करूँगा।

पहले, मैं ओपी के प्रयास को गलत नहीं कर सकता - यह मेरे लिए सही लगता है। विसंगतियां परिमित नमूनों के मुद्दों के कारण हो सकती हैं, उदाहरण के लिए सिग्नल पावर आकलन के सकारात्मक पूर्वाग्रह।

हालांकि, मुझे लगता है कि क्रॉस स्पेक्ट्रल घनत्व मैट्रिक्स (CPSD) से समय श्रृंखला उत्पन्न करने के सरल तरीके हैं, यह वही है जिसे ओपी कोविरियस मैट्रिक्स कहा जाता है)।

एक पैरामीट्रिक दृष्टिकोण ऑटोरेस्प्रेसिव विवरण प्राप्त करने के लिए सीपीएसडी का उपयोग करना है और फिर समय श्रृंखला उत्पन्न करने के लिए इसका उपयोग करना है। Matlab में आप ग्रेंजर कारण उपकरण (उदाहरण के लिए मल्टीवेरेटा ग्रैगर एक्टीविटी टूलबॉक्स, सेठ, बार्नेट ) का उपयोग करके ऐसा कर सकते हैं । टूलबॉक्स का उपयोग करना बहुत आसान है। चूँकि CPSD का अस्तित्व एक निरंकुश विवरण की गारंटी देता है, यह दृष्टिकोण सटीक है। (CPSD के बारे में अधिक जानकारी के लिए और autoregression, Geweke, 1982, या अनेन सेठ + लियोनेल बारनेट के कई पत्रों के बीच "कई वर्षों की श्रृंखला के बीच रैखिक निर्भरता का मापन और प्रतिक्रिया देखें), पूर्ण चित्र प्राप्त करने के लिए)।

संभावित रूप से सरल है, सीपीएसडी नोट कर रहा है, ऑटो कोवरियनस (सीपीएसडी के विकर्ण यानी संकेतों की शक्ति) और क्रॉस कोवरिएनस (ऑफ डायगोनल एलिमेंट्स, यानी क्रॉस-पॉवर को दे कर) को लागू किया जा सकता है। इस प्रकार CPSD के उलटा एफर्ट लगाने से हम ऑटोकरेलेशन और ऑटो कॉवरिएंस प्राप्त कर सकते हैं। फिर हम अपने डेटा के नमूने उत्पन्न करने के लिए इनका उपयोग कर सकते हैं।

उम्मीद है की यह मदद करेगा। कृपया टिप्पणियों में जानकारी के लिए कोई अनुरोध छोड़ दें और मैं संबोधित करने का प्रयास करूंगा।

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