8

मुझे गॉसियन का उपयोग करके एक दृढ़ संकल्प करने की आवश्यकता है, हालांकि गॉसियन की चौड़ाई को बदलने की जरूरत है। मैं पारंपरिक सिग्नल प्रोसेसिंग नहीं कर रहा हूं, लेकिन इसके बजाय मुझे अपने उपकरण के संकल्प के आधार पर, मेरी सही संभाव्यता घनत्व समारोह (पीडीएफ) और `धुंधला" लेना होगा।मैं चर-चौड़ाई गॉसियन के साथ पायथन में एक रूपांतरण कैसे करूं?

उदाहरण के लिए, मान लीजिए कि मेरा पीडीएफ शुरू होता है एक स्पाइक/डेल्टा-फ़ंक्शन। मैं इसे बहुत संकीर्ण गाऊशियन के रूप में मॉडल करूंगा। मेरे उपकरण के माध्यम से दौड़ने के बाद, यह कुछ गॉसियन रिज़ॉल्यूशन के अनुसार बाहर हो जाएगा। मैं scipy.signal convolution कार्यों का उपयोग करके इसकी गणना कर सकता हूं।

import numpy as np 
    import matplotlib.pylab as plt 

    import scipy.signal as signal 
    import scipy.stats as stats 

    # Create the initial function. I model a spike 
    # as an arbitrarily narrow Gaussian 
    mu = 1.0 # Centroid 
    sig=0.001 # Width 
    original_pdf = stats.norm(mu,sig) 

    x = np.linspace(0.0,2.0,1000) 
    y = original_pdf.pdf(x) 
    plt.plot(x,y,label='original') 


    # Create the ``smearing" function to convolve with the 
    # original function. 
    # I use a Gaussian, centered at 0.0 (no bias) and 
    # width of 0.5 
    mu_conv = 0.0 # Centroid 
    sigma_conv = 0.5 # Width 
    convolving_term = stats.norm(mu_conv,sigma_conv) 

    xconv = np.linspace(-5,5,1000) 
    yconv = convolving_term.pdf(xconv) 

    convolved_pdf = signal.convolve(y/y.sum(),yconv,mode='same') 

    plt.plot(x,convolved_pdf,label='convolved') 
    plt.ylim(0,1.2*max(convolved_pdf)) 
    plt.legend() 
    plt.show() 

यह सभी के साथ सिग्मा = एक गाऊसी कोई समस्या नहीं काम करता है। लेकिन अब लगता है कि अपने मूल पीडीएफ एक कील, लेकिन कुछ व्यापक कार्य नहीं है। उदाहरण के लिए, 1.0। और अब मेरा संकल्प वास्तव में लगता है x पर x: 0.5 = x पर, धुंधला कार्य sigma_conv = 0.5 के साथ एक गॉसियन है, लेकिन x = 1.5 पर, धुंधला कार्य sigma_conv = 1.5 के साथ एक गॉसियन है। और मान लीजिए कि मैं अपने सुगंधित गॉसियन की एक्स-निर्भरता के कार्यात्मक रूप को जानता हूं। भोलेपन से, मैंने सोचा कि मैं

convolving_term = stats.norm(mu_conv,lambda x: 0.2*x + 0.1) 

के ऊपर लाइन बदल जाएगा लेकिन वह काम नहीं करता, क्योंकि आदर्श समारोह चौड़ाई, नहीं एक समारोह के लिए एक मूल्य की उम्मीद है। कुछ अर्थ में, मुझे अपने घूर्णन समारोह को 2 डी सरणी होने की आवश्यकता है, जहां मेरे मूल पीडीएफ में प्रत्येक बिंदु के लिए मेरे पास एक अलग धुंधला गॉसियन है, जो एक 1 डी सरणी बनी हुई है।

तो क्या यह पाइथन में परिभाषित पहले से कार्यों के साथ ऐसा करने का कोई तरीका है? मेरे पास ऐसा करने के लिए कुछ कोड है जिसे मैंने खुद लिखा था .... लेकिन मैं यह सुनिश्चित करना चाहता हूं कि मैंने अभी पहिया का पुन: आविष्कार नहीं किया है।

अग्रिम धन्यवाद!

मैट

+0

आपका xconv ​​"step" '(अंतिम - पहला)/(लंबाई -1) 'x" चरण "से भिन्न होने से चौड़ाई स्केल हो जाती है (यानी, सिग्मा एक ही" इकाई "में नहीं हैं), आप वास्तव में वह चाहिए? –

+0

"मेरे पास ऐसा करने के लिए कुछ कोड है जिसे मैंने स्वयं लिखा" => क्या आप हमें यह कोड दिखा सकते हैं? यह सहायक हो सकता है। –

उत्तर

5

प्रश्न, संक्षेप में:
कैसे, एक गैर स्थिर कर्नेल के साथ convolve लिए उदाहरण के लिए, एक गाऊसी है कि इस के लिए डेटा में विभिन्न स्थानों के लिए चौड़ाई बदलता है, और करता है एक अजगर एक मौजूदा उपकरण ?

उत्तर, क्रमबद्ध:
नकारात्मक साबित करना मुश्किल है, लेकिन मुझे नहीं लगता कि एक गैर-स्थिर कर्नेल के साथ एक रूपांतरण करने के लिए एक कार्य निष्कर्ष या numpy में मौजूद है। वैसे भी, जैसा कि आप इसका वर्णन करते हैं, इसे वास्तव में अच्छी तरह से वेक्टरकृत नहीं किया जा सकता है, इसलिए आप लूप भी कर सकते हैं या कुछ कस्टम सी कोड लिख सकते हैं।

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

इस दृष्टिकोण के फायदे यह है कि लिखना बहुत आसान है, और पूरी तरह से वेक्टरकृत है, और इसलिए शायद चलाने के लिए काफी तेज है।

डेटा को वार करना (कहने, एक इंटरपोलेशन विधि का उपयोग करना) सटीकता के कुछ नुकसान का कारण बनता है, लेकिन यदि आप चीजों को चुनते हैं ताकि डेटा हमेशा विस्तारित हो और आपके शुरुआती वारिंग ऑपरेशन में कम न हो, तो नुकसान कम होना चाहिए।

संबंधित मुद्दे