LTE Narrowband Internet of Things (NB-IoT) is a 3GPP defined cellular technology that is designed to enable connectivity to many low-cost and low power/throughput IoT devices running delay-tolerant applications. NB-IoT can coexist within LTE spectrum either in a standalone mode, in-band with LTE or in guard-band of LTE. With NB-IoT designed to operate in very low signal to noise power ratios, the uplink receiver design presents several challenges. In this paper the design and performance of a NB-IoT uplink receiver is studied in detail. First, receiver design for NB-IoT uplink channels, with corresponding mathematical analysis, is presented. Specifically, it is shown how the time/frequency structure of signals can be exploited to enhance the receiver performance. Second, the performance of each channel is characterized with both link level simulations and implementation on a commercially deployed Qualcomm(registered) FSM(Trade Mark) platform [1]. Comparisons against the 3GPP defined Radio Performance and Protocol aspect requirements are also provided. Finally, implementation details are addressed and discussions on proposed enhancements to NB-IoT in 3GPP Release 15 are provided. It is shown how the proposed receiver algorithms can be adopted to Release 15 enhancements with minor or no modifications. The work in this paper is of significance to system designers looking to implement efficient NB-IoT uplink receiver to coexist with legacy LTE systems.