function f=music(N,m,s);

%      f=music(N,m,s);
%
% Calcule le m-estimateur fréquentiel MUSIC d'un signal digital s (donné en
% ligne) attaché à une corrélation glissante de longueur N (on convient
% de prolonger le signal par 0 hors de la fenêtre pour effectuer le calcul
% des entrées de la matrice de corrélation). L'intervalle utile de
% fréquences est [-pi,pi]. 

M=length(s);
r=M-N+1;
music=zeros(N,r);

for j=0:r-1;
    s1=s((j+1):(j+N));
    s2=[s1,zeros(1,N)];
    for l=0:(N-1) 
    for k=1:N
      ax(k,l+1)=s2(l+1+N-k);
    end
    end
    R =(1/N)*ax*ax'; 
    [U,D,V]=svd(R);
    vprinc=U(:,1:m);
    W=fft(vprinc);
    W1=(1/N)*abs(W).^2;
    S=ones(1,N)-sum(W1');
    music(:,j+1)=ones(N,1)./S'; 
end  
    N1=fix(N/2);
    music1=music(1:N1,:);
    music2=music(N1+1:N,:);
    music=[music2; music1];
 f=music;