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

📄 channel.asv

📁 抽头长度可变的802.11n信道估计方法.802.11n即将出台
💻 ASV
字号:
%==============channel_sui_fading.m========================================


function [r_t_sum,r_f_sum,r_t_sum_cp,r_t_sum_cp_awgn]=channel(t_preamble_cp,switch_awgn_rayleigh,N_STS,N_LTF,M,K,snr)


% 设每个天线都有L条多径
% n_tx_antenna 发送天线数<=4
n_tx_antenna = N_STS;
% n_rx_antenna 接收天线数<=4
% n_rx_antenna = 1;
% ts fd 为  n_tx_antenna*1 的矩阵
% tau pdb 为  n_tx_antenna*L  的矩阵
%r_t_preamble_cp  为n_tx_antenna*80 的矩阵
%r_t_preamble  为n_tx_antenna*56 的矩阵
% M = 64;%fft,ifft点数
% K = 64;%子载波个数
% snr =20; 
SymbolNum =0;%没有传送数据符号,只传送前导符号

% switch_awgn_rayleigh = 4;% switch_awgn_rayleigh = 0 表示信道为awgn;
                         % switch_awgn_rayleigh = 1 表示信道为rayleigh;
                         % switch_awgn_rayleigh = 2 用自己编的无衰落的sui多径
                         % switch_awgn_rayleigh = 3 利用系统函数衰落的sui
                         % switch_awgn_rayleigh = 4 用自己编的瑞利衰落信道
                         % switch_awgn_rayleigh = 5 用自己编的瑞利衰落sui
%--------------------------------------------------------------------------

if switch_awgn_rayleigh == 0         %表示信道为awgn
%     for index_tx_antenna = 1:n_tx_antenna,
%         r_t_preamble_cp_awgn(index_tx_antenna,:) = awgn( t_preamble_cp(index_tx_antenna,:),snr,'measured');
%         for index =1:80* N_LTF,
%             r_t_preamble_cp_awgn(index_tx_antenna,index) = awgn( t_preamble_cp(index_tx_antenna,index),snr);
%         end
        r_t_sum = sum(t_preamble_cp);
        r_t_sum = awgn( r_t_sum,snr,'measured');
%         去cp--------------------------------------------------------------
        if n_tx_antenna ==1
            r_t_sum = r_t_sum(17:80);
%             r_t_preamble(index_tx_antenna,:) = r_t_preamble_cp_awgn(index_tx_antenna,17:80);
        elseif n_tx_antenna == 2
            r_t_sum = [r_t_sum(17:80),r_t_sum(97:160)];
%             r_t_preamble(index_tx_antenna,:) = [r_t_preamble_cp_awgn(index_tx_antenna,17:80),r_t_preamble_cp_awgn(index_tx_antenna,97:160)];
%         elseif n_tx_antenna == 3||n_tx_antenna == 4
            
        end
%     end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    
elseif switch_awgn_rayleigh == 1   %表示信道为rayleigh
    ts = 50e-9;
    fd = 0;
    for index_tx_antenna = 1:n_tx_antenna,
        tau(index_tx_antenna,:)= [0 4*ts 6*ts];
        pdb(index_tx_antenna,:)= [0 -2 -4];
        k = 10;
        chan(index_tx_antenna) = ricianchan(ts,fd,k,tau(index_tx_antenna,:),pdb(index_tx_antenna,:));
%         chan(index_tx_antenna) = rayleighchan(ts,fd,tau(index_tx_antenna,:),pdb(index_tx_antenna,:));
        r_t_preamble_cp(index_tx_antenna,:) = filter(chan(index_tx_antenna),t_preamble_cp(index_tx_antenna,:));
%         for index =1:80* N_LTF,
%             r_t_preamble_cp_awgn(index_tx_antenna,index) = awgn( r_t_preamble_cp(index_tx_antenna,index),snr); 
%         end
%         %去cp--------------------------------------------------------------
%         if n_tx_antenna ==1
%             r_t_preamble(index_tx_antenna,:) = r_t_preamble_cp_awgn(index_tx_antenna,17:80);
%         elseif n_tx_antenna == 2
%             r_t_preamble(index_tx_antenna,:) = [r_t_preamble_cp_awgn(index_tx_antenna,17:80),r_t_preamble_cp_awgn(index_tx_antenna,97:160)];
%         %elseif n_tx_antenna == 3||n_tx_antenna == 4
%             
%         end
    end
    r_t_sum = sum(r_t_preamble_cp);
    r_t_sum = awgn( r_t_sum,snr,'measured');
    if n_tx_antenna ==1
            r_t_sum = r_t_sum(17:80);
    elseif n_tx_antenna == 2
            r_t_sum = [r_t_sum(17:80),r_t_sum(97:160)];
    end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    
elseif switch_awgn_rayleigh == 2   %用自己编的无衰落的sui多径
%     for index_tx_antenna = 1:n_tx_antenna,
%         A0 = 1;
%         A1 = 0.5;
%         A2 = 0.2;
%         A = sqrt(A0^2+A1^2+A2^2);
%         delay0 = 0; 
%         delay1 = 2; 
%         delay2 = 4;
%         y_delay0 = A0*exp(-j*2*pi*0.5)*[zeros(1,delay0),t_preamble_cp(index_tx_antenna,1:(80-delay0))]/A;%exp(-j*2*pi*rand(1))*
%         y_delay1 = A1*exp(-j*2*pi*0.2)*[zeros(1,delay1),t_preamble_cp(index_tx_antenna,1:(80-delay1))]/A;
%         y_delay2 = A2*exp(-j*2*pi*0.1)*[zeros(1,delay2),t_preamble_cp(index_tx_antenna,1:(80-delay2))]/A;
%         r_t_preamble_cp(index_tx_antenna,:) = y_delay0 + y_delay1 + y_delay2;
%         for index = 1:80* N_LTF,
%             r_t_preamble_cp_awgn(index_tx_antenna,index) = awgn( r_t_preamble_cp(index_tx_antenna,index),snr);
%         end
%         r_t_preamble(index_tx_antenna,:) = r_t_preamble_cp_awgn(index_tx_antenna,17:80);
%     end
    ro_t = 0;
    ro_r = 1;
    A0 = [1 1];
    A1 = [0.5 0.5];
    A2 = [0.2 0.2];
    A = [sqrt(A0(1)^2+A1(1)^2+A2(1)^2)  sqrt(A0(2)^2+A1(2)^2+A2(2)^2) ];
    delay0 = [0 0]; 
    delay1 = [4 4]; 
    delay2 = [6 6];

    if n_tx_antenna == 1
        t_preamble_cp(2,:) = zeros(1,80);  
    end
    
    for index_tx_antenna = 1,
        t_preamble_cp(1,:) = t_preamble_cp(1,:) + ro_t*t_preamble_cp(2,:);
        y_delay0 = A0(1)*exp(-j*2*pi*0.5)*[zeros(1,delay0(1)),t_preamble_cp(index_tx_antenna,1:(80* (N_LTF+1)-delay0(1)))]/A(1);%*exp (-j*2*pi*rand (1))
        y_delay1 = A1(1)*exp(-j*2*pi*0.2)*[zeros(1,delay1(1)),t_preamble_cp(index_tx_antenna,1:(80* (N_LTF+1)-delay1(1)))]/A(1);
        y_delay2 = A2(1)*exp(-j*2*pi*0.1)*[zeros(1,delay2(1)),t_preamble_cp(index_tx_antenna,1:(80* (N_LTF+1)-delay2(1)))]/A(1);
        r_t_preamble_cp(index_tx_antenna,:) = y_delay0 + y_delay1 + y_delay2;
    end
    
    for index_tx_antenna = 2,
        t_preamble_cp(2,:) = ro_t*t_preamble_cp(1,:) + t_preamble_cp(2,:);
        y_delay0 = A0(2)*exp(-j*2*pi*0.5)*[zeros(1,delay0(2)),t_preamble_cp(index_tx_antenna,1:(80* (N_LTF+1)-delay0(2)))]/A(2);%*exp (-j*2*pi*rand (1))
        y_delay1 = A1(2)*exp(-j*2*pi*0.2)*[zeros(1,delay1(2)),t_preamble_cp(index_tx_antenna,1:(80* (N_LTF+1)-delay1(2)))]/A(2);
        y_delay2 = A2(2)*exp(-j*2*pi*0.1)*[zeros(1,delay2(2)),t_preamble_cp(index_tx_antenna,1:(80* (N_LTF+1)-delay2(2)))]/A(2);
        r_t_preamble_cp(index_tx_antenna,:) = y_delay0 + y_delay1 + y_delay2;
    end
    
    r_t_sum_cp = r_t_preamble_cp (1,:)+ r_t_preamble_cp (2,:) * ro_r;
    
    r_t_sum_cp_awgn = awgn(r_t_sum_cp,snr,'measured');
%     for index = 1:80* N_LTF,
%         r_t_sum_cp_awgn(index) = awgn(r_t_sum_cp(index),snr);%/sqrt(n_tx_antenna)
%     end
    for index_tx_antenna = 1:n_tx_antenna,
        %去cp--------------------------------------------------------------
        if n_tx_antenna == 2
            r_t_sum1 = [ r_t_sum_cp_awgn(17:80),r_t_sum_cp_awgn(97:160),r_t_sum_cp_awgn(177:240)];
        elseif n_tx_antenna ==1
            r_t_sum1 = r_t_sum_cp_awgn(17:80);
        end
    end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    
elseif switch_awgn_rayleigh == 3 %利用系统函数衰落的sui
    if n_tx_antenna == 1
        t_preamble_cp(2,:) = zeros(1,80);  
    end
    
    ro_t = 1;
    ro_r = 1;
    ts = 50e-9;
    fd = 0;
    k = [10 10];
    tau(1,:)= [0 4*ts 6*ts];
    tau(2,:)= [0 4*ts 6*ts];
    pdb(1,:)= [0 -2 -4];
    pdb(2,:)= [0 -2 -4];
    
    t_preamble_cp_in(1,:) = t_preamble_cp(1,:) + ro_t* t_preamble_cp(2,:);%天线间相干
    t_preamble_cp_in(2,:) = t_preamble_cp(2,:) + ro_t* t_preamble_cp(1,:);
    
    for index_tx_antenna = 1:2,
        chan(index_tx_antenna) = rayleighchan(ts,fd,tau(index_tx_antenna,:),pdb(index_tx_antenna,:));
%         chan(index_tx_antenna) = ricianchan(ts,fd,k(index_tx_antenna),tau(index_tx_antenna,:),pdb(index_tx_antenna,:));
        r_t_preamble_cp(index_tx_antenna,:) = filter(chan(index_tx_antenna),t_preamble_cp_in(index_tx_antenna,:));
    end
    
    r_t_preamble_cp_out(1,:) = r_t_preamble_cp(1,:) + ro_r*r_t_preamble_cp(2,:);% 只考虑第一根接收天线
%     r_t_preamble_cp_out(2,:) = r_t_preamble_cp(2,:) + ro_r*r_t_preamble_cp(1,:); % 第二根接收天线
    r_t_preamble_cp_awgn(1,:) = AWGN(r_t_preamble_cp(1,:),snr,'measured');
%     for index =1:80* N_LTF,
%         r_t_preamble_cp_awgn(1,index) = awgn( r_t_preamble_cp_out(1,index),snr); 
%     end
    %去cp--------------------------------------------------------------
    if n_tx_antenna ==1
        r_t_preamble(1,:) = r_t_preamble_cp_awgn(1,17:80);
    elseif n_tx_antenna == 2
        r_t_preamble(1,:) = [r_t_preamble_cp_awgn(1,17:80),r_t_preamble_cp_awgn(1,97:160),r_t_preamble_cp_awgn(1,177:240)];
    %elseif n_tx_antenna == 3||n_tx_antenna == 4
            
    end
    r_t_sum1 =  r_t_preamble(1,:);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
elseif switch_awgn_rayleigh == 4  %用自己编的瑞利衰落信道
    SymbolNum = 0;
    f_max = 0;
    if n_tx_antenna ==1
        TransData = t_preamble_cp(1,:); 
        r_t_sum1 = my_RayleighChannel(TransData,SymbolNum,N_LTF,snr,f_max);
%         Signal_Power = 10*log10(mean(abs(r_t_sum1).^2));
%         r_t_sum1 = AWGN(r_t_sum1,snr,Signal_Power,'db');
%         r_t_sum1 = AWGN(r_t_sum1,snr,'measured');
        r_t_sum1 =r_t_sum1(17:80);
    elseif n_tx_antenna == 2
        TransData1 = t_preamble_cp(1,:); 
        r_t_sum1 = my_RayleighChannel(TransData1,SymbolNum,N_LTF,snr,f_max);
        TransData2 = t_preamble_cp(2,:); 
        r_t_sum1 = r_t_sum1 + my_RayleighChannel(TransData2,SymbolNum,N_LTF,snr,f_max);
%         Signal_Power = 10*log10(mean(abs(r_t_sum1).^2));
%         r_t_sum1 = AWGN(r_t_sum1,snr,Signal_Power,'db');
        r_t_sum1 = AWGN(r_t_sum1,snr,'measured');
        r_t_sum1 = [r_t_sum1(17:80) r_t_sum1(97:160)];
    %elseif n_tx_antenna == 3||n_tx_antenna == 4
    end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
elseif switch_awgn_rayleigh == 5  %用自己编的瑞利sui信道
    SymbolNum = 1;
    f_max = 0;
    ro_t =0;
    ro_r =1;
    if n_tx_antenna == 1
        t_preamble_cp(2,:) = zeros(1,80);
        TransData1 = t_preamble_cp(1,:) + ro_t * t_preamble_cp(2,:); 
        r_t_sum1_1 = my_RayleighChannel(TransData1,SymbolNum,N_LTF,snr,f_max);
        TransData2 = t_preamble_cp(2,:) + ro_t * t_preamble_cp(1,:);
        r_t_sum1_2 = my_RayleighChannel(TransData2,SymbolNum,N_LTF,snr,f_max);
        r_t_sum1 = r_t_sum1_1+ ro_r*r_t_sum1_2;
        
%         Signal_Power = 10*log10(mean(abs(r_t_sum1).^2));
        r_t_sum1 = AWGN(r_t_sum1,snr,'measured');
%         r_t_sum1 = AWGN(r_t_sum1,snr,Signal_Power,'db');
        r_t_sum1 =r_t_sum1(17:80);
    elseif n_tx_antenna == 2
        TransData1 = t_preamble_cp(1,:)+ ro_t * t_preamble_cp(2,:); 
        r_t_sum1 = my_RayleighChannel(TransData1,SymbolNum,N_LTF,snr,f_max);
        TransData2 = t_preamble_cp(2,:) + ro_t * t_preamble_cp(1,:); 
        r_t_sum1 = r_t_sum1 + ro_r * my_RayleighChannel(TransData2,SymbolNum,N_LTF,snr,f_max);
        
%         Signal_Power = 10*log10(mean(abs(r_t_sum1).^2));
        r_t_sum1 = AWGN(r_t_sum1,snr,'measured');
%         r_t_sum1 = AWGN(r_t_sum1,snr,Signal_Power,'db');
        r_t_sum1 = [r_t_sum1(17:80) r_t_sum1(97:160) r_t_sum1(177:240)];
    %elseif n_tx_antenna == 3||n_tx_antenna == 4
    end
end


%==========================================================================

%接收天线得到的时域信号
if  switch_awgn_rayleigh == 2 || switch_awgn_rayleigh == 3 ||switch_awgn_rayleigh == 4||switch_awgn_rayleigh == 5
    r_t_sum = r_t_sum1;
% else
%     r_t_sum = sum(r_t_preamble,1);
end
 stem(abs(r_t_sum(1:64*N_LTF)));

%接收天线得到的频域信号
if n_tx_antenna == 2
    r_f_sum_1 = fft(r_t_sum(1:64),M)/sqrt(M*n_tx_antenna);%
    r_f_sum_2 = fft(r_t_sum(65:128),M)/sqrt(M*n_tx_antenna);%
    r_f_sum_3 = fft(r_t_sum(129:192),M)/sqrt(M*n_tx_antenna);%
    r_f_sum = [r_f_sum_1,r_f_sum_2,r_f_sum_3 ];
elseif n_tx_antenna == 1
    r_f_sum = fft(r_t_sum(1:64),M)/sqrt(M*n_tx_antenna);
%elseif n_tx_antenna == 3||n_tx_antenna == 4
    
end

% plot(1:128,abs(r_f_sum));

% plot(1:128,abs(r_f_sum));

⌨️ 快捷键说明

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