📄 ofdm_awgn_sim.m
字号:
%===========================================================================================================================================================%
% %
% OFDM in AWGN Channel Performance Simulation %
% %
%===========================================================================================================================================================%
clear all
format short
data_num=1200;
%Modulation=1;
Montecarlo=10;
snr=30;
data=(sign(rand(1,data_num)-0.5)+1)/2;
sim_consts=sim_parameter;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% BPSK Modulation %%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for SNR=1:snr;
for Monte=1:Montecarlo;
fprintf('SNR=%d BPSK Modulation MonteCarloSimulation=%d\n', SNR, Monte);
databpsk= tx_make_int_num_ofdm_syms(data, 1, sim_consts);
data1 = tx_modulate(databpsk, 1);
OFDMSYMBOL=length(data1)/48;
add_pilot_syms=tx_add_pilot(data1,OFDMSYMBOL,sim_consts);
add_pilot_syms=add_pilot_syms(:).';
tx_signal=tx_freq_to_time(add_pilot_syms, sim_consts);
tx_signal=tx_signal(:).';
noise_var = 64/52/(10^(SNR/10))/2;
noise= (sqrt(noise_var) * (randn(1, length(tx_signal)) + j*randn(1, length(tx_signal))));
rx_signal=tx_signal+noise;
rx_signal=reshape(rx_signal,OFDMSYMBOL,64);
for t=1:OFDMSYMBOL;
fre_syms(t,:)=rx_time_to_freq(rx_signal(t,:),sim_consts);
end
for t=1:OFDMSYMBOL;
reg=fre_syms(t,:);
fre_data1(t,:)=[reg(7:32) reg(34:59)];
end
for t=1:OFDMSYMBOL;
reg=fre_data1(t,:);
fre_data(t,:)=[reg(1:5) reg(7:19) reg(21:32) reg(34:46) reg(48:52)];
end
rx_signal=fre_data(:).';
rx_signal1= rx_demodulate(rx_signal, 1);
for t=1:data_num;
if(rx_signal1(t)>=0);
rx_signal2(t)=1;
else
rx_signal2(t)=0;
end
end
rx_signal2=rx_signal2(1:length(data));
error=0;
for t=1:data_num;
if(rx_signal2(t)==data(t))
error=error;
else
error=error+1;
end
end
ber(SNR,Monte)=error/data_num;
end
BER_bpsk(SNR)=mean(ber(SNR,:));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% QPSK Modulation %%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for SNR=1:snr;
for Monte=1:Montecarlo;
fprintf('SNR=%d QPSK Modulation MonteCarloSimulation=%d\n', SNR, Monte);
data= tx_make_int_num_ofdm_syms(data, 2, sim_consts);
data1 = tx_modulate(data, 2);
OFDMSYMBOL=length(data1)/48;
add_pilot_syms=tx_add_pilot(data1,OFDMSYMBOL,sim_consts);
add_pilot_syms=add_pilot_syms(:).';
tx_signal=tx_freq_to_time(add_pilot_syms, sim_consts);
tx_signal=tx_signal(:).';
noise_var = 64/52/(10^(SNR/10))/2;
noise= (sqrt(noise_var) * (randn(1, length(tx_signal)) + j*randn(1, length(tx_signal))));
rx_signal=tx_signal+noise;
rx_signal=reshape(rx_signal,OFDMSYMBOL,64);
for t=1:OFDMSYMBOL;
fre_syms(t,:)=rx_time_to_freq(rx_signal(t,:),sim_consts);
end
for t=1:OFDMSYMBOL;
reg=fre_syms(t,:);
fre_data1(t,:)=[reg(7:32) reg(34:59)];
end
for t=1:OFDMSYMBOL;
reg=fre_data1(t,:);
fre_data(t,:)=[reg(1:5) reg(7:19) reg(21:32) reg(34:46) reg(48:52)];
end
rx_signal=fre_data(:).';
rx_signal1= rx_demodulate(rx_signal, 2);
for t=1:data_num;
if(rx_signal1(t)>=0);
rx_signal2(t)=1;
else
rx_signal2(t)=0;
end
end
error=0;
for t=1:data_num;
if(rx_signal2(t)==data(t))
error=error;
else
error=error+1;
end
end
ber(SNR,Monte)=error/data_num;
end
BER_qpsk(SNR)=mean(ber(SNR,:));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 16-QAM Modulation %%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for SNR=1:snr;
for Monte=1:Montecarlo;
fprintf('SNR=%d 16-QAM Modulation MonteCarloSimulation=%d\n', SNR, Monte);
data= tx_make_int_num_ofdm_syms(data, 3, sim_consts);
data1 = tx_modulate(data, 3);
OFDMSYMBOL=length(data1)/48;
add_pilot_syms=tx_add_pilot(data1,OFDMSYMBOL,sim_consts);
add_pilot_syms=add_pilot_syms(:).';
tx_signal=tx_freq_to_time(add_pilot_syms, sim_consts);
tx_signal=tx_signal(:).';
noise_var = 64/52/(10^(SNR/10))/2;
noise= (sqrt(noise_var) * (randn(1, length(tx_signal)) + j*randn(1, length(tx_signal))));
rx_signal=tx_signal+noise;
rx_signal=reshape(rx_signal,OFDMSYMBOL,64);
for t=1:OFDMSYMBOL;
fre_syms(t,:)=rx_time_to_freq(rx_signal(t,:),sim_consts);
end
for t=1:OFDMSYMBOL;
reg=fre_syms(t,:);
fre_data1(t,:)=[reg(7:32) reg(34:59)];
end
for t=1:OFDMSYMBOL;
reg=fre_data1(t,:);
fre_data(t,:)=[reg(1:5) reg(7:19) reg(21:32) reg(34:46) reg(48:52)];
end
rx_signal=fre_data(:).';
rx_signal1= rx_demodulate(rx_signal, 3);
for t=1:data_num;
if(rx_signal1(t)>=0);
rx_signal2(t)=1;
else
rx_signal2(t)=0;
end
end
error=0;
for t=1:data_num;
if(rx_signal2(t)==data(t))
error=error;
else
error=error+1;
end
end
ber(SNR,Monte)=error/data_num;
end
BER_16qam(SNR)=mean(ber(SNR,:));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% 64-QAM Modulation %%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for SNR=1:snr;
for Monte=1:Montecarlo;
fprintf('SNR=%d 64-QAM Modulation MonteCarloSimulation=%d\n', SNR, Monte);
data= tx_make_int_num_ofdm_syms(data, 4, sim_consts);
data1 = tx_modulate(data, 4);
OFDMSYMBOL=length(data1)/48;
add_pilot_syms=tx_add_pilot(data1,OFDMSYMBOL,sim_consts);
add_pilot_syms=add_pilot_syms(:).';
tx_signal=tx_freq_to_time(add_pilot_syms, sim_consts);
tx_signal=tx_signal(:).';
noise_var = 64/52/(10^(SNR/10))/2;
noise= (sqrt(noise_var) * (randn(1, length(tx_signal)) + j*randn(1, length(tx_signal))));
rx_signal=tx_signal+noise;
rx_signal=reshape(rx_signal,OFDMSYMBOL,64);
for t=1:OFDMSYMBOL;
fre_syms(t,:)=rx_time_to_freq(rx_signal(t,:),sim_consts);
end
for t=1:OFDMSYMBOL;
reg=fre_syms(t,:);
fre_data1(t,:)=[reg(7:32) reg(34:59)];
end
for t=1:OFDMSYMBOL;
reg=fre_data1(t,:);
fre_data(t,:)=[reg(1:5) reg(7:19) reg(21:32) reg(34:46) reg(48:52)];
end
rx_signal=fre_data(:).';
rx_signal1= rx_demodulate(rx_signal, 4);
for t=1:data_num;
if(rx_signal1(t)>=0);
rx_signal2(t)=1;
else
rx_signal2(t)=0;
end
end
error=0;
for t=1:data_num;
if(rx_signal2(t)==data(t))
error=error;
else
error=error+1;
end
end
ber(SNR,Monte)=error/data_num;
end
BER_64qam(SNR)=mean(ber(SNR,:));
end
figure(1), clf;
t=1:snr;
plot(t,BER_bpsk);
hold on;
plot(t,BER_qpsk,'r');
hold on;
plot(t,BER_16qam,'g');
hold on;
plot(t,BER_64qam,'m');
hold on;
xlabel('SNR(dB)')
ylabel('BER')
legend('BPSK','QPSK','16 QAM','64 QAM');
title('Bet Error Rate Simulation')
grid
% fft exp(2)
x=[ 1 2]
X=fft(x)
Y=zeros(size(X))
N=length(x)
for k=1:N
summ=0;
for n=0:N-1
summ=summ+x(n+1)*exp(-j*k*(2*pi/N)*n) % exp(-2*pi)
end
Y(k)=summ;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -