मैं यह कैसे निर्धारित करूं कि असतत संकेत आवधिक है या नहीं?


12

मैं जानना चाहता हूं कि मैं यह कैसे निर्धारित कर सकता हूं कि डेटा की एक श्रृंखला आवधिक है या नहीं।

मैं फूरियर ट्रांसफॉर्म / सीरीज का उपयोग करना चाहता हूं। मेरा डेटा या तो एपेरियोडिक दिखता है

[111100001111000110010101010000101]

या आवधिक

[11001100110011001100]

और मुझे यह तय करने की आवश्यकता है कि यह स्वचालित रूप से क्या है। एक संकेत आवधिक है या नहीं यह निर्धारित करने के लिए मैं किस प्रकार के विश्लेषण या गणना कर सकता हूं?

जवाबों:


14

मैं समय-समय पर निर्धारित करने के लिए एक सामान्यीकृत ऑटोकॉरेलेशन करूंगा । यदि पीरियड साथ यह समय-समय पर होता है, तो आपको परिणाम में प्रत्येक नमूनों पर चोटियों को देखना चाहिए । "1" के एक सामान्यीकृत परिणाम का तात्पर्य है, समय-समय पर पूर्णता, "0" का तात्पर्य है कि उस अवधि में कोई आवधिकता नहीं है, और आवधिक अपूर्ण आवधिकता के बीच मूल्य हैं। स्वतः अनुक्रम करने से पहले डेटा अनुक्रम से डेटा अनुक्रम के माध्य को घटाएं क्योंकि यह परिणामों को पूर्वाग्रह करेगा।पीPP

चोटियों को केंद्र से दूर कम करना होगा, क्योंकि वे कम ओवरलैपिंग नमूने होने के कारण बस प्राप्त करते हैं। आप ओवरलैपिंग नमूनों के प्रतिशत के व्युत्क्रम से परिणामों को गुणा करके उस प्रभाव को कम कर सकते हैं।

यू(एन)(एन)एनएन

U(n)=A(n)N|Nn|
जहां संयुक्त राष्ट्र का पक्षपाती निरंकुशता है, सामान्यीकृत स्वसंबंध है, ऑफसेट है, और डेटा अनुक्रम में नमूनों की संख्या है जिसे आप आवधिकता के लिए जाँच रहे हैं।U(n)A(n)nN

EDIT: यह एक उदाहरण है कि कैसे बताया जाए कि अनुक्रम आवधिक हैं। निम्नलिखित Matlab कोड है।

s1 = [1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 1 0 0 1 0 1 0 1 0 1 0 0 0 0 1 0 1];
s1n = s1 - mean(s1);
plot(xcorr(s1n, 'unbiased'))

Xcorr फ़ंक्शन के लिए "निष्पक्ष" पैरामीटर इसे मेरे समीकरण में वर्णित स्केलिंग को करने के लिए कहता है। ऑटो-सहसंबंध सामान्यीकृत नहीं है, हालांकि, यही कारण है कि केंद्र में चोटी 1 के बजाय 0.25 के आसपास है। यह कोई फर्क नहीं पड़ता, हालांकि, जब तक हम ध्यान रखते हैं कि केंद्र शिखर सही सहसंबंध है। हम देखते हैं कि सबसे बाहरी किनारों को छोड़कर कोई अन्य समान चोटियां नहीं हैं। इससे कोई फर्क नहीं पड़ता क्योंकि केवल एक नमूना ओवरलैपिंग है, इसलिए यह सार्थक नहीं है।

गैर आवधिक

s2 = [1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0];
s2n = s2 - mean(s2);
plot(xcorr(s2n, 'unbiased'))

यहाँ हम देखते हैं कि अनुक्रम आवधिक है क्योंकि केंद्र शिखर के समान एकरूपता के साथ कई निष्पक्ष निरंकुश चोटियाँ हैं।

सामयिक


3
+1: आप बनाने से पहले डेटा को माध्य-सही करना भी चाह सकते हैं , अन्यथा आवधिक चोटियों को खोजने के रास्ते में कोई भी DC- ऑफसेट मिल सकता है। A(n)
पीटर के.एच.

1
@PeterK अच्छी बात है।
जिम क्ले

हे जिम, धन्यवाद..मैं थोड़ा उलझन में हूं कि यह प्रोग्रामिंग कैसे शुरू करें, क्योंकि जहां कभी भी मैं ऑटोकॉरेलेशन के बारे में खोजता हूं मुझे जटिल सूत्र मिलते हैं, मुझे वास्तव में यह विचार नहीं है कि कहां से शुरू करना है और पीरियड के साथ पीक का पता कैसे लगाना है। । मेरे साथ मेरे पास मूल्यों की एक सूची है V [] = {110011001100 ..} अब उन्हें ऑटोकॉर्लेशन फ़ार्मुलों में कैसे रखा जाए और इसकी आवधिकता को निर्धारित किया जाए या नहीं ... क्या आप मुझे थोड़ी आसान शुरुआत दे सकते हैं ... बहुत बहुत धन्यवाद
सफजम

@ सफ़ज़म यदि आप मतलाब या अजगर (सुन्न) का उपयोग कर रहे हैं, तो उनके पास पहले से ही ऑटोकरेलेशन कार्य हैं। अगर आपको C / C ++ / Java / जो कुछ भी चाहिए, तो यहाँ कोशिश करें- dsprelated.com/showmessage/59527/1.php
जिम क्ले

उदाहरण के लिए मैंने निम्नलिखित दो संकेतों का उपयोग किया s1 ans s2: s1 = [1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1] s2 = [1, 0, 1, 1, 1, 1, 0 , 1, 0, 0, 0, 1] r1 = numpy.correlate (s1, s1, mode = 'full') r2 = numpy.correlate (s2, s2, mode = 'full') मैंने इन चार लाइनों को एक में नहीं दिया है। अजगर कोड। मुझे r1 = [1 2 1 2 4 2 3 3 6 4 3 4 8 4 3 3 2 2 4 2 1 2 1] और आर 2 = [1 0 1 1 2 2 3 3 2 2 3 2 2 3 3 0 2 1 1 0 1] r1 और r2 दोनों एक ही इंद्रधनुषी वक्र को आकार देते हैं .. मैं कोड में यह कैसे निर्धारित कर सकता हूं कि एक संकेत पेरोइडेक या लगभग आवधिक है या आवधिक नहीं है, धन्यवाद
safzam

4

जिम के जवाब ने मुझे यह सोचने के लिए भेजा कि इस सांख्यिकीय का परीक्षण कैसे किया जाए। इसने मुझे डर्बिन-वॉटसन ऑटोकरेलेशन परीक्षण की ओर अग्रसर किया ।

इसका सामान्यीकरण करना है:

DW(τ)=n=τN1[U(n)U(nτ)]2n=0N1U(n)2

और इसे शिलाब में लागू करने का मेरा प्रयास है:

// http://en.wikipedia.org/wiki/Durbin%E2%80%93Watson_statistic
s1 = [1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 1 0 0 1 0 1 0 1 0 1 0 0 0 0 1 0 1];
s1n = s1 - mean(s1);
xs1 = xcorr(s1n,"unbiased");
N1 = length(xs1);

s2 = [1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0];
s2n = s2 - mean(s2);
xs2 = xcorr(s2n,"unbiased");
N2 = length(xs2);

dwstat1 = [];
dwstat2 = [];

for lag = 1:15,

    dxs1 = xs1((lag+1):N1) - xs1(1:(N1-lag));
    dxs2 = xs2((lag+1):N2) - xs2(1:(N2-lag));


    dwstat1 = [dwstat1 sum(dxs1.^2) / sum(xs1.^2)];
    dwstat2 = [dwstat2 sum(dxs2.^2) / sum(xs2.^2)];

end;

DW(τ)τ

अगर मैं हमारे दो उदाहरण अनुक्रमों के लिए परिणाम की साजिश रचता हूँ:

यहाँ छवि विवरण दर्ज करें

फिर यह स्पष्ट है कि दूसरा अनुक्रम 4, 8 आदि के लैग में सहसंबंध प्रदर्शित करता है और 2, 6 आदि के लैग में सह-संबंध है।

DW(τ)


इस जानकारी के लिए आपको धन्यवाद। वास्तव में मैं अजगर में एक कार्यक्रम बना रहा हूं जहां मुझे 0 और 1s की बहुत सारी सूची मिलती है। मैं आवधिक, यादृच्छिक, फट प्रकार की श्रृंखला को अलग करना चाहता हूं। मैं अजगर में उपरोक्त तर्क की कोशिश कर रहा हूं, लेकिन "xcorr" फ़ंक्शन अजगर में नहीं है, तो मैंने numpy.correlate (lst, lst, mode = 'full') फ़ंक्शन का उपयोग किया। इसके अलावा सूचियों में 0 और 1s की राउंड 70,000 की सूची शामिल है .. मैं सिर्फ यह निर्धारित करना चाहता हूं कि क्या यह सूची आवधिक है या नहीं ... अगर थोड़ी सी अनियंत्रितता है तो मैं इससे बच सकता हूं। आगे कोई संकेत नहीं। अग्रिम में धन्यवाद।
सुरजम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.