信道估计是接收机的重要功能模块,主要是从接收数据中将假定的某个信道模型的模型参数估计出来的过程。如果信道是线性的话,那么信道估计就是对系统冲激响应进行估计。估计算法的基本思想是令某种估计误差最小化。信道估计结果用于后续的信道均衡处理,以便消除多径信号混叠造成的ISI。
5G中信道估计是利用已知参考信号(DMRS)来反推信道矩阵的过程。常见的信道估计算法有LS(最小二乘法)、MMSE(最小均方误差)等,本文主要介绍LS算法实现。
LS算法不考虑噪声,目标是使接收信号与估计信号之间的误差最小。
原理公式:
其中:
LS忽略了噪声,在低SNR环境下性能比较差。
在DMRS配置类中定义estimate_channel_ls()函数。接收信号经过OFDM解调后,即时域信号转换为频域数据之后。接收端用DMRS参数生成发送端使用的DMRS序列,使用生成的DMRS序列和接收到的DMRS数据相除,即得到信道矩阵$H$。
defestimate_channel_ls(self, rx_grid, n_subcarriers):"""信道估计 (LS估计) rx_grid: 接收到的频域数据 [sc] * [sym] n_subcarriers: 子载波数 """ n_sc, n_sym = rx_grid.shape H_est = np.zeros((n_sc, n_sym), dtype=complex)# LS估计for l in self.dmrs_positions: num_dmrs = (n_subcarriers // 12) * 6 dmrs_seq = self.generate_dmrs_sequence(num_dmrs, l) seq_idx = 0for rb in range(n_subcarriers // 12):for k in [0, 2, 4, 6, 8, 10]: sc = rb * 12 + k H_est[sc, l] = rx_grid[sc, l] / dmrs_seq[seq_idx] seq_idx += 1return H_est