|
 Νέα για πρωτοετείς
Είσαι πρωτοετής;... Καλώς ήρθες! Μπορείς να βρεις πληροφορίες εδώ. Βοήθεια για τους καινούργιους μέσω χάρτη. Κατεβάστε εδώ το Android Application για εύκολη πρόσβαση στο forum.
 Νέα!
 Για ανανέωση (ή προσθήκη νέου) avatar, πρέπει η μεγαλύτερη διάσταση της εικόνας να είναι 110 pixels.
Show Posts
|
Pages: [1]
|
4
|
Μαθήματα Κύκλου Ηλεκτρονικής & Υπολογιστών / Ψηφιακά Φίλτρα / Re: [Ψηφιακά Φίλτρα] Απορίες σε ασκήσεις 2019
|
on: June 13, 2019, 16: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, 16: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, 14: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
|
|
|
|
|