stefanos59 Δημοσ. 14 Νοεμβρίου 2010 Δημοσ. 14 Νοεμβρίου 2010 Γεια σας επειδη εχει κολλησει το μυαλο μου θα ηθελα να ρωτησω κατι. Οταν θελουμε να σχεδιασουμε ενα τετραγωνικο παλμο με περιοδο Τ θα βαλω σε ενα διανυσμα Τ=[::] και μετα θα κανω square(T), αν ομως αυτος ο παλμος διαρκει π.χ 2*Τ πως θα το κανω αυτο? θα το βαλω μεσα στην square? Ευχαριστω εκ των προτερων!!
Dr.Fuzzy Δημοσ. 14 Νοεμβρίου 2010 Δημοσ. 14 Νοεμβρίου 2010 Δες εδώ: http://www.insomnia.gr/forum/showthread.php?t=416077
stefanos59 Δημοσ. 15 Νοεμβρίου 2010 Μέλος Δημοσ. 15 Νοεμβρίου 2010 οκ, ΤΗΑΝΚS ---------- Προσθήκη στις 19:27 ---------- Προηγούμενο μήνυμα στις 16:07 ---------- Να ρωτησω το παρακατω ειναι λαθος? >dt=0.001; T1=5/4; t1=T1/2; %sxediasmos tou tetragwnikou palmou %to x einai periodiko me T1 enos tetragwnikou palmou diarkeia t1(1,12) for i=1:dt:12 for j=1:10 if i>1 && i<1+j*t1 x=1; else i>1+t1*j && i<T1*j+1 x=0; end end end plot(x);
Dr.Fuzzy Δημοσ. 15 Νοεμβρίου 2010 Δημοσ. 15 Νοεμβρίου 2010 Το είδες το link που έδωσα; Υπάρχει η square και αυτό που θες να κάνεις είναι 3 γραμμές κώδικα! Δεν υπάρχει λόγος να το κάνεις με if-clauses και for-loops, άσε που στο MATLAB αυτά πρέπει να αποφεύγονται όταν είναι δυνατό. Δεν γράφεις C, το MATLAB έχει άλλη φιλοσοφία.
stefanos59 Δημοσ. 15 Νοεμβρίου 2010 Μέλος Δημοσ. 15 Νοεμβρίου 2010 Ναι το ειδα,απλα ηθελα να προσπαθησω να το κανω και ετσι για να το κατανοησω καλυτερα... Δοκιμασα και με ones() και zeros(),αλλα κολλαω στα διαστηματα..
Dr.Fuzzy Δημοσ. 15 Νοεμβρίου 2010 Δημοσ. 15 Νοεμβρίου 2010 Ναι το ειδα,απλα ηθελα να προσπαθησω να το κανω και ετσι για να το κατανοησω καλυτερα...Δοκιμασα και με ones() και zeros(),αλλα κολλαω στα διαστηματα.. Ναι αυτό σου λέω, ΔΕΝ πρέπει να το κάνεις έτσι στο MATLAB. Ο κώδικας που "κρύβεται" πίσω από την εντολή square είναι διαθέσιμος και μπορείς να τον δεις (>> edit square) για να το κατανοήσεις καλύτερα.
stefanos59 Δημοσ. 15 Νοεμβρίου 2010 Μέλος Δημοσ. 15 Νοεμβρίου 2010 ααααα,μαλιστα...Οκ σε ευχαριστω!!!
stefanos59 Δημοσ. 16 Νοεμβρίου 2010 Μέλος Δημοσ. 16 Νοεμβρίου 2010 Να ρωτησω για το σχεδιασμο του παρακατω σηματος στην matab ο κωδικας που ακολουθει ειναι σωστος? X(t)=0.6*t για 0<=t<=1 X(t)=-0.6*t+1 για 1<t<=2 X(t)=0.6 για 2<t<=4 >for i=0:1 X(i)=0.6*i; end for i=1:2 X(i)=-0.6*i+1; end for i=2:4 X(i)=0.6; end plot(X);
Dr.Fuzzy Δημοσ. 16 Νοεμβρίου 2010 Δημοσ. 16 Νοεμβρίου 2010 άντε πάλι...σου εξήγησα ότι δεν πρέπει χρησιμοποιήσεις for και if εντολές και ότι ο κώδικας είναι 3-4 γραμμές! Κάνεις post έναν κώδικα που είναι ΠΑΝΤΟΥ λάθος και ρωτάς αν είναι σωστός; Ε, δε βλέπεις όταν το τρέχεις ότι κοκκινίζει όλο το workspace από τα λάθη; Κάτσε διάβασε λίγο τη γλώσσα που προσπαθείς να χρησιμοποιήσεις. Το index στους πίνακες ξεκινάει από το 1 και όχι από το 0 ! ΔΕΝ χρειάζονται τα for-loops, διότι η φιλοσοφία του MATLAB είναι ότι όλα είναι πίνακες! ΔΕΝ γράφεις όπως στη C. παράδειγμα στον κώδικά σου (που είναι λάθος έτσι και αλλιώς!): for i=1:2X(i)=-0.6*i+1; end μπορεί να γίνει: i=[1 2];X=-0.6*i+1;
insomniaK Δημοσ. 17 Νοεμβρίου 2010 Δημοσ. 17 Νοεμβρίου 2010 Για να καταλάβεις τη σημασία αυτού που αναφέρει ο Dr. Fuzzy, δοκίμασε το παρακάτω. Η πρώτη στήλη στον h είναι ο χρόνος χωρίς το loop και η δεύτερη με χρήση for. Το 1ο είναι περίπου 700 φορές γρηγορότερο, τουλάχιστον στον N280 του asus μου, κοίτα το figure. > clear for j=1:100 tic i=1:1:10^4; X=-0.6*i+1; h(j,1)=toc; tic for i=1:1:10^4 Y(i)=-0.6*i+1; end h(j,2)=toc; clear 'X' 'Y' end figure, plot(h(:,2)./h(:,1)), ylabel('Ratio of processing time (Mat/Loop)'), xlabel('Nr of Repetition') mean(h(:,2)./h(:,1) )
stefanos59 Δημοσ. 17 Νοεμβρίου 2010 Μέλος Δημοσ. 17 Νοεμβρίου 2010 Οντως ναι.. απλα μπερδευομαι γτ το κανω αλλιως αλλα δεν μου εμφανιζει το σημα.. >t=[0:0,001:4]; i=[0 1]; X=0.6*i; i1=[1 2]; X=-0.6*i1+1; i2=[2 3 4] X=0.6;%τετραγωνικος παλμος στο διαστημα i2 plot(X);
Timonkaipumpa Δημοσ. 18 Νοεμβρίου 2010 Δημοσ. 18 Νοεμβρίου 2010 Οντως ναι..απλα μπερδευομαι γτ το κανω αλλιως αλλα δεν μου εμφανιζει το σημα.. >t=[0:0,001:4]; i=[0 1]; X=0.6*i; i1=[1 2]; X=-0.6*i1+1; i2=[2 3 4] X=0.6;%τετραγωνικος παλμος στο διαστημα i2 plot(X); Όταν του λες plot... το MATLAB σχεδιάζει τιμές. Εάν έχεις ΜΙΑ τιμή, θα κάνει μία τελίτσα, που είναι αρκετά δύσκολο να την δεις εάν δεν είσαι υποψιασμένος. Εσύ στην μεταβλητή X έχεις ΜΟΝΟ μία τιμή λόγω της προτελευταίας γραμμής. Άρα, ένας 1x1 πίνακας στην plot είναι μία τελίτσα... και συγκεκριμένα αυτή είναι στο 1,0.6 Γιατί δεν χρησιμοποιείς την square που σου είπαν; Γράψε help square και θα έχεις όλη την εξήγηση του πώς λειτουργεί. Επίσης, θα σου πρότεινα να λειτουργείς με μεταβλητές αντί για απόλυτα νούμερα... κάλλιστα μπορείς να χρησιμοποιήσεις μία μεταβλητή ονόματος Fs αντί για απόλυτο βήμα στον vector σου (αντί για t=0:0.004:1 μπορείς να βάλεις t=0:1/Fs:1 ή t = 0:T:1 όπου Fs η sampling freq και Τ η περίοδος). Έτσι έχεις καλύτερο έλεγχο του τι κάνεις και τι συμβαίνει. edit Αυτό που θες να κάνεις.. μπορεί να γίνει με την square (όπως ΗΔΗ σου είπαν) και με την διαχείριση των στοιχείων του σήματος. Έτσι, εάν φτιάξεις το σήμα σου X = square(w.*t) (όπου w = 2*pi*f και t = 0:1/Fs:1) μπορείς μετά να κάνεις... X(startPoint:endPoint) = X(1:firstEndPoint).*desiredValue; Όπου startPoint είναι το σημείο που θες να αρχίσεις την αλλαγή και endPoint είναι το σημείο που θες να τελειώσεις την αλλαγή. desiredValue είναι η τιμή κέρδους που θες να εφαρμόσεις. Εάν έχεις τα σημεία για τις αλλαγές σε χρόνο (π.χ. sec) αντί για δείγματα, τότε μπορείς να βρεις τα δείγματα ως εξής: startPoint = Fs*startPointTime; endPoint = Fs*endPointTime; Και είσαι ΟΚ.
stefanos59 Δημοσ. 19 Νοεμβρίου 2010 Μέλος Δημοσ. 19 Νοεμβρίου 2010 Απλα ηθελα να δοκιμασω και χωρις την ετοιμη συναρτηση.. τελικα το εκανα και με την συναρτηση και χωρις... ευχαριστω!!!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.