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

📄 estimator_ls.m

📁 程序里面包含各部分算法仿真 可供参考和使用
💻 M
字号:
function [H_est , MSE] = estimator_ls( Recv , Training , Method , N_subc_Remain , H_ideal , Idx_max_tap)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 进行基本的LS和LS-DFT信道估计
% 如果仅输入两个参数, 则进行基本LS信道估计, 得到各子载波上的信道估计值
% 如果使用全部的五个参数, 则可以进行LS和LS的DFT改进算法, 并调整信道估计器参数, 计算出
% 均方误差.

% 输入:   Recv, 频域接收到的各个子载波上的复数信号, N_subc(子载波数) 行, N(训练OFDM符号个数)列的复数向量
%         Training , 发送的训练序列 , N_subc 行, N 列的向量 
%                    注意: 训练序列中不能有零, 否则出错.
%         Method, 信道估计的方法 ,正整数,  1--- LS估计, 2 ---LS估计的DFT改进
%         N_subc_Remain, LS估计的DFT改进方法,所保留的子载波数. 为正整数值.
%                        建议选取改值等于最大多径时延对应的时域样点数
%         Idx_max_tap, 行向量,保存时域最强径对应的时域样点编号数。

% 输出:   H_est, 估计得到的各个子载波上的频域响应, N_subc 行, 1列的复数向量
%         MSE, 本次估计的均方误差
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


N_subc = size(Recv,1);  % 子载波数
H_est = zeros(N_subc ,1);
N = size(Recv,2);
% 接收信号乘上训练序列的共轭, 除以训练序列的模值的平方,得到LS估计的信道响应
H_ls = Recv.*conj(Training)./abs(Training).^2;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
% 如果仅输入两个参数
if nargin == 2   
    H_est = H_ls;   %  LS估计
    MSE = [];
    
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  % 如果输入五个或六个参数
else
    time_cut = zeros(N_subc,N);
    if  Method == 1 
        H_est = H_ls;  %  LS估计
        
    else  %  LS估计DFT改进
        
        % 首先变换到时域
        time_domain =  ifft(fftshift(H_ls,1)) * sqrt(N_subc);
        
        % 保留一段时域样点
        if  Method == 2        
            leakage = 0;       % 能量泄漏的子载波数
            % 保留时域能量集中的N_subc_Remain个样点
            time_cut( 1: N_subc_Remain,: ) = time_domain( 1: N_subc_Remain,: );
            % 保留能量泄漏的leakage个样点
            time_cut( N_subc - leakage : N_subc,: ) = time_domain( N_subc - leakage : N_subc,: );
            
        % 保留最强径对应的时域样点   
        elseif  Method == 3
            % 把时域响应的最强径对应的响应取出
            time_cut(Idx_max_tap,:,:) = time_domain(Idx_max_tap,:,:);
        end
        
        % 变换到频域
        H_ls_dft = fftshift(fft(time_cut) * 1/sqrt(N_subc),1);
        H_est = H_ls_dft;
    end
    
    % 计算均方误差
    diff = H_ideal - H_est;
    MSE = sum(sum( abs(diff).^2 )) / (N_subc*N) ;

end

⌨️ 快捷键说明

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