OFDM symbol generator
Generates OFDM symbols, modulation options include QPSK,16QAM,64QAM
%bandwidth = nCar/nFFT *Fs
clear all;
nData = 200000; %vector length
ModulationType = '64QAM';
nFFT = 2048; %fft size
nCar = 1200; %number of active carriers
nPrefix = 144;
Fs = 10; %sampling rate
%compute number of ofdm symbols
nSymbols = ceil(nData/(nFFT+nPrefix));
%generate random data symbols
switch ModulationType
case 'QPSK', alphabet = [-1,1];
case '16QAM', alphabet = [-3,-1,1,3];
case '64QAM', alphabet = [-7,-5,-3,-1,1,3,5,7];
end
tx = [];
for k = 1:nSymbols
QAM = complex(randsrc(nCar,1,alphabet),randsrc(nCar,1,alphabet));
fft_in = zeros(1,nFFT);
fft_in(1:nCar/2) = QAM(1:nCar/2);
fft_in(end-nCar/2+1:end) = QAM(nCar/2+1:end);
fft_out = ifft(fft_in);
%concatenate ofdm symbol plus its prefix into tx vector
prefix = fft_out(nFFT-nPrefix+1:nFFT);
tx = [tx prefix fft_out];
end
[P, F] = pwelch(tx, hann(2^16), 0, 2^16, Fs);
P = fftshift(P);
F = F - max(F)/2;
plot(F,10*log10(P));