इस तरह से दिया गया डेटा:

>> x = [0,3.0001,7,9];
>> y = [0 1 0 1];
>> plot(x, y);

मुझे एक डिजिटल सिग्नल जैसा दिखने के लिए प्लॉट की जरूरत है, न कि रैखिक प्रक्षेप की तरह (ग्रे और ब्लू लाइन देखें)।

Enter image description here

क्यों?? (आप वास्तव में यह पढ़ने की जरूरत नहीं है):

मैं सेंसर द्वारा दी गई घटनाओं की साजिश रच रहा हूं, इसलिए मुझे सेंसर की वर्तमान स्थिति बनाम समय की साजिश रचनी होगी। घटनाओं को एक दी गई आवृत्ति के साथ ताज़ा नहीं किया जाता है। मेरे पास अभी समय है जब सेंसर की स्थिति बदल जाती है। मेरे डेटा सेट कुछ इस प्रकार हैं:

संवेदक १ समय पर ०

सेंसर 2 समय 0.05 पर

सेंसर 1 ऑफ टाइम 1.15

सेंसर 2 ऑफ टाइम 1.55

...

मुझे पता नहीं है कि MATLAB या ऑक्टेव इस तरह के संकेतों को प्लॉट करने के लिए विनियोजित हैं।

2
Cristian 30 नवम्बर 2015, 13:51

3 जवाब

सबसे बढ़िया उत्तर

सीढ़ियों का उपयोग करें :

figure;
stairs(x,y);

या

x = [0,3,7,9];
y = [0 1 0 1]; % Input

साजिश रचने से पहले यह कोड जोड़ें:

x1(1) = x(1);
j = 2;
for i=2:numel(x)
    x1(j) = x(i);
    j =j+1;
    x1(j) = x(i);
    j=j+1;
end
x1

j = 1;
for i=1:numel(y)-1
  y1(j) = y(i);
  j =j+1;
  y1(j) = y(i);
  j=j+1;
end
y1(j) = y(end);
y1

परिणाम:

x1 = [0, 3, 3, 7, 7, 9, 9]
y1 = [0, 0, 1, 1, 0, 0, 1]

plot(x1, y1);
3
Peter Mortensen 8 पद 2015, 21:22

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

Ns = 1000; % number of points to use
x = linspace(0, 12, Ns);
y = zeros(1,Ns); %// initialize to all zeros
y( x >= 3 & x <= 7 ) = 1; %// signal high when x in range [3,7]
y( x > 9 ) = 1; %// signal high when x greater than 9

figure;
plot(x, y);
2
mikkola 30 नवम्बर 2015, 11:35

मुझे नहीं पता कि MATLAB में इस तरह की साजिश है। लेकिन आप सेगमेंट से उस प्लॉट को टाई कर सकते हैं।

x=[0,3.0001,7,9];
y=[0 1 0 1];
ax = axes;
for iSegment = 1:numel(x)-1
    jump = y(iSegment)+1 - y(iSegment);
    line([x(iSegment) x(iSegment+1)], [y(iSegment), y(iSegment)]);
    if jump < 0
        line([x(iSegment) x(iSegment)], [y(iSegment), y(iSegment+1)]);
    elseif jump > 0
        line([x(iSegment+1) x(iSegment+1)], [y(iSegment), y(iSegment+1)]);
    end
end
1
Zoltán Csáti 30 नवम्बर 2015, 11:31