function x = ifftNM(XF, N, M, gpuFlag)
    %-------------------------------------------------------------------------------------
    % Copyright 2018 by Koc University and Deniz Kilinc, A. Gokcen Mahmutoglu, Alper Demir 
    % All Rights Reserved
    %-------------------------------------------------------------------------------------
    
	% N... number of variables
	% M... number of time points
	K = (M-1)/2; % number of freqs
	nCol = size(XF,2);

	if nargin < 4
		gpuFlag = false;
	end

	if nCol > 1
		x = zeros(NM, nCol);
		for i=1:nCol
			x(:,i) = ifftNM(XF(:,i),N,M);
		end
	else
		if gpuFlag
			XF = gpuArray(reshape(XF,N,M));
			x = transp(gather(ifft(XF(:, [K+1:M, 1:K]).')))*M;
		else
			XF = reshape(XF,N,M);
			x = transp(ifft(transp(XF(:, [K+1:M, 1:K]))))*M;
		end
		x = x(:);
	end
	
end