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

📄 channel.m

📁 信道估计中所使用的关键程序希望对大家有帮助
💻 M
字号:
function recv_signal = channel( transmit_signal,h_time, ch, N_Tx_ant, N_Rx_ant ,... 
                        PreNoiseLen,PostNoiseLen, var_noise,N_subc,PrefixRatio,N_sym,... 
                        delta_fc,T_sample,N_tran_sym,TurnOn) 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% 多径多天线信道 
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
 
len = length(transmit_signal) + max(ch.Delay_sample) + PreNoiseLen + PostNoiseLen; 
 
recv_signal = zeros(1,len ,N_Rx_ant); 
tmp_recv = zeros(1,length(transmit_signal) + max(ch.Delay_sample),N_Rx_ant); 
 
% 对每条接收天线的信号, 是N_tx_ant个数据的叠加 
for n_r = 1:N_Rx_ant 
    tmp_signal = zeros(1,length(transmit_signal) + max(ch.Delay_sample) ); 
    for n_t = 1:N_Tx_ant 
         
        % 对单天线信道, 是N_path条径的延时叠加. h_time是时域信道的系数矩阵 
        % 首先取一对天线,h_time(:,:,(n_t-1)*N_Tx_ant + n_r)是N_path行, N_sym列的矩阵 
        % 把h_time扩展为每个OFDM符号有N_subc*(1 + PrefixRatio)个衰落系数 
        % 乘上对应的时域样点. 
         
        max_d = max(ch.Delay_sample); 
        for p = 1:ch.N_path 
            if (N_Rx_ant == 1) & (N_Tx_ant ~= 1) 
                ch_coeff = h_time(p,:,n_t); 
            else 
                ch_coeff = h_time(p,:,(n_t-1)*N_Tx_ant + n_r); 
            end 
            ch_coeff = reshape( repmat(ch_coeff, N_subc*(1 + PrefixRatio),1) ,... 
                                1,N_subc*(1 + PrefixRatio)*(N_sym+N_tran_sym) ); 
                             
            delay = ch.Delay_sample(p); 
             
            % 然后把N_path条路径延时叠加,得到长度为length(transmit_signal) + max(ch.Delay_sample)的向量 
            tmp_signal = tmp_signal + ... 
                    [zeros(1, delay)  transmit_signal(1,:,n_t).*ch_coeff  zeros(1,max_d - delay)]; 
       end 
 
    % 把不同发送天线的信号叠加 
    tmp_recv(1,:,n_r) = tmp_recv(1,:,n_r) + tmp_signal; 
  
    end 
end 
 
% 在每条接收天线的信号加噪声,并加前噪声和后噪声,用于定时同步算法 
recv_signal = [ zeros(1,PreNoiseLen,N_Rx_ant) tmp_recv zeros(1,PostNoiseLen,N_Rx_ant) ]; 
noise = sqrt(var_noise)*( randn(1,len,N_Rx_ant) + j*randn(1,len,N_Rx_ant) ); 
recv_signal = recv_signal + noise; 
 
% 加载波频偏 
if TurnOn 
    idx = repmat([0:length(recv_signal)-1],[1,1,N_Rx_ant]); 
    recv_signal = recv_signal.*exp(j*2*pi*delta_fc*idx*T_sample); 
end 
 
% 加抽样频偏, 下一步完成 

⌨️ 快捷键说明

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