It is well known that Code Division Multiple Access (CDMA) scheme is robust to frequency selective fading and has been successfully introduced in commercial cellular mobile communications such as IS-95 and 3G systems. Also, Orthogonal Frequency Division Modulation (OFDM) scheme is inherently robust to frequency selective fading; however, it has some drawbacks such as difficulty in subcarrier synchronization, sensitivity to frequency offset and nonlinear amplification. CDMA scheme, despite robustness against frequency selective fading, has problems in high-speed transmission situations. For example in multi-path channels for good reception of the signal it is necessary to use RAKE receiver with many arms (equal to number of paths) and this would be a challenge to implement as it would lose some signal energy. The success of the spread spectrum techniques for second-generation mobile radio and OFDM for digital broadcasting and wireless LANs motivated many researchers to investigate the combination of both techniques. The combination of CDMA and multi-carrier modulation was independently proposed by three different groups in 1993. So far, Multi-Carrier CDMA system has drawn a lot of attention, and many research activities have started on this subject. Today, the MC-CDMA system is considered to be the most important candidate as a physical layer protocol for 4G mobile communications. Therefore, the necessity of study and research on this topic is clear. The purpose of this thesis is first to recognize the basics of MC-CDMA and to become familiar with its transmitter and receiver model. Since MC-CDMA is a multi-carrier modulation, it suffers from inter-carrier interference due to different reasons such as non-synchronize oscillators in transmitter and receiver or Doppler shift in multi-path channels. One way to combat this problem is to use Viterbi algorithm as a useful method to detect the Maximum Liklihood (ML) path which is investigated in this thesis. Using the receiver information about transmitted signal can be used to reduce the computational complexity of Viterbi algorithm and speed it up. The way to unify both Viterbi algorithm and equalizer which would result in hardware reduction in receiver is described at the end.