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

📄 main1003.asv

📁 放大转发协同通信的有关仿真代码
💻 ASV
📖 第 1 页 / 共 3 页
字号:
                            [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 + -