⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ofdm_awgn_sim.m

📁 高斯信道中的ofdm仿真程序
💻 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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -