?? stbc_decode44.m
字號:
if mult_tempt(1,nnn) >= Max_add_value
mult_tempt(1,nnn) = Max_add_value-1;
mult_flow_num = mult_flow_num+1;
elseif mult_tempt(1,nnn) < -Max_add_value
mult_tempt(1,nnn) = -Max_add_value;
mult_flow_num = mult_flow_num+1;
end
end
sum_tempt = fix((mult_tempt(1,1)+mult_tempt(1,2) +...
mult_tempt(1,3)+mult_tempt(1,4)+...
mult_tempt(1,5)+mult_tempt(1,6)+...
mult_tempt(1,7)+mult_tempt(1,8)+...
mult_tempt(1,9)+mult_tempt(1,10) +...
mult_tempt(1,11)+mult_tempt(1,12)+...
mult_tempt(1,13)+mult_tempt(1,14)+...
mult_tempt(1,15)+mult_tempt(1,16))/st2/2^tempt_eff);
decode_tempt_i(1,3) = decode_tempt_i(1,3)+sum_tempt;
%***************************************************************************************
%***************************************************************
%***************
% if r == Rx_num -1 % 因為是累加操作所以溢出一般是在最后一次加法操作中出現
% tempt_eff = scale_eff;
% for nnn = 1:3
% decode_tempt_r(1,nnn) = fix(decode_tempt_r(1,nnn)/2^tempt_eff);
% decode_tempt_i(1,nnn) = fix(decode_tempt_i(1,nnn)/2^tempt_eff);
% end
% end
end % r = 1:Rx_num
scale = 2^4;
decode_tempt_r(1,1) = fix(decode_tempt_r(1,1)*max_rec_sig/Max_value)*scale;
decode_tempt_r(1,2) = fix(decode_tempt_r(1,2)*max_rec_sig/Max_value)*scale;
decode_tempt_r(1,3) = fix(decode_tempt_r(1,3)*max_rec_sig/Max_value)*scale;
decode_tempt_i(1,1) = fix(decode_tempt_i(1,1)*max_rec_sig/Max_value)*scale;
decode_tempt_i(1,2) = fix(decode_tempt_i(1,2)*max_rec_sig/Max_value)*scale;
decode_tempt_i(1,3) = fix(decode_tempt_i(1,3)*max_rec_sig/Max_value)*scale;
Max_value2 = 2^13;
if decode_tempt_r(1,1) >= Max_value2
decode_tempt_r(1,1) = Max_value2-1;
add_flow_num = add_flow_num+1;
elseif decode_tempt_r(1,1) < -Max_value2
decode_tempt_r(1,1) = -Max_value2;
add_flow_num = add_flow_num+1;
end
if decode_tempt_i(1,1) >= Max_value2
decode_tempt_i(1,1) = Max_value2-1;
add_flow_num = add_flow_num+1;
elseif decode_tempt_i(1,1) < -Max_value2
decode_tempt_i(1,1) = -Max_value2;
add_flow_num = add_flow_num+1;
end
if decode_tempt_i(1,2) >= Max_value2
decode_tempt_i(1,2) = Max_value2-1;
add_flow_num = add_flow_num+1;
elseif decode_tempt_i(1,2) < -Max_value2
decode_tempt_i(1,2) = -Max_value2;
add_flow_num = add_flow_num+1;
end
if decode_tempt_r(1,2) >= Max_value2
decode_tempt_r(1,2) = Max_value2-1;
add_flow_num = add_flow_num+1;
elseif decode_tempt_r(1,2) < -Max_value2
decode_tempt_r(1,2) = -Max_value2;
add_flow_num = add_flow_num+1;
end
if decode_tempt_r(1,3) >= Max_value2
decode_tempt_r(1,3) = Max_value2-1;
add_flow_num = add_flow_num+1;
elseif decode_tempt_r(1,3) < -Max_value2
decode_tempt_r(1,3) = -Max_value2;
add_flow_num = add_flow_num+1;
end
if decode_tempt_i(1,3) >= Max_value2
decode_tempt_i(1,3) = Max_value2-1;
add_flow_num = add_flow_num+1;
elseif decode_tempt_i(1,3) < -Max_value2
decode_tempt_i(1,3) = -Max_value2;
add_flow_num = add_flow_num+1;
end
ch_sum = 0;
for n1 = 1:Tx_num*Rx_num
ch_sum = ch_sum + m(n1)*m(n1)';
end
ch_sum = fix(ch_sum*max_ch_est/2^(scale_eff-2)/Max_value);
Max_value3 = 2^10;
if ch_sum >= Max_value3
ch_sum = Max_value3-1;
add_flow_num = add_flow_num+1;
elseif ch_sum < -Max_value3
ch_sum = -Max_value3;
add_flow_num = add_flow_num+1;
end
scale = 3;
if Mod_type == 6
ratio = 127/138;
elseif Mod_type ==4
ratio = 1;
end
decode_tempt_r(1,1) = fix(decode_tempt_r(1,1)/ch_sum*2^(Max_bit_num-scale)*ratio);
decode_tempt_r(1,2) = fix(decode_tempt_r(1,2)/ch_sum*2^(Max_bit_num-scale)*ratio);
decode_tempt_r(1,3) = fix(decode_tempt_r(1,3)/ch_sum*2^(Max_bit_num-scale)*ratio);
decode_tempt_i(1,1) = fix(decode_tempt_i(1,1)/ch_sum*2^(Max_bit_num-scale)*ratio);
decode_tempt_i(1,2) = fix(decode_tempt_i(1,2)/ch_sum*2^(Max_bit_num-scale)*ratio);
decode_tempt_i(1,3) = fix(decode_tempt_i(1,3)/ch_sum*2^(Max_bit_num-scale)*ratio);
%-------------------譯碼輸出(8bits)---------------------------%
if decode_tempt_r(1,1) >= Max_value
decode_tempt_r(1,1) = Max_value-1;
add_flow_num = add_flow_num+1;
elseif decode_tempt_r(1,1) < Min_value
decode_tempt_r(1,1) = Min_value;
add_flow_num = add_flow_num+1;
end
if decode_tempt_i(1,1) >= Max_value
decode_tempt_i(1,1) = Max_value-1;
add_flow_num = add_flow_num+1;
elseif decode_tempt_i(1,1) < Min_value
decode_tempt_i(1,1) = Min_value;
add_flow_num = add_flow_num+1;
end
if decode_tempt_i(1,2) >= Max_value
decode_tempt_i(1,2) = Max_value-1;
add_flow_num = add_flow_num+1;
elseif decode_tempt_i(1,2) < Min_value
decode_tempt_i(1,2) = Min_value;
add_flow_num = add_flow_num+1;
end
if decode_tempt_r(1,2) >= Max_value
decode_tempt_r(1,2) = Max_value-1;
add_flow_num = add_flow_num+1;
elseif decode_tempt_r(1,2) < Min_value
decode_tempt_r(1,2) = Min_value;
add_flow_num = add_flow_num+1;
end
if decode_tempt_r(1,3) >= Max_value
decode_tempt_r(1,3) = Max_value-1;
add_flow_num = add_flow_num+1;
elseif decode_tempt_r(1,3) < Min_value
decode_tempt_r(1,3) = Min_value;
add_flow_num = add_flow_num+1;
end
if decode_tempt_i(1,3) >= Max_value
decode_tempt_i(1,3) = Max_value-1;
add_flow_num = add_flow_num+1;
elseif decode_tempt_i(1,3) < Min_value
decode_tempt_i(1,3) = Min_value;
add_flow_num = add_flow_num+1;
end
decode_out(1,n) = decode_tempt_r(1,1)+j*decode_tempt_i(1,1);
decode_out(2,n) = decode_tempt_r(1,2)+j*decode_tempt_i(1,2);
decode_out(3,n) = decode_tempt_r(1,3)+j*decode_tempt_i(1,3);
if Mod_type == 4
star_index_length = 16;
tempt_table = table16;
elseif Mod_type == 6
star_index_length = 64;
tempt_table = table64;
end
for star_index = 1:star_index_length
star_r = fix(real(tempt_table(star_index)));
star_i = fix(imag(tempt_table(star_index)));
compare_tempt(1,1) = (decode_tempt_r(1,1)-star_r)^2+(decode_tempt_i(1,1)-star_i)^2;
compare_tempt(2,1) = (decode_tempt_r(1,2)-star_r)^2+(decode_tempt_i(1,2)-star_i)^2;
compare_tempt(3,1) = (decode_tempt_r(1,3)-star_r)^2+(decode_tempt_i(1,3)-star_i)^2;
if star_index==1
compare_tempt(1,2) = compare_tempt(1,1);
compare_tempt(2,2) = compare_tempt(2,1);
compare_tempt(3,2) = compare_tempt(3,1);
result_index(1) = star_index;
result_index(2) = star_index;
result_index(3) = star_index;
else
if compare_tempt(1,1) < compare_tempt(1,2)
compare_tempt(1,2) = compare_tempt(1,1);
result_index(1) = star_index;
end
if compare_tempt(2,1) < compare_tempt(2,2)
compare_tempt(2,2) = compare_tempt(2,1);
result_index(2) = star_index;
end
if compare_tempt(3,1) < compare_tempt(3,2)
compare_tempt(3,2) = compare_tempt(3,1);
result_index(3) = star_index;
end
end % star_index==1
end % star_index = 1:star_index_length
decode_out(1,n) = tempt_table(result_index(1));
decode_out(2,n) = tempt_table(result_index(2));
decode_out(3,n) = tempt_table(result_index(3));
demap_int(1,n) = result_index(1)-1;
demap_int(2,n) = result_index(2)-1;
demap_int(3,n) = result_index(3)-1;
end % n = 1:Ofdm_bits
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -