Iterative multiuser joint decoding: Optimal power allocation and low-complexity implementation