%**********************************************************
%**         Výpocet Walshovy modifikované base           **
%**               Diskrétní transformace                 **
%**      Leos Marsalek Leos.Marsalek@tiscali.cz          **
%**           Jan Skapa Jeniczek.s@seznam.cz             **
%**     (c) 2003   upraven algoritmus Davida Horáka      **
%**********************************************************

function [Wm]=walshm(n)
%--------------------- Generovani Rademacherovy báze ----------------------
plus=0;
N=2^n;
vysledek=-1.*ones(n+1,N);
vaha=zeros(n+1,N);
vysledek(1,:)=1;
for r=1:n
    deleni=2^r;
    
for s=1:deleni:2^n
        
for q=1:round(deleni/2)
            vysledek(n-r+2,s+q-1)=1;  
            vaha(n-r+1,s+q-1)=1;
        
end
    end
end
%---------------------- Konec generovani Rademacherovy baze -------------
rad=vysledek;
%---------------------- Vygenerovani Walshovy baze
baze=ones(N,N);
for k=1:N
   
for q=1:n+1     
     baze(k,:)=baze(k,:).*rad(q,:).^vaha(n-q+2,N-k+1);
   
end
end  
W=baze;
for i=1:size(W,2)-1
  S(:,i)=W(:,i)+W(:,i+1);
end

for 
i=1:N
  Z(i)=N-nnz(S(i,:));
end

for 
i=1:N
  Wm(i,:)=W(Z==i,:);
end