function [U,W]=soluciona_permutacion(Y,W,n)
% Esta funcion recibe como entrada los n espectrogramas de las señales ya
% separadas pero con problemas de permutacion y escalado en Y, asi como las
% matrices de separacion para cada frecuencia en W(:,:,f). La salidas seran
% los espectrogramas de las señales separadas ya sin permutacion y las
% matrices W(:,:,f) corregidas. Empezamos alineando las altas frecuencias y
% usamos el coeficiente de correlacion de la subbanda actual con las
% ultimas subbandas ya alineadas

for ind=1:n
    U(length(Y(:,1,1)),:,ind)=Y(length(Y(:,1,1)),:,ind);
end

P=permugen([1:n]);  % Formamos todas las posibles permutaciones
I=eye(n);
Mopt=I;

% Almaceno en M todas las matrices que dan lugar a las posibles
% permutaciones de orden n
for k=1:length(P(:,1))
    for ind=1:n
        M(ind,:,k)=I(P(k,ind),:);
    end
end

fmax=length(Y(:,1,1));
N=floor(fmax/12);
faux=0;
for f=(fmax-1):-1:1
    faux=faux+1;
    maximo=0;
    for ind=1:n
        Yaux(ind,:)=Y(f,:,ind);
    end
    for k=1:length(P(:,1))
        Ym=M(:,:,k)*abs(Yaux);
        corr=0;
        if faux <=N
            for frec=(f+1):fmax
                for ind=1:n
                    corr=corr+abs(corco(Ym(ind,:),abs(U(frec,:,ind))));
                end
            end
        else
            for frec=(f+1):(f+N)
                for ind=1:n
                    corr=corr+abs(corco(Ym(ind,:),abs(U(frec,:,ind))));
                end
            end
        end
        
        if corr > maximo
            maximo=corr;
            Mopt=M(:,:,k);
        end
    end
    
    W(:,:,f)=Mopt*W(:,:,f);
    Yaux=Mopt*Yaux;
    for ind=1:n
        U(f,:,ind)=Yaux(ind,:);
    end
end