  LoRa is a popular low-power wide-area network (LPWAN) technology that uses
spread-spectrum to achieve long-range connectivity and resilience to noise and
interference. For energy efficiency reasons, LoRa adopts a pure ALOHA access
scheme, which leads to reduced network throughput due to packet collisions at
the gateways. To alleviate this issue, in this paper we analyze and implement a
LoRa receiver that is able to decode LoRa packets from two interfering users.
Our main contribution is a two-user detector derived in a maximum-likelihood
fashion using a detailed interference model. As the complexity of the
maximum-likelihood sequence estimation is prohibitive, a complexity-reduction
technique is introduced to enable a practical implementation of the proposed
two-user detector. This detector has been implemented along with an
interference-robust synchronization algorithm on the GNU Radio
Software-Defined-Radio (SDR) platform. The SDR implementation shows the
effectiveness of the proposed method and also allows its experimental
evaluation. Measurements indicate that our detector inherently leverages the
time offset between the two colliding users to separate and demodulate their
contributions.
