Abstract-Cognitive Radio (CR) has been considered as a potential candidate for addressing the spectrum scarcity problem of future wireless networks. Since its conception, several researchers, academic institutions, industries, regulatory and standardization bodies have put their significant efforts towards the realization of CR technology. However, as this technology adapts its transmission based on the surrounding radio environment, several practical issues may need to be considered. In practice, several imperfections such as noise uncertainty, channel/interference uncertainty, transceiver hardware imperfections, signal uncertainty, synchronization issues, etc. may severely deteriorate the performance of a CR system. To this end, the investigation of realistic solutions towards combating various practical imperfections is very important for successful implementation of the cognitive technology. In this direction, first, this survey paper provides an overview of the enabling techniques for CR communications. Subsequently, it discusses the main imperfections that may occur in the most widely used CR paradigms and then reviews the existing approaches towards addressing these imperfections. Finally, it provides some interesting open research issues.