function x = genera_mezcla(A,B,M,N)

%--------------Funcion que genera las mezclas recibidas en los receptores-----------------------
%
%   La funcion introduce, en cada receptor,retardos haciendo uso de los filtros que se le pasan
%  como parametro. Luego mezcla las señales retardadas con una matriz de mezclas aleatoria.
%  Los filtros utilizados en cada receptor son elegidos de forma aleatoria
%  Por defecto, el esquema de simulacion es el 1. Para el otro esquema de simulacion, basta
%  cambiar la linea indicada
%
%-----------------------------------------------------------------------------------------------
%
%   ARGUMENTOS DE ENTRADA
%
%       A matriz cuyas filas son las fuentes originales
%       B matriz cuyas filas contienen los filtros a utilizar
%       M numero de recptores a emplear
%       N numero de fuentes que queremos separar
%   
%   ARGUMENTOS DE SALIDA
%
%       x vector que contiene las mezclas de señales recibidas en cada receptor
%
%-----------------------------------------------------------------------------------------------


x=[];
A2=[];

%Para variar los filtros utilizados en cada receptor, vamos rotando las filas de las filas
%de la matriz de los filtros en cada receptor. La variable Dim indica el numero de filas 
%rotadas en cada iteracion del algoritmo

Dim=1;


for i=1:M %Para cada receptor
    for j=1:N %Se introducen unos retardos en las fuentes 
        
        A2(j,:)=filter(B(1,:),1,A(j,:));
        
        %Para simular con el tercer esquema de simulacion poner en la linea de arriba
        %B(j,:) en lugar de B(1,:)

        
    end
    
        %Luego las señales retardadas que se obtienen se mezclan con una matriz de mezclas
        %generada de forma aleatoria
    
        aux=A2'*(rand(N,1)-0.5);
    
    
      
    x=[x;aux'];
    
    %Vamos variando los filtros para introducir retardos distintos en cada receptor
    %Si se desea simular el segundo esquema de simulacion, solo hay que obviar la linea 60
    
    B=flipdim(B,Dim);  

    
    
end

