📄 main1003.asv
字号:
[channel(3), rx] = add_channel_effect(channel(3), rx,relay.signal2send,1/4);
rx = rx_correct_phaseshift(rx,channel(3).attenuation.phi);
else
%source transmit the remained bit,译码失败,源端发送删除的比特
signal(1).nr_of_bits = length(N2_symbol);
calculate_signal_parameter(N2_symbol);
[channel(1), rx] = add_channel_effect(channel(1), rx,signal(1).symbol_sequence,1/4);
rx = rx_correct_phaseshift(rx, channel(1).attenuation.phi);
end
if (coop_rate==1/4)
insert_decode_data(4:4:end) = real(rx.signal2analyse); %将N2比特插入到原删除位置
else
insert_decode_data(3:4:end)=real(rx.signal2analyse(1:2:end));
insert_decode_data(4:4:end)=real(rx.signal2analyse(2:2:end));
end
decode_N_bit = data_decode(insert_decode_data); %联合译码
% The number of rx decode error bits with N2 bits
error_count3 = sum(abs(source_crc - decode_N_bit));
error_bit(:,it) = error_count3;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
case 'DF'
o_source_bits =randint(1,128);
transmit_symbol = coded_data(o_source_bits);%encode the bit
signal(1).nr_of_bits = length(transmit_symbol);
signal.modulation_type = 'BPSK'; % 'BPSK', 'QPSK'
calculate_signal_parameter(transmit_symbol);
receive_value =[];
if (use_direct_link == 1)
[channel(1), rx] = add_channel_effect(channel(1), rx,signal.symbol_sequence,1/4);
mrc_rx = rx.received_signal; % mrc combine
rx = rx_correct_phaseshift(rx, channel(1).attenuation.phi);
receive_value =[receive_value;rx.signal2analyse];
receive_code = real(receive_value);
rece_coded_bit =(sign(receive_code)+1)/2;
decoded_bit =data_decode(receive_code);
%error_bit1(:,it) = sum(abs(transmit_symbol - rece_coded_bit)); %direct transmit error bit
error_bit1(:,it) = sum(abs(o_source_bits - decoded_bit));
end
if (use_relay == 1)
[channel(2), relay.rx] = add_channel_effect(channel(2),relay.rx, signal.symbol_sequence,1/4);
relay.rx =rx_correct_phaseshift(relay.rx,channel(2).attenuation.phi);
relay_decode =data_decode(real(relay.rx.signal2analyse));%relay decode the received data
error_bit2(:,it) = sum(abs(o_source_bits - relay_decode));
relay_sendcode = coded_data(relay_decode);%re-encode
relay.signal2send = 2*relay_sendcode-1; %modulate
% Relay to destination
[channel(3), rx] = add_channel_effect(channel(3), rx,relay.signal2send,1/4);
mrc_rx =[mrc_rx;rx.received_signal];% the code before combine
rx = rx_correct_phaseshift(rx,channel(3).attenuation.phi);
receive_value =[receive_value;rx.signal2analyse];
rx.signal2analyse = real(receive_value);%2*512
end
[received_bit, signal.received_bit_sequence] = rx_combine(rx, channel, use_relay,mrc_rx);
%received_bit =mean(rx.signal2analyse,1);
%receive_decode =data_decode(received_bit);%decode
% rx_input=rx.signal2analyse(2,:);
% inputdf = zeros(1,512);
% inputdf(1:4:end)=receive_code(1:2:end);
% inputdf(2:4:end)=receive_code(2:2:end);
% inputdf(3:4:end)=rx_input(1:2:end);
% inputdf(4:4:end)=rx_input(2:2:end);
% receive_decode =data_decode_df(inputdf);%decode
%received_bit =sign(received_bit);
%received_bit = (received_bit+1)/2;
error_count2 = sum(abs(received_bit - transmit_symbol));
%error_count2 = sum(abs(receive_decode - o_source_bits));
error_bit(:,it) = error_count2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
case 'AF'
source_bits =randint(1,128);
o_source_bits = coded_data(source_bits);%encode the bit
signal(1).nr_of_bits = length(o_source_bits);
signal.modulation_type = 'BPSK'; % 'BPSK', 'QPSK'
calculate_signal_parameter(o_source_bits);
receive_value =[];
if (use_direct_link == 1)
[channel(1), rx] = add_channel_effect(channel(1), rx,signal.symbol_sequence,1/4);
mrc_rx = rx.received_signal; % mrc combine
rx = rx_correct_phaseshift(rx, channel(1).attenuation.phi);
receive_value =[receive_value;rx.signal2analyse];
receive_code = sign(real(receive_value));
receive_code = (receive_code+1)/2;
error_bit1(:,it) = sum(abs(o_source_bits - receive_code));
end
if (use_relay == 1)
% Sender to relay
[channel(2), relay.rx] = add_channel_effect(channel(2),relay.rx, signal.symbol_sequence,1/4);
relay = prepare_relay2send(relay,channel(2));%amplify
% Relay to destination
[channel(3), rx] = add_channel_effect(channel(3), rx,relay.signal2send,1/4);
mrc_rx =[mrc_rx;rx.received_signal];% the code before combine
rx = rx_correct_phaseshift(rx,channel(3).attenuation.phi + channel(2).attenuation.phi);
receive_value =[receive_value;rx.signal2analyse];
rx.signal2analyse =real(receive_value);
end
% Receiver combine
%[received_bit, signal.received_bit_sequence] = rx_combine(rx, channel, use_relay);
%[received_bit, signal.received_bit_sequence] = rx_combine(rx, channel, use_relay,mrc_rx);
rx_input1=rx.signal2analyse(1,:);
rx_input2=rx.signal2analyse(2,:);
inputdf = zeros(1,512);
inputdf(1:4:end)=rx_input1(1:2:end);
inputdf(2:4:end)=rx_input1(2:2:end);
inputdf(3:4:end)=rx_input2(1:2:end);
inputdf(4:4:end)=rx_input2(2:2:end);
receive_decode =data_decode_df(inputdf);%decode
%receive_decode =data_decode(received_bit);
%error_count2 = sum(abs(received_bit - o_source_bits));
error_count3 = sum(abs(receive_decode - source_bits));
error_bit(:,it) = error_count3;
end
end
%计算总的误比特数
nr_error_bits =0;
for n=1:nr_of_iterations
nr_error_bits =nr_error_bits +error_bit(:,n);
end
BER(iSNR) = nr_error_bits;
%BER(iSNR) = BER(iSNR) ./ it ./ signal.nr_of_bits;
BER(iSNR) = BER(iSNR) ./ it ./ 128;
end
% ------------------------------------
% Present the result of the simulation
txt_distance = [' - distance: ',num2str(channel(1).attenuation.distance), ':',num2str(channel(2).attenuation.distance), ':',num2str(channel(3).attenuation.distance)];
%txt_distance='';
if (use_relay == 1)
if (relay.magic_genie == 1)
txt_genie = ' - Magic Genie';
else
txt_genie = '';
end
txt_combining = [' - combining: ', rx(1).combining_type];
switch rx(1).combining_type
case 'FRC'
txt_combining = [txt_combining, ' ',num2str(rx(1).sd_weight),':1'];
end
if (crc_check ==1)
txt_crc = '- CRC ';
else
txt_crc ='';
end
%add2statistic(SNR,BER,[signal.modulation_type, ' - ',relay.mode, txt_combining, txt_distance, txt_genie])
%add2statistic(SNR,BER,[signal.modulation_type, ' - ',relay.mode,txt_crc])
switch channel(1).attenuation.pattern
case 'no'
txt_fading = ' - AWGN';
otherwise
txt_fading = ' - Rayleigh';
end
switch relay.mode
case {'AF','DF'}
%add2statistic(SNR,BER,[relay.mode,txt_fading,txt_combining])
add2statistic(SNR,BER,[relay.mode,'+10dB'])
%add2statistic(SNR,BER,['No cooperation'])
otherwise
add2statistic(SNR,BER,[relay.mode,txt_fading])
end
end
% % -----------------
% % Graphs to compare
SNR_linear = 10.^(SNR/10);
%add2statistic(SNR,ber(SNR_linear,'BPSK', 'no'),'No cooperation - AWGN - theory')
%add2statistic(SNR,ber(SNR_linear,'BPSK', 'Rayleigh'),'No cooperation - Rayleigh - theory')
%add2statistic(SNR,ber_2_senders(SNR_linear, 'QPSK'),'QPSK - 2 senders')
show_statistic;
toc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -