MIMO OFDM Simulator: OFDM.m: OFDM Simulator (outer function) create_channel.m: Generates a Rayleigh fading frequency-selective channel, parametrized by the antenna configuration, the OFDM configuration, and the power-delay profile. svd_decompose_channel.m: Since full channel knowledge is assumed, transmission is across parallel singular value modes. This function decomposes the channel into these modes. BitLoad.m: Apply the bit-loading algorithm to achieve the desired bit and energy allocation for the current channel instance. ComputeSNR.m: Given the subcarrier gains, this simple function generates the SNR values of each channel (each singular value on each tone is a separate channel). chow_algo.m: Apply Chow's algorithm to generate a particular bit and energy allocation. EnergyTableInit.m: Given the SNR values, form a table of energy increments for each channel. campello_algo.m: Apply Campello's algorithm to converge to the optimal bit and energy allocation for the given channel conditions. ResolvetheLastBit.m: An optimal bit-loading of the last bit requires a unique optimization. modulate.m: Modulate the random input sequence according to the bit allocations for each channel. ENC2.mat: BPSK Modulator ENC4.mat: 4-QAM Modulator (Gray coded) ENC16.mat: 16-QAM Modulator (Gray coded) ENC64.mat: 64-QAM Modulator (Gray coded) ENC256.mat: 256-QAM Modulator (Gray coded) precode.m: Precode the transmitted vector at each time instance by filtering the modulated vector with the right-inverse of the channel's right singluar matrix. ifft_cp_tx_blk.m: IFFT block of the OFDM system. channel.m: Apply the channel to the OFDM frame. fft_cp_rx_blk.m: FFT block of the OFDM system. shape.m: Complete the diagonalization of the channel by filtering the received vector with the left-inverse of the channel's left singular matrix. demodulate.m: Perform a nearest neighbor search knowing the transmit constellation used.