2009-08-13 4 views
10

मैं सोच रहा था कि कोई मुझे एल्गोरिदम/तकनीक पर इंगित कर सकता है जिसका उपयोग समय पर निर्भर संकेतों की तुलना करने के लिए किया जाता है। आदर्श रूप से, यह काल्पनिक एल्गोरिदम इनपुट के रूप में 2 संकेतों में ले जाएगा और एक संख्या लौटाएगा जो सिग्नल के बीच प्रतिशत समानता होगी (0 यह है कि 2 सिग्नल सांख्यिकीय रूप से असंबंधित हैं और 1 यह है कि वे एकदम सही मैच हैं)।मिलान समय पर निर्भर करने के लिए एल्गोरिदम (1 डी) सिग्नल

बेशक, मुझे एहसास है कि मेरे अनुरोध के साथ समस्याएं हैं, अर्थात् मुझे यकीन नहीं है कि इन 2 संकेतों की तुलना करने के संदर्भ में 'समानता' को सही तरीके से परिभाषित करने के लिए, इसलिए यदि कोई मुझे सही में इंगित कर सकता है दिशा (मुझे क्या देखना चाहिए/पता होना चाहिए, आदि), मैं भी इसकी सराहना करता हूं।

उत्तर

0

मैं सिग्नल प्रोसेसिंग पता नहीं है, तो यह एक अनुमान है ..:

अपने सिग्नल को प्रभावी ढंग से आदेश दिया जोड़े (x,y) की एक सूची है, जहां x समय और y आयाम है? शायद एक correlation की तलाश द्वारा

Signal 1: [y0, y1, y2, y3, ...] 
Signal 2: [z0, z1, z2, z3, ...] 

तो फिर तुम एक दूसरे के साथ आयाम तुलना कर सकते हैं:

Signal 1: [(x0,y0), (x1,y1), (x2,y2), (x3,y3), ...] 
Signal 2: [(x0,z0), (x1,z1), (x2,z1), (x3,z3), ...] 

फेंक दूर समय: जैसे - यदि हां, तो शायद आप फेंक सकता है तो समय समन्वय । शायद आप z के खिलाफ y साजिश सकता है:

Comparing: [(y0,z0), (y1,z1), (y2,z2), (y3,z3), ...] 

या विभिन्न सहसंबंध गुणांक में से एक की गणना।

1

सामान्य समाधान: आप डेटा को हिस्टोग्राम में बिन कर सकते हैं और ची-स्क्वायर टेस्ट या कोलोमोग्रोव परीक्षण का उपयोग कर सकते हैं। (: आँकड़ों के भीतर करने के लिए एक ही आकार है कि है)

दोनों स्पष्ट रूप से संभावना है कि अनुमान लगाने के लिए है कि दो वितरण ही छोटा सा अफसर वितरण से यादृच्छिक नमूने का प्रतिनिधित्व करना है।

मैं डॉक्स कुछ को इंगित विश्वास है:

मैं अपने सिर के ऊपर से एसी कार्यान्वयन पता नहीं है, लेकिन ROOT C++ दोनों के कार्यान्वयन प्रदान करता है कागजात भी।


मुझे लगता है कि CERNLIB फ़ोरट्रॉन 77 में दोनों एल्गोरिदम, जो आप कर सकते हैं ग के लिए लिंक प्रदान करता है। रूट कोड का अनुवाद करना आसान हो सकता है।

1

आप फास्ट फूरियर ट्रांसफॉर्म (विकिपीडिया में एफएफटी देखें, रूपांतरण करने के लिए ओपन सोर्स लाइब्रेरीज़ देख सकते हैं) का प्रयास कर सकते हैं।

FFTs समय डोमेन (अर्थात एक नाड़ी 1s, 2s, 3s, 4s पर ...) आवृत्ति डोमेन आंकड़ों के से अपने डेटा को बदल सकते हैं (उदाहरण के लिए प्रत्येक दूसरे पल्स)।

फिर आप आवृत्तियों और उनके सापेक्ष स्ट्रेन्गों की तुलना आसानी से कर सकते हैं।यह आपके लिए सही दिशा में एक कदम होना चाहिए।

+0

इनपुट के कुछ प्रकार के लिए नहीं एक बुरा सुझाव है, लेकिन आप वास्तव में एक ही समस्या के साथ ओपी छोड़: कैसे दो स्पेक्ट्रा के तुलना करें। – dmckee

+0

dmckee: सिवाय इसके कि चौकोर रूपांतरित परिवर्तन सिग्नल बिना बदलाव के तुलनीय बिंदु-दर-बिंदु होंगे। वैसे, "स्पेक्ट्रा" मूल संकेतों के लिए गलत शब्द है, क्योंकि इससे एक्स अक्ष पर ऊर्जा (या समतुल्य माप) का अर्थ होगा। – Svante

14

cross-correlation function क्लासिक सिग्नल प्रोसेसिंग समाधान है। यदि आपके पास मैटलैब तक पहुंच है, तो XCORR फ़ंक्शन देखें। max(abs(xcorr(Signal1, Signal2, 'coeff'))) आपको विशेष रूप से जो कुछ भी ढूंढ रहा है वह आपको देगा और पाइथन में समकक्ष भी मौजूद है।

क्रॉस-सहसंबंध मानता है कि "समानता" जो आप खोज रहे हैं वह दो संकेतों के बीच रैखिक संबंध का एक उपाय है। समय सूचकांक n = 0..N-1 साथ वास्तविक मूल्य परिमित-लंबाई संकेतों के लिए परिभाषा है: -N..N से

C[g] = sum{m = 0..N-1} (x1[m] * x2[g+m]) 

g रन (कि सीमा के बाहर योग अंदर उत्पाद 0 है)।

हालांकि आपने किसी संख्या के लिए कहा है, तो समारोह बहुत दिलचस्प है। फ़ंक्शन डोमेन g को अंतराल डोमेन कहा जाता है।

यदि x1 और x2 एक समय शिफ्ट से संबंधित हैं, तो क्रॉस-सहसंबंध समारोह में शिफ्ट के अनुरूप अंतराल पर इसकी चोटी होगी। उदाहरण के लिए, यदि आपके पास x1 = sin[wn] और x2 = sin[wn + phi] था, तो एक ही आवृत्ति और विभिन्न चरण में दो साइन लहरें, पार-सहसंबंध समारोह चरण चरण के अनुरूप अंतराल पर अपने चरम पर होगा।

यदि x2x1 का एक स्केल संस्करण है, तो क्रॉस-सहसंबंध भी स्केल करेगा। आप sqrt(sum(x1^2)*sum(x2^2)) द्वारा विभाजित करके फ़ंक्शन को एक सहसंबंध गुणांक में सामान्यीकृत कर सकते हैं, और इसे पूर्ण मूल्य (0 मैटलैब की यह पंक्ति है) द्वारा 0..1 में लाएं।

अधिक आम तौर पर, नीचे का क्रॉस-सहसंबंध अच्छा/बुरा है इसका सारांश है।

पार से संबंध निर्धारित करने के लिए अच्छी तरह से काम करता है, तो एक संकेत रैखिक दूसरे से जुड़े हुए है, वह यह है कि अगर
x2(t) = sum{n = 0..K-1}(A_n * x1(t + phi_n))
जहां x1(t) और x2(t) सवाल में संकेत कर रहे हैं, A_n कारकों स्केलिंग रहे हैं, और phi_n समय बदलाव कर रहे हैं। इस के निहितार्थ हैं:

  1. यदि एक संकेत एक समय अन्य (phi_n <> 0 for some n) के संस्करण में स्थानांतरित कर दिया है पार से संबंध समारोह होगा गैर शून्य।
  2. यदि एक सिग्नल अन्य (A_n <> 0 for some n) का स्केल संस्करण है तो क्रॉस-सहसंबंध फ़ंक्शन गैर-शून्य होगा।
  3. यदि एक सिग्नल दूसरे के स्केल किए गए और समय स्थानांतरित संस्करणों का संयोजन है (A_n और phi_n कुछ संख्याओं के लिए गैर-शून्य हैं) क्रॉस-सहसंबंध फ़ंक्शन गैर-शून्य होगा। ध्यान दें कि यह एक रैखिक फ़िल्टर की परिभाषा भी है।

अधिक ठोस पाने के लिए, मान लीजिए x1 एक वाईडबैंड यादृच्छिक संकेत है। x2=x1 दें। अब सामान्यीकृत क्रॉस-सहसंबंध फ़ंक्शन जी = 0 पर बिल्कुल 1 होगा, और हर जगह 0 के करीब होगा। अब x2x1 का एक (रैखिक रूप से) फ़िल्टर संस्करण बनें। क्रॉस-सहसंबंध समारोह g=0 के पास शून्य-शून्य होगा। गैर-शून्य भाग की चौड़ाई फ़िल्टर की बैंडविड्थ पर निर्भर करेगी।

x1 और x2 के विशेष मामले के लिए आवधिक होने के कारण, उत्तर के मूल भाग में चरण-परिवर्तन पर जानकारी लागू होती है।

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

सभी मामलों में, क्रॉस-सहसंबंध समारोह को सामान्यीकृत करने और अधिकतम मूल्य को देखने से आपको पता चलेगा कि सिग्नल संभावित रूप से रैखिक रूप से संबंधित हैं - यदि संख्या कम है, तो 0.1 से कम की तरह, मैं उन्हें असंबंधित घोषित कर दूंगा। उससे अधिक और मैं इसे अधिक सावधानी से देखता हूं, सामान्यीकृत और असामान्य क्रॉस-सहसंबंध कार्यों दोनों को चित्रित करता हूं और संरचना को देखता हूं। एक आवधिक क्रॉस-सहसंबंध का तात्पर्य है कि दोनों सिग्नल आवधिक हैं, और क्रॉस-सहसंबंध फ़ंक्शन जो g=0 के आसपास काफी अधिक है, का अर्थ है कि एक सिग्नल दूसरे का फ़िल्टर किया गया संस्करण है।

+0

यह सवाल से पूरी तरह से स्पष्ट नहीं है, लेकिन अगर महाधमनी समानता के आकार (बजाय-फासिनेस की बजाय) चाहता है, तो क्रॉस-सहसंबंध इष्टतम से कम है: एक बेस सिग्नल s_b और दो परीक्षण सिग्नल t_1 दिए गए हैं, टी 2, यह बताने के लिए उपयुक्त नहीं है कि कौन सा टेस्ट सिग्नल बेस सिग्नल की तरह है। – dmckee

+0

मैं एक ऐसे फ़ंक्शन की तलाश में हूं जो समानता के आकार को माप सके। बेहतर क्या होगा? – oort

+0

@oort: कुछ विकल्पों के लिए मेरा जवाब देखें। ये अधिक जटिल हैं कि पार सहसंबंध, लेकिन वे वास्तव में आकार समानता के मामले में सीधे जाते हैं। – dmckee

1

Dynamic Time Warping एक ऐसा दृष्टिकोण है जिसका उपयोग आप कर सकते हैं यदि सिग्नल को तेजी से और अलग-अलग स्थितियों पर समय धीमा कर मिलान किया जाना चाहिए।

0

आप सिग्नल के बारे में बहुत कुछ नहीं कहते हैं, और आपके लिए "समानता" का क्या अर्थ सार्थक होगा। लेकिन, अगर सिग्नल चरण में हैं (यानी, आप तुरंत दो संकेतों की तुलना करना चाहते हैं, और किसी भी समय पर विचार करने में देरी नहीं होगी) तो मैं सुझाव दूंगा कि आप पियरसन के सहसंबंधक को देखें। यह आपको 1 का मान देता है यदि दो सिग्नल समान हैं, 0 का मान अगर वे पूरी तरह से भिन्न हैं, और यदि वे थोड़े कविता के बीच में कुछ हैं। एक अतिरिक्त लाभ के रूप में, पियर्सन की परवाह नहीं है कि सिग्नल अलग-अलग बढ़ाए गए हैं, (सिवाय इसके कि यदि एक सिग्नल दूसरे के विपरीत है तो यह आपको -1 का परिणाम देता है)।

क्या यह वही लगता है जो आप खोज रहे हैं?

http://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient

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