%
% SISO-OFDM Subcarrier-Adaptive
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [ber, per, throughput, mean_SNRdB, Mode_err] = ...
total_sim_adaptive_blind(info_byte, Cycle, Coding_Rate, SNR, Model, Doppler_Speed, SNR_Th, sub_in_group, Blind_Detection)
%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%/ %%%%%%%%%%%%%%%%%%%%%
rand('state',0);
sub_per = 0;
sub_mean_SNRdB = zeros(1,Cycle);
sub_ber = zeros(1,Cycle);
sub_CBPS = zeros(1,Cycle);
sub_DBPP = zeros(1,Cycle);
packet_Mode_err = 0;
Num_trans_packet = Cycle;
act_sym = 6;
MAC_header = MAC_head; % LLC
v0_kmh = Doppler_Speed;
CarrierFrequency_Hz = 5.25e9;
Wavelength_m = 3e8/CarrierFrequency_Hz;
v0_ms = v0_kmh/3.6;
f_D_Hz = v0_ms/Wavelength_m;
fid = fopen('mode_est_error.txt','w');
fclose(fid);
switch(Model)
case 0
Multipath_Delay = 0;
Multipath_Gain = 0;
case 1
Multipath_Delay = [0 10 20 30 40 50 60 70 80 90 110 140 170 200 240 290 340 390] * 10^(-9);
Multipath_Gain = [0.0 -0.9 -1.7 -2.6 -3.5 -4.3 -5.2 -6.1 -6.9 -7.8 -4.7 -7.3 -9.9 -12.5 -13.7 -18.0 -22.4 -26.7];
case 2
Multipath_Delay = [0 10 20 30 50 80 110 140 180 230 280 330 400 490 600 730 880 1050] * 10^(-9);
Multipath_Gain = [-3.3 -3.6 -3.9 -4.2 0.0 -0.9 -1.7 -2.6 -1.5 -3.0 -4.4 -5.9 -5.3 -7.9 -9.4 -13.2 -16.3 -21.2];
case 3
Multipath_Delay = [0 10 20 40 70 100 140 190 240 320 430 560 710 880 1070 1280 1510 1760] * 10^(-9);
Multipath_Gain = [-4.9 -5.1 -5.2 -0.8 -1.3 -1.9 -0.3 -1.2 -2.1 0.0 -1.9 -2.8 -5.4 -7.3 -10.6 -13.4 -17.4 -20.9];
otherwise
error('Not prepared for this channel model.');
end
ch = rayleighchan(1/(80*10^6), f_D_Hz, Multipath_Delay, Multipath_Gain);
ch.ResetBeforeFiltering = 0;
% ------------ Mode --------------
for Z=0:Cycle
%Mapping decision
if Z == 0
Mode = 3*ones(1,480); %
Num_ofdm_sym = cal_symbol_adaptive(info_byte, Mode, Coding_Rate);
else
[Mode, SNRdB_each] = criterion2_group(feed_back_CSI, pwr_n, SNR_Th, sub_in_group);
sub_mean_SNRdB(Z) = mean(SNRdB_each);
Num_ofdm_sym = cal_symbol_adaptive(info_byte, Mode, Coding_Rate);
end
if ((Num_ofdm_sym >= 1) && (Num_ofdm_sym <= 70))
source_dat = source_generator_adaptive_code(info_byte, MAC_header, Num_ofdm_sym, Mode, Coding_Rate);
else
source_dat(1,1) = 'n';
end
if char(source_dat(1,1)) == 'n'
demap_dat = 110*ones(1,Num_ofdm_sym);
trans_dat = [];
Num_trans_packet = Num_trans_packet - 1;
else
coded_dat = conv_encord_adaptive(source_dat, Coding_Rate);
inter_dat = interleave_adaptive_new(coded_dat, Mode);%cmdadd
for I=1:Num_ofdm_sym
map_dat(:,I) = mapping_adaptive(inter_dat(:,I), Mode);
end
pilot_add=[zeros(1,Num_ofdm_sym); ...
map_dat(1:22,:); ...
ones(1,Num_ofdm_sym); ...
map_dat(23:44,:); ...
ones(1,Num_ofdm_sym); ...
map_dat(45:66,:); ...
ones(1,Num_ofdm_sym); ...
map_dat(67:88,:); ...
-ones(1,Num_ofdm_sym); ...
map_dat(89:110,:); ...
ones(1,Num_ofdm_sym); ...
map_dat(111:132,:); ...
-ones(1,Num_ofdm_sym); ...
map_dat(133:154,:); ...
ones(1,Num_ofdm_sym); ...
map_dat(155:176,:); ...
ones(1,Num_ofdm_sym); ...
map_dat(177:198,:); ...
-ones(1,Num_ofdm_sym); ...
map_dat(199:220,:); ...
ones(1,Num_ofdm_sym); ...
map_dat(221:240,:); ...
zeros(11,Num_ofdm_sym); ...
map_dat(241:260,:); ...
ones(1,Num_ofdm_sym); ...
map_dat(261:282,:); ...
ones(1,Num_ofdm_sym); ...
map_dat(283:304,:); ...
-ones(1,Num_ofdm_sym); ...
map_dat(305:326,:); ...
ones(1,Num_ofdm_sym); ...
map_dat(327:348,:); ...
ones(1,Num_ofdm_sym); ...
map_dat(349:370,:); ...
ones(1,Num_ofdm_sym); ...
map_dat(371:392,:); ...
-ones(1,Num_ofdm_sym); ...
map_dat(393:414,:); ...
-ones(1,Num_ofdm_sym); ...
map_dat(415:436,:); ...
ones(1,Num_ofdm_sym); ...
map_dat(437:458,:); ...
ones(1,Num_ofdm_sym); ...
map_dat(459:480,:)];
ifft_dat = ifft(pilot_add, 512);
gi_add = [ifft_dat(449:512,:); ifft_dat];
trans_dat = reshape(gi_add,576*Num_ofdm_sym,1);
end
if (Multipath_Delay==0)
multipath_add = trans_dat;
else
multipath_add = filter(ch, trans_dat);
end
signal_power = mean(abs(trans_dat) .* abs(trans_dat));
SNR0 = SNR -10*log10(512/480);
noise_add = awgn(multipath_add, SNR0, 10*log10(signal_power), 'dB');
gi_rem = synchro_dat(65:576,:);
fft_dat = fft(gi_rem, 512);
pilot_rem = rem_pilot(fft_dat);
rec_pilot = ex_pilot(fft_dat);
end
rec_pream_fft1=fft(noise_add(288+1:800), 512);
rec_pream_fft2=fft(noise_add(800+1:1312), 512);
rec_pream_fft_ave = (rec_pream_fft1 + rec_pream_fft2) ./2;
source_pream_fft=fft(long_pre(128+1:640), 512);
data_shift = rec_pream_fft_ave ./ (source_pream_fft + 10^(-12));
feed_back_CSI = rem_pilot(data_shift);
pilot_h = ex_pilot(data_shift);
h = feed_back_CSI;
pwr_n = mean(abs(rec_pream_fft1-rec_pream_fft2).^2)/2;
if Z>=1 && char(source_dat(1,1)) ~= 'n'
Mode_est = mode_estimator_rev2(pilot_rem, h, sub_in_group, act_sym, Mode, SNR_Th, Blind_Detection);
end
if Z>=1 && char(source_dat(1,1)) ~= 'n'
temp_Mode_err = 0;
for I=1:480
if Mode_est(I) ~= Mode(I)
temp_Mode_err = temp_Mode_err + 1;
end
end
if sum(temp_Mode_err) == 0
for I=1:Num_ofdm_sym
equ_dat(:,I) = pilot_rem(:,I)./h;
end
for I = 1:Num_ofdm_sym
demap_dat(:,I) = soft_demap_adaptive_fast_CSI(equ_dat(:,I), Mode, h, pwr_n);
end
deinter_dat = deinterleave_adaptive_new(demap_dat,Mode);
for I=1:Num_ofdm_sym
viterbi_dat(:,I)=soft_viterbi_adaptive_fast(deinter_dat(:,I), Mode, Coding_Rate);
end
sub_ber(Z) = ber_calc(viterbi_dat, source_dat);
if(sub_ber(Z) ~= 0)
sub_per = sub_per + 1;
end
else % In case of Mode Estimation Error
packet_Mode_err = packet_Mode_err + 1;
sub_ber(Z) = 0.5;
sub_per = sub_per + 1;
end
end
y_ = filter(ch, ones(1,2000));
clear source_dat coded_dat inter_dat map_dat synchro_dat equ_dat demap_dat fading_add deinter_dat viterbi_dat;
end
if Num_trans_packet >= 1
Mode_err = packet_Mode_err/Num_trans_packet;
ber = sum(sub_ber)/Num_trans_packet;
per = sub_per/Num_trans_packet;
CBPS = sum(sub_CBPS)/Num_trans_packet;
DBPS = Coding_Rate * CBPS;
throughput = sum(sub_DBPP)/((Num_ofdm_sym*Num_trans_packet*7.2+Cycle*16.4)*10^(-6)); % Mbps ブラインドのためシグナルシンボルなし
mean_SNRdB = sum(sub_mean_SNRdB)/Cycle;
else
Mode_err = 1;
ber = 1;
per = 1;
DBPS = 0;
throughput = 0;
mean_SNRdB = sum(sub_mean_SNRdB)/Cycle;
end
adaptive_blind.zip_Blind OFDM_adaptive-blind_blind_ofdm_ofdm bli
版权申诉
37 浏览量
2022-07-15
09:12:21
上传
评论
收藏 3KB ZIP 举报
林当时
- 粉丝: 99
- 资源: 1万+
最新资源
- IMG_0694.GIF
- 基于图像的三维模型重建C++源代码+文档说明(高分课程设计)
- 基于聚焦法的工件立体测量方案,根据数据进行三维重建 使用HALCON处理图像,MATLAB拟合数据+源代码+数据集+效果图
- 锄战三国村 修改:货币使用不减 v1.10(2) 原创 (中文).apk
- 基于python实现的单目双目视觉三维重建+源代码+图像图片(高分课程设计)
- 基于C+++OPENCV的全景图像拼接源码(课程设计)
- 基于Python+OpenCV对多张图片进行全景图像拼接,消除鬼影,消除裂缝+源代码+文档说明+界面截图(高分课程设计)
- 基于C++实现的全景图像拼接源码(课程设计)
- 基于SIFT特征点提取和RASIC算法实现全景图像拼接python源码+文档说明+界面截图+详细注释(95分以上课程大作业)
- 基于matlab实现眼部判别的疲劳检测系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈