?? ofdm_system.asv
字號(hào):
clear all; close all; clc;
format long
%本次仿真載頻為2GHz,帶寬1MHz,子載波數(shù)128個(gè),cp為16
%子載波間隔為7.8125kHz
%一個(gè)ofdm符號(hào)長(zhǎng)度為128us,cp長(zhǎng)度為16us
%采用16QAM調(diào)制方式
%最大doppler頻率為132Hz
%多徑信道為5徑,功率延遲譜服從負(fù)指數(shù)分布~exp(-t/trms),trms=(1/4)*cp時(shí)長(zhǎng),各徑延遲取為delay=[0 2e-6 4e-6 8e-6 12e-6]
pilot_inter=5;%導(dǎo)頻符號(hào)間隔為10,可以調(diào)整,看不同導(dǎo)頻間隔下的BER情況,和理論公式比較
pilot_symbol_bit=[0 0 0 1];%導(dǎo)頻為常數(shù),對(duì)應(yīng)星座點(diǎn)1+3*j
cp_length=16;%cp長(zhǎng)度為16
SNR_dB=[0 2 4 6 8 10 12 14 16];
ls_err_ber=zeros(1,length(SNR_dB));
lmmse_err_ber=zeros(1,length(SNR_dB));
lr_lmmse_err_ber=zeros(1,length(SNR_dB));
for i=1:length(SNR_dB)%每個(gè)SNR點(diǎn)上仿真若干次
ls_error_bit=0;
lmmse_error_bit=0;
lr_lmmse_error_bit=0;
total_bit_num=0;
loop_num=5; %共仿真10次
for l=1:loop_num
ofdm_symbol_num=100;%每次仿真產(chǎn)生100個(gè)ofdm符號(hào),則每次仿真共有100×128個(gè)星座映射符號(hào);16QAM調(diào)制下,1個(gè)星座映射符號(hào)包含4個(gè)bit
bit_source=input_b(128,ofdm_symbol_num);%為每次仿真產(chǎn)生100個(gè)ofdm符號(hào)的比特個(gè)數(shù),128為每個(gè)ofdm符號(hào)的子載波個(gè)數(shù)
[nbit,mbit]=size(bit_source);
total_bit_num=total_bit_num+nbit*mbit;
map_out=map_16qam(bit_source);%對(duì)一次仿真符號(hào)塊進(jìn)行16QAM映射
[insert_pilot_out,pilot_num,pilot_sequence]=insert_pilot(pilot_inter,pilot_symbol_bit,map_out);%按塊狀導(dǎo)頻結(jié)構(gòu),對(duì)映射后的結(jié)果插入導(dǎo)頻序列
ofdm_modulation_out=ifft(insert_pilot_out,128);%作128點(diǎn)逆FFT運(yùn)算,完成ofdm調(diào)制
ofdm_cp_out=insert_cp(ofdm_modulation_out,cp_length);%插入循環(huán)前綴
%********************** 以下過(guò)程為ofdm符號(hào)通過(guò)頻率選擇性多徑信道 *************************
num=5;
%假設(shè)功率延遲譜服從負(fù)指數(shù)分布~exp(-t/trms),trms=(1/4)*cp時(shí)長(zhǎng);
%t在0~cp時(shí)長(zhǎng)上均勻分布
%若cp時(shí)長(zhǎng)為16e-6s,可以取5徑延遲如下
delay=[0 2e-6 4e-6 8e-6 12e-6];
trms=4e-6;
var_pow=10*log10(exp(-delay/trms));
fd=132;%最大doppler頻率為132Hz
t_interval=1e-6;%采樣間隔為1us
counter=200000;%各徑信道的采樣點(diǎn)間隔,應(yīng)該大于信道采樣點(diǎn)數(shù)。由以上條件現(xiàn)在信道采樣點(diǎn)數(shù)
count_begin=(l-1)*(5*counter);%每次仿真信道采樣的開(kāi)始位置
trms_1=trms/t_interval;
t_max=16e-6/t_interval;
%信道采樣點(diǎn)數(shù),每個(gè)調(diào)制符號(hào)采一個(gè)點(diǎn)
passchan_ofdm_symbol=multipath_chann(ofdm_cp_out,num,var_pow,delay,fd,t_interval,counter,count_begin);
%********************** 以上過(guò)程為ofdm符號(hào)通過(guò)頻率選擇性多徑信道 *************************
%********************** 以下過(guò)程為ofdm符號(hào)加高斯白噪聲 *************************
snr=10^(SNR_dB(i)/10);
[nnl,mml]=size(passchan_ofdm_symbol);
spow=0;
for k=1:nnl
for b=1:mml
spow=spow+real(passchan_ofdm_symbol(k,b))^2+imag(passchan_ofdm_symbol(k,b))^2;
end
end
spow1=spow/(nnl*mml);
sgma=sqrt(spow1/(2*snr));%sgma如何計(jì)算,與當(dāng)前SNR和信號(hào)平均能量有關(guān)系
receive_ofdm_symbol=add_noise(sgma,passchan_ofdm_symbol);%加入隨機(jī)高斯白噪聲,receive_ofdm_symbol為最終接收機(jī)收到的ofdm符號(hào)塊
%********************** 以上過(guò)程為ofdm符號(hào)加高斯白噪聲 *************************
cutcp_ofdm_symbol=cut_cp(receive_ofdm_symbol,cp_length);%去除循環(huán)前綴
ofdm_demodulation_out=fft(cutcp_ofdm_symbol,128);%作128點(diǎn)FFT運(yùn)算,完成ofdm解調(diào)
%********************** 以下就是對(duì)接收ofdm信號(hào)進(jìn)行信道估計(jì)和信號(hào)檢測(cè)的過(guò)程************************
ls_zf_detect_sig=ls_estimation(ofdm_demodulation_out,pilot_inter,pilot_sequence,pilot_num);%采用LS估計(jì)算法及迫零檢測(cè)得到的接收信號(hào)
lmmse_zf_detect_sig=lmmse_estimation(ofdm_demodulation_out,pilot_inter,pilot_sequence,pilot_num,trms_1,t_max,snr);%采用LMMSE估計(jì)算法及迫零檢測(cè)得到的接收信號(hào)
low_rank_lmmse_sig=lr_lmmse_estimation(ofdm_demodulation_out,pilot_inter,pilot_sequence,pilot_num,trms_1,t_max,snr,cp_length);%采用低秩LMMSE估計(jì)算法及迫零檢測(cè)得到的接收信號(hào)
%********************** 以下就是對(duì)接收ofdm信號(hào)進(jìn)行信道估計(jì)和信號(hào)檢測(cè)的過(guò)程************************
ls_receive_bit_sig=de_map(ls_zf_detect_sig);%16QAM解映射
lmmse_receive_bit_sig=de_map(lmmse_zf_detect_sig);
lr_lmmse_receive_bit_sig=de_map(low_rank_lmmse_sig);
%以下過(guò)程統(tǒng)計(jì)各種估計(jì)算法得到的接收信號(hào)中的錯(cuò)誤比特?cái)?shù)
ls_err_num=error_count(bit_source,ls_receive_bit_sig);
lmmse_err_num=error_count(bit_source,lmmse_receive_bit_sig);
lr_lmmse_err_num=error_count(bit_source,lr_lmmse_receive_bit_sig);
ls_error_bit=ls_error_bit+ls_err_num;
lmmse_error_bit=lmmse_error_bit+lmmse_err_num;
lr_lmmse_error_bit=lr_lmmse_error_bit+lr_lmmse_err_num;
end
%計(jì)算各種估計(jì)算法的誤比特率
ls_err_ber(i)=ls_error_bit/total_bit_num;
lmmse_err_ber(i)=lmmse_error_bit/total_bit_num;
lr_lmmse_err_ber(i)=lr_lmmse_error_bit/total_bit_num;
end
plot(SNR_dB,ls_err_ber,'b-*')
hold on
plot(SNR_dB,lmmse_err_ber,'r-o')
plot(SNR_dB,lr_lmmse_err_ber,'g-+')
hold off
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -