|  | 
		 Νέα για πρωτοετείς
		Είσαι πρωτοετής;... Καλώς ήρθες! Μπορείς να βρεις πληροφορίες εδώ. Βοήθεια για τους καινούργιους μέσω χάρτη. Κατεβάστε εδώ  το Android Application για εύκολη πρόσβαση στο forum. 
		 Νέα!
		 Ανεβάζετε τα θέματα των εξετάσεων στον τομέα Downloads
			
				| 
			
				|  Show Posts |  
				| Pages: [1] |  
			
				| 
						
							| 4 | Μαθήματα Κύκλου Ηλεκτρονικής & Υπολογιστών  / Ψηφιακά Φίλτρα / Re: [Ψηφιακά Φίλτρα] Απορίες σε ασκήσεις 2019 | on: June 13, 2019, 15:11:41 pm |  
							| Εδώ είναι η λύση που έβαλα τελικά εγω. function [R,p,w_o] = wiener( a, b, c, sigma_v1, sigma_v2 )
 a = [1; a(:)];
 
 A = [a(1) a(2) a(3) a(4); a(2) a(1)+a(3) a(4) 0; a(3) a(2)+a(4) a(1) 0; a(4) a(3) a(2) a(1)];
 
 B = [sigma_v1; 0; 0; 0];
 
 r = A \ B;
 R = toeplitz(r);
 
 p = R * (-b');
 
 w_o = R \ p;
 
 end
 
 
 function [y,w_out] = lms(u, d, m, mu)
 % LMS - Least Mean Square adaptation
 %
 
 persistent w
 persistent u_stream
 
 
 % initialize
 if isempty(w)
 w = zeros( m, 1 );
 u_stream = zeros(m,1);
 end
 
 u_stream(end+1, 1) = u;
 
 
 % compute output
 y = w' * u_stream(end:-1:end-m+1);
 
 % get error
 e = d - y;
 
 
 
 % update weights
 w = w + mu * e * u_stream( end:-1:end-m+1 );
 
 
 
 if nargout > 1
 w_out = w;
 end
 
 
 end
 
 
 function [y,w_out] = nlms(u, d, m, mu, alpha)
 % LMS - Least Mean Square adaptation
 %
 
 persistent w
 persistent u_stream
 
 
 % initialize
 if isempty(w)
 w = zeros( m, 1 );
 u_stream = zeros(m,1);
 end
 
 u_stream(end+1, 1) = u;
 
 
 
 
 % compute output
 y = w' * u_stream(end:-1:end-m+1);
 
 % get error
 e = d - y;
 
 % update weights
 w = w + mu * e * u_stream( end:-1:end-m+1 )/ (alpha + u_stream( end:-1:end-m+1 )' * u_stream( end:-1:end-m+1 ));
 
 
 
 
 
 if nargout > 1
 w_out = w;
 end
 
 
 end
 
 
 
 function [y,w_out] = rls(u, d, m, lambda, delta)
 % LMS - RLS adaptation
 %
 
 persistent w
 persistent u_stream
 persistent P
 
 
 % initialize
 if isempty(w)
 w = zeros( m, 1 );
 u_stream = zeros(m,1);
 P = (1 / delta) * eye(m, m);
 
 end
 
 u_stream(end+1, 1) = u;
 
 
 
 % compute output
 y = w' * u_stream(end:-1:end-m+1);
 
 % get error
 e = d - y;
 
 
 %compute k
 k = ((lambda^-1) * P * u_stream( end:-1:end-m+1 ) / (1 + (lambda^-1) * u_stream( end:-1:end-m+1 )'* P * u_stream( end:-1:end-m+1 )));
 
 
 
 % update weights
 w = w + k * e;
 
 %compute P
 P = (lambda^-1) * P - (lambda^-1) * k * u_stream( end:-1:end-m+1 )' * P;
 
 
 
 if nargout > 1
 w_out = w;
 end
 
 
 end
Όποιος θέλει το παίρνει. Ο βαθμός του είναι 0.63. |  
							|  |  |  
			
				| 
						
							| 5 | Μαθήματα Κύκλου Ηλεκτρονικής & Υπολογιστών  / Ψηφιακά Φίλτρα / Re: [Ψηφιακά Φίλτρα] Απορίες σε ασκήσεις 2019 | on: June 13, 2019, 15:07:47 pm |  
							| Στην ουσία αυτό που ζητάει η εκφώνηση και εκεί την πατήσαμε πολλοί είναι ότι θέλει να κάνεις προσαρμογή από την πρώτη χρονική στιγμή υποθέτοντας όλες τις υπόλοιπες ότι είναι ίσες με μηδέν. Στην άσκηση δύο μας έλεγε συγκεκριμένα ότι μέχρι να έχουμε αρκετές χρονικές στιγμές (δηλαδή m σε πλήθος) να θέτουμε την έξοδο ίση με το u και για αυτό παίρναμε τις περιπτώσεις if length(u)<m. Τώρα δεν χρειάζονται οι If γιατί αρχικοποιείς τον u_steam με m μηδενικά όπως το ζητάει στην εκφώνηση.  Άρα εκεί που κάνεις Initialize τον w πρέπει να κάνεις και τον u_stream με τον ίδιο τρόπο. Με τον ίδιο τρόπο σου ζητάει να ξεκινάς και στα υπόλοιπα (nlms, rls). Αλλά και πάλι θα στην παίρνει μερικώς σωστή την άσκηση και δεν ξέρω γιατί. Εκεί έχουμε κολλήσει όλοι. 
 Ευχαριστούμε! Στο 0.63 έχουν κολλήσει όλοι? |  
							|  |  |  
			
				| 
						
							| 8 | Μαθήματα Κύκλου Ηλεκτρονικής & Υπολογιστών  / Ψηφιακά Φίλτρα / Re: [Ψηφιακά Φίλτρα] Απορίες σε ασκήσεις 2019 | on: June 11, 2019, 13:06:42 pm |  
							| Μπορει κανεις να μου εξηγησει τι κανω λαθος στην 4η ασκηση? Παιρνω 0.25, δηλαδη ο wiener βγαινει σωστος αλλα τα υπολοιπα οχι... Δεν μπορω να καταλαβω γιατι, τα κανω οπως ο φλωρος στην απαντηση που ειχε δωσει σε προηγουμενη ασκηση function [y,w_out] = lms(u, d, m, mu)% LMS - Least Mean Square adaptation
 %
 
 persistent w
 persistent u_stream
 
 % initialize w
 if isempty(w)
 w = zeros( m, 1 );
 end
 
 u_stream(end+1, 1) = u;
 
 if length( u_stream ) < m
 y = 0;
 else
 % compute output
 y = w' * u_stream(end:-1:end-m+1);
 % get error
 e = d - y;
 
 if length( u_stream ) > m
 % update weights
 w = w + mu * e * u_stream( end:-1:end-m+1 );
 end
 end
 
 if nargout > 1
 w_out = w;
 end
 
 end
 
 
 |  
							|  |  |  |  |