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

📄 rx_combine.m

📁 放大转发协同通信的有关仿真代码
💻 M
字号:
function [symbol_sequence,bit_sequence]=rx_combine(rx,channel,use_relay,mrc_rx);
%在接收端合并两路信号,并判决出发送信号序列

global signal;
global relay;

values2analyse=rx.signal2analyse;


switch rx.combining_type
    case 'MRC'        
         if (use_relay==0)
             h=conj(channel(1).attenuation.h);
         else
             %hsrd =channel(2).attenuation.h .* channel(3).attenuation.h;
             hsrd =channel(3).attenuation.h;
             h = conj([channel(1).attenuation.h;hsrd]);
         end
         bit_sequence = real(mrc_rx .* h);
         %bit_sequence = mean(real(mrc_rx .* h));
         bit_sequence=sign(mean(bit_sequence,1));
            %otherwise
             %   error(['MRC only works with DAF']);
        %end
    case{'ERC','FRC','SNRC','ESNRC'}
        values2analyse=symbol2bit(values2analyse);
        switch rx.combining_type
            case 'ERC'
                bit_sequence=sign(mean(values2analyse,1));
            case 'FRC'
                if (use_relay==0)
                    bit_sequence=sign(mean(values2analyse,1));
                else
                    bit_sequence =sign(mean([rx.sd_weight;1]*ones(1,size(values2analyse,2)) .* values2analyse,1));
                end
            case {'SNRC','ESNRC'}
                if (use_relay==0)
                    bit_sequence=sign(mean(values2analyse,1));
                else
                    SNR_direct=estimate_direct_channel_SNR(channel(1),signal.modulation_type)
                    SNR_via=estimate_via_channel_SNR(channel(2),channel(3),relay.mode)
                    if (signal.modulation_type=='QPSK')
                        SNR_via=[SNR_via,SNR_via];
                        SNR_direct =[SNR_direct,SNR_direct];
                    end
                    switch rx.combining_type
                        case 'SNRC'
                            %bit_sequence=(mean([SNR_direct;SNR_via].*values2analyse,1)>=0)*2-1;
                            bit_sequence=sign(mean([SNR_direct;SNR_via].*values2analyse,1));
                        case 'ESNRC'
                            use_direct=SNR_direct./SNR_via>10;
                            use_via=SNR_direct./SNR_via<0.1;
                            use_equal_ratio=not(use_direct+use_via);
                            bit_sequence_equal_ratio=(mean(values2analyse,1)>=0)*2-1;
                            bit_sequence_direct=(values2analyse(1,:)>=0)*2-1;
                            bit_sequence_via=(values2analyse(2,:)>=0)*2-1;
                            bit_sequence=use_equal_ratio.*bit_sequence_equal_ratio+use_direct.*bit_sequence_direct+use_via.*bit_sequence_via;
                    end
                end
            otherwise
            error(['Combining-type unkonwn:',rx.combining_type])
        end
end
symbol_sequence=(bit_sequence+1)/2;
%symbol_sequence=bit_sequence;
        
                 
                    
                    
                
                
        
        
                    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -