A method of decoding a received data signal in a communication system, said communication system being a multi-antenna system, wherein said received data signal corresponds to a transmitted data signal transported by a transmission channel, said transmission channel being associated with a channel matrix of a given dimension (n) and a QR decomposition being previously applied to said channel matrix where Q designates an orthogonal matrix and R an upper triangular matrix, the data signal being received as a complex-valued vector and being subsequently transformed into a real-valued representation, wherein said method comprises: - iteratively constructing a decoding tree, each node of said decoding tree corresponding to a component of a symbol of said data signal, and being associated with a metric, wherein said step of constructing the decoding tree implements at least one iteration of the following steps, for a current node of the tree stored in the top of a stack: - generating a reference child node (s i) of said current node from said vector representing the received data signal, said step of generating a reference child node comprising projecting the vector representing the received signal on a layer of said upper triangular matrix; - from the reference child node (s i), generating a first neighbor child node by subtracting a positive integer parameter (p) from the value of the reference node (s i), and a second neighbor child node by adding said positive integer parameter (p) to the value of the reference child node (s i); - storing in said stack at most three child nodes deriving from the reference child node and from said first and second neighbor child nodes, each child node being stored in the stack in association with node information comprising a predetermined metric, the nodes in the stack being ordered by increasing values of metrics; - removing the current node from said stack; - selecting the top node of said stack as the new current node; wherein the value of each node in the tree corresponds to the component of a symbol belonging to a given constellation having a predefined range between a minimum threshold and a maximum threshold, wherein each step of generating a child node comprises determining if the generated nearest integer to the value of child node is comprised between said minimum threshold and said maximum threshold, the method further comprising for at least one of the three generated child nodes: - if the generated nearest integer to the value of the child node is comprised between said minimum threshold and said maximum threshold, setting the child node to the nearest integer value within the constellation range, wherein said method further comprises determining an estimation of said data signal from the node information stored in said stack. - iteratively constructing a decoding tree, each node of said decoding tree corresponding to a component of a symbol of said data signal, and being associated with a metric, - generating a reference child node (s i) of said current node from said vector representing the received data signal, said step of generating a reference child node comprising projecting the vector representing the received signal on a layer of said upper triangular matrix; - from the reference child node (s i), generating a first neighbor child node by subtracting a positive integer parameter (p) from the value of the reference node (s i), and a second neighbor child node by adding said positive integer parameter (p) to the value of the reference child node (s i); - storing in said stack at most three child nodes deriving from the reference child node and from said first and second neighbor child nodes, each child node being stored in the stack in association with node information comprising a predetermined metric, the nodes in the stack being ordered by increasing values of metrics; - removing the current node from said stack; - selecting the top node of said stack as the new current node; - if the generated nearest integer to the value of the child node is comprised between said minimum threshold and said maximum threshold, setting the child node to the nearest integer value within the constellation range,