www.gusucode.com > 基于MATLAB的OFDM仿真分析 > pure_OFDM.m

    clear all;close all;clc;
N=256;
data=randi([0 1],1,2e4); % Data Generation
% [n zsym s]=v2syms(data,N-N/8); % Generate messages of length N-N/8 each
%Modems Creation
ht=modem.qammod('M',16,'SymbolOrder','gray'); % Tx - Modem
hr=modem.qamdemod('M',16,'SymbolOrder','gray'); % Rx - Modem
% Binary to Decimal conversions
% [r c]=size(s);

for symb=1:128
    sd(symb,:)=b2d(s(symb,:),4);
    
end

% Mapping using 16-QAM
sM=modulate(ht,sd);

% IFFT modulation
sifft=ifft(sM);

for a=1:size(sifft,1)
par1(a)=papr(sifft(a,:));
end
% Noise
co=0;
st=1;
mx=30;
for snr=0:st:mx
    co=co+1;
noisy=awgn(sifft,snr,'measured');

%% FFT Demodulation
rfft=fft(noisy);

% De - Mapping using 16-QAM
r_dem=demodulate(hr,rfft);

% Decimal to Binary Conversion
[rb cb]=size(r_dem);
for symb=1:rb
    sb(symb,:)=d2b(r_dem(symb,:),4);
    
end

re=syms2v(sb,zsym);
[no(co) ratio(co)]=biterr(re,data);
end
snr=0:st:mx;
semilogy(snr,ratio,'-o'),grid;