% Skrypt: Demonstracja uzycia warstwy elementow liniowych jako flitra clear all; % wstepna konfiguracja sieci N_n=20; % ilosc elementow w warstwie wagi_0=randn(N_n,1); % poczatkowe wartosci wag ybierane sa losowo nn=adaline(wagi_0, 0); % inicjujemy strukture przechowujaca dane sieci % Przygotowanie ciagu uczacego t=1:180; % ciag porzadanych odpowiedzi Z=sin(2*pi*4*t/200); % ciag wzorcow X=Z+1.2*randn(size(Z)); figure(1) subplot(311) plot(t,Z,t,X) ylim([-5,5]) title('stan poczatkowy') % ustawienia parametrow do algorytmu uczacego % uczenie przebiega metoda delta z bezwladnoscia eta=0.0002; % wspolczynnik przy gradiencie eta2=0.8; % wspolczynnik bezwladnosci N=15; % ilosc krokow uczenia len = length(X); % dlugosc ciagu uczacego xx=X(1:N_n)';%xx=zeros(size(wagi_0)); %uczymy neuron for k=1:N d(k)=0; for m=N_n+1:len xx=delay_line(X(m),xx); % wybieramy elementy wejsciowe ciagu uczacego zz=Z(m); % wybieramy element wyjsciowe ciagu uczacego % dla ilustracji rysujemy wybrany aktualnie fragment ciagu uczacego figure(1) subplot(313) plot(t,Z,t,X,t(m-N_n+1:m),xx,'r.',t(m),zz,'bo') title('aktualnie wybrany fragment ciagu uczacego') drawnow [nn, delta]=adaptuj_adaline_momentum(nn, xx, zz, eta,eta2); d(k)=d(k)+delta.^2; end for m=1:len xx=delay_line(X(m),xx); % wybieramy element ciagu uczacego Y(m)=adaline_sim(nn,xx); % sprawdzamy dzialanie sieci na ciagu uczacym end figure(1) subplot(312) plot(t,Z,t,Y) ylim([-5,5]) title('aktualny efekt dzialania sieci na ciagu uczacym') figure(2) subplot(211) semilogy(d) xlim([1,N]) title(sprintf('blad po %d cyklach uczenia',k)) drawnow end figure(2) % subplot(211) % % testujemy dzialanie sieci na oryginalnym zbiorze uczacym % xx=X(1:N_n)'; % for m=1:len % xx=delay_line(X(m),xx); % wybieramy element ciagu testowego % Y(m)=adaline_sim(nn,xx); % end % plot(t,Z,t,Y) % ylim([-5,5]) subplot(212) % testujemy dzialanie sieci na nowym zestawie danych z innym szumem i inna % czestoscia i faza oscylacji %ciag testowy wzorcow %X=Z+0.5*randn(size(Z)); Z=sin(2*2*pi*t/200+pi/3); X=Z+0.5*randn(size(Z));; xx=X(1:N_n)'; for m=1:len xx=delay_line(X(m),xx); % wybieramy element ciagu testowego Y(m)=adaline_sim(nn,xx); end plot(t,Z,t,X,t,Y) legend('czysty sygnal','zaszumione wejscie','wyjscie sieci' ,'Location','Best' ) title('eftekt dzialania sieci na nowych danych')