%% CÁLCULO FILTRO ADAPTADO GFDM
%<FA_GFDM>

%PARÁMETROS DE RETORNO:
%dhat: tramo de señal tras paso por filtro adaptado

%PARÁMETROS DE INGRESO:
%g: coeficientes filtro coseno alzano
%numSubSimb: Número de subsímbolos
%xhat: señal obtenida tras FFT en cadena de RX
%k: referencia de iteración

function dhat = FA_GFDM(g,numSubSimb,xhat,k)
    G = conj(fft(g));
    L = length(G)/numSubSimb;%Equivale al K o totSubEq
    portadora = circshift(xhat,ceil(L*numSubSimb/2) - numSubSimb*(k-1));
    portadora = fftshift(portadora(1:L*numSubSimb));
    portadAdapt = portadora .* G;
    dhat = ifft(sum(reshape(portadAdapt,numSubSimb,L),2)/L);
end

