You are on page 1of 2

% Bandwidth spreading factor of IFDMA subcarriers. totalSubcarriers = 256; % Data block size. numSymbols = 16; % System bandwidth.

Fs = 5e6; % System sampling rate. Ts = 1/Fs; % Oversampling factor. Nos = 4; Nsub = totalSubcarriers; Q = totalSubcarriers/numSymbols; % Bandwidth spreading factor of DFDMA. Q_tilda < Q. Q_tilda = 10; % Subcarrier spacing. Fsub = [0:Nsub-1]*Fs/Nsub; % Number of runs. numRuns = 1e4; if dataType == 'Q-PSK' tmp = randint(numSymbols,2); tmp = tmp*2 - 1; data = (tmp(:,1) + 1j*tmp(:,2))/sqrt(2); elseif dataType == '16QAM' dataSet=[ 3+3i 1+3i 1+3i 3+3i ... -3+1i -1+1i 1+1i 3+1i ... -3-1i -1-1i 1-1i 3-1i ... -3-3i -1-3i 1-3i 3-3i]./ sqrt(10); tmp = randint(numSymbols,1,[1 16]); data = dataSet(tmp).'; end X=iff(data); Y(1:Q:totalSubcarriers) = X; % Y(1:Q_tilda:Q_tilda*M) = X; Y(1:numSymbols) = X; % Convert data back to time domain. y = ifft(Y); % Perform pulse shaping. if pulseShaping == 1 % Up-sample the symbols. y_oversampled(1:Nos:Nos*totalSubcarriers) = y; % Perform filtering. y_result = filter(psFilter, 1, y_oversampled); else y_result = y; end % Calculate the PAPR. papr(n) = 10*log10(max(abs(y_result).^2) / mean(abs(y_result).^2)); % Plot CCDF. [N,X] = hist(papr, 100); semilogy(X,1-cumsum(N)/max(cumsum(N)),'b') pedAchannel = [1 10^(-9.7/20) 10^(-22.8/20)]; pedAchannel = pedAchannel/sqrt(sum(pedAchannel.^2)); vehAchannel = [1 0 10^(-1/20) 0 10^(-9/20) 10^(-10/20) 0 0 0 10^(-15/20) 0 0 0 1 0^(-20/20)]; vehAchannel = vehAchannel/sqrt(sum(vehAchannel.^2)); % Data block generation bit = randint(1, Nused, 2^bps); qamSym = qammod(bit, 2^bps, 0, 'gray')/norm_factor(bps);

% 16-point FFT ( DFT-precoding) qamSym2=fft(qamSym); % Subcarrier Mapping if subcarrierMapping == 'IFDMA' qamSym3(1+subband:Q:Nfft)=qamSym2; elseif subcarrierMapping == 'LFDMA' qamSym3([1:Nused]+Nused*subband)=qamSym2; end % 512-point IFFT ofdmSym = ifft(qamSym3); % Add CP ofdmSym2 = [ofdmSym(Nfft-Ng+1:Nfft) ofdmSym(1:Nfft)]; % Channel filtering ofdmSym3 = filter(channel,1,ofdmSym2); % Generate and add AWGN noise_mag = sqrt(10^(-SNR(n)/10)/Q/2); ofdmSym3=ofdmSym3+noise_mag*(randn(size(ofdmSym3)) + 1i*randn(size(ofdmSym3))); % Remove CP y = ofdmSym3(Ng+1:Lsym); % 512-point FFT ofdmSymRx = fft(y); % Subcarrier de-mapping if subcarrierMapping == 'IFDMA' ofdmSymRx2=ofdmSymRx(1+subband:Q:Nfft); H_eff=H_channel(1+subband:Q:Nfft); elseif subcarrierMapping == 'LFDMA' ofdmSymRx2=ofdmSymRx([1:Nused]+Nused*subband); H_eff=H_channel([1:Nused]+Nused*subband); end % Equalization & 16-point IFFT (De-precoding) if strcmp(equalizerType, 'ZERO') && (Ch == 1) ofdmSymRx3 = ifft(ofdmSymRx2./H_eff); elseif strcmp(equalizerType,'MMSE') && (Ch==1) C = conj(H_eff)./(conj(H_eff).*H_eff + 10^(-SNR(n)/10)); ofdmSymRx3 = ifft(ofdmSymRx2.*C); end

You might also like