2015-08-27 9 views
7

मैं दो अलग-अलग संकेतों के बीच समानता की तुलना (माप) की तुलना करने के लिए एक अच्छा तरीका खोजने में पीड़ित हूं। मैं एक संकेत के समय-विलंब को दूसरे में नहीं ढूंढना चाहता, लेकिन मैं देखना चाहता हूं कि वे एक-दूसरे के समान कैसे हैं। उदाहरण के लिए, मेरे पास दो सिग्नल हैं, एस 1 ans s2 कहें। दो सिग्नल बहुत समान दिखते हैं, हालांकि एक सिग्नल में अचानक कूद होती है जिसके परिणामस्वरूप सिग्नल के दूसरे भाग (प्रभावशाली एक) में पहले भाग की तुलना में ऑफ़सेट होता है।माप दो अलग (वेक्टर) सिग्नल समानता

enter image description here

मुझे अंतर-सहप्रसरण के साथ ही पार से संबंध का उपयोग करें, यह मुझे एक बहुत ही गरीब परिणाम, अर्थात् देता है:

xcov(s1, s2, 0, 'coeff') ----> 0.2153 

हालांकि दो संकेतों को देखते हुए, हम देख सकते हैं कि वे बहुत समान हैं। वास्तव में केवल नमूना से दो संकेतों के पार सहप्रसरण लेने अगर (50-> संकेत के अंत), परिणाम बहुत अच्छा है:

xcov(s1(50:280), s2(50:280), 0, 'coeff') ----> 0.9666 

तो मैं लगता है कि समस्या बड़ी कूद की वजह से है नमूना 25 (लाल सिग्नल में) के आसपास।

मेरे प्रश्न हैं:

  • कैसे ऊपर समस्या पर काबू पाने के लिए?
  • क्रॉस-कॉन्वर्सिस (सहसंबंध) दो सिग्नल के बीच समानता को मापने का एक अच्छा तरीका है?
  • क्या ऐसा करने का कोई और तरीका है?

बहुत बहुत धन्यवाद। मैं वास्तव में आप से किसी भी मदद की सराहना करता हूं!

+4

आप संकेतों के * ढाल * के बीच समानता को मापने पर विचार करेंगे? – Shai

+2

क्या आप एक छोटी सी सीमा पर औसत मान की गणना करने के लिए एक मूविंग-औसत फ़िल्टर का उपयोग कर सकते हैं, फिर सिग्नल एन से घटाएं और फिर समानताओं की जांच करें? – Adriaan

+1

यदि आप उस कूद को एक बाहरी के रूप में देखते हैं, तो आप RANSAC (केवल एक विचार ...) –

उत्तर

-1

आप उन दो घटता के बीच क्षेत्र की गणना कर सकते हैं। यदि क्षेत्र छोटा है, तो वक्र समान होते हैं, यदि क्षेत्र बड़ा होता है तो ऐसा नहीं होता है।

संपादित करें: वक्र "कूद" और डीसी ऑफसेट मामलों से निपटने के लिए, दो घटता के बीच का क्षेत्र ICP (Iterative Closest Point) संरेखण करने के बाद caculated किया जाना चाहिए।

+0

धन्यवाद @ हेशम एरैकि। मुझे ऐसा नहीं लगता, सबसे पहले, कूदने से परिणाम में गंभीर अंतर आएगा। और शोर, या डीसी ऑफसेट के कारण, दो घटता के बीच का क्षेत्र ऐसा लगता है जितना बड़ा हो सकता है। – bienle

+0

@bienle मैंने तदनुसार अपना जवाब संपादित किया है। –

3

आपको शायद मजबूत सहसंबंध गुणांक में भी देखना चाहिए। चारों ओर कुछ साहित्य और शोध है। हालांकि जब मैंने आपके संकेतों को फिर से बनाया, तो मुझे आपके लिए समाधान मिल गया होगा। चूंकि संकेत एक बिंदु पर छोड़कर काफी स्थिर हैं क्योंकि एक साधारण चाल है।

हम s1 = [s1(1) cumsum(diff(s1))]; के साथ सिग्नल को फिर से बना सकते हैं। यहां से विचार सरल है। हम बड़ी कूद को अनदेखा करना चाहते हैं। इसलिए हमें अधिकतम मूल्य diff(s1) से सीमित करना होगा। यह द्वारा किया जाता है:

s1_robust = [s1(1) cumsum(sign(diff(s1)).*min(abs(diff(s1)),1))];

मैंने min(s1,1) भाग में मनमाने ढंग से 1 चुना है। आप सिग्नल मानक विचलन के कुछ कारकों में इसे सेट करना चाहते हैं।

यहां पूर्ण कोड है जिसका उपयोग मैंने आपकी समस्या का विश्लेषण करने के लिए किया था।

clc, clear all, close all 

signal = cos([0:0.1:20]); 
s1 = signal + rand(1,201); 
s2 = signal + rand(1,201); 
s2(50:end) = s2(50:end)-8; 

s1_robust = [s1(1) cumsum(sign(diff(s1)).*min(abs(diff(s1)),1))]; 
s2_robust = [s2(1) cumsum(sign(diff(s2)).*min(abs(diff(s2)),1))]; 
corr  = corrcoef(s1,s2) 
corr_robust = corrcoef(s1_robust,s2_robust) 

figure 
plot(s1); 
hold on; 
plot(s2); 

figure 
plot(cumsum(sign(diff(s1)).*min(abs(diff(s1)),1))); 
hold on; 
plot(cumsum(sign(diff(s2)).*min(abs(diff(s2)),1))); 
+0

बहुत धन्यवाद @ डेनिस – bienle

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