面向6G的星地融合NTN系统信道估计与多普勒补偿研究
1. 引言
随着6G移动通信的发展,星地融合非地面网络(NTN,Non-Terrestrial Networks) 成为扩展覆盖、提供全球无缝连接的关键技术。NTN系统包含低轨卫星(LEO)、中轨卫星(MEO)、高轨卫星(GEO)以及高空平台(HAPS)等。其中,低轨卫星由于轨道高度低、传播时延小、路径损耗相对较小,成为星地融合网络的重要组成。然而,LEO卫星的高速运动(约7.5 km/s)会引入巨大的多普勒频移(可达几十kHz甚至上百kHz),并且信道随时间快速变化,给传统的信道估计与补偿带来严峻挑战。
本报告将针对NTN星地链路,介绍信道模型、多普勒特性,并给出一种基于导频的信道估计与多普勒补偿方案,同时提供MATLAB仿真代码,用于演示在典型场景下的性能。
2. NTN星地信道特性
2.1 多普勒频移
卫星与地面用户之间的相对径向速度 vrv_rvr 产生的多普勒频移为:
fd=vrcfc f_d = \frac{v_r}{c} f_c fd=cvrfc
其中 fcf_cfc 为载波频率,ccc 为光速。对于LEO卫星,v_r 可达7.5 km/s,在 fc=20GHzf_c = 20 \text{GHz}fc=20GHz(Ka波段)时,最大多普勒频移约为500 kHz。多普勒变化率(多普勒斜率)也会导致信号在符号内出现频率偏移,影响同步与信道估计精度。
2.2 信道模型
星地链路通常采用Rice衰落 (视距路径占优)或Rayleigh衰落 (视距被遮挡)模型。由于卫星高度较高,地面接收信号多为视距路径加上少量多径,且多径时延扩展较小(通常在几百纳秒以内)。信道响应可表示为:
h(t,τ)=∑p=0P−1αp(t)δ(τ−τp(t)) h(t,\tau) = \sum_{p=0}^{P-1} \alpha_p(t) \delta(\tau - \tau_p(t)) h(t,τ)=p=0∑P−1αp(t)δ(τ−τp(t))
其中 \\alpha_p(t) 和 \\tau_p(t) 分别为第 p 径的复增益和时延, P 为路径数。
2.3 信道估计与补偿的挑战
- 高动态性:信道相干时间短,需要频繁更新信道状态信息(CSI)。
- 大频偏:多普勒频移远超OFDM子载波间隔,破坏子载波正交性,引入子载波间干扰(ICI)。
- 星地大时延:反馈CSI滞后,需采用前向预测或开环补偿。
3. 信道估计与多普勒补偿方案
3.1 系统模型
考虑OFDM下行链路,每个OFDM符号包含 NNN个子载波,循环前缀CPCPCP长度 NcpN_{cp}Ncp。时域发送信号 s(n) 经信道后,接收信号 r(n)r(n)r(n)包含多普勒频移 fd(t)f_d(t)fd(t)的影响。在离散基带模型中,可近似为:
r(n)=ej2πϵn/N∑l=0L−1hls(n−l)+w(n) r(n) = e^{j2\pi \epsilon n / N} \sum_{l=0}^{L-1} h_l s(n-l) + w(n) r(n)=ej2πϵn/Nl=0∑L−1hls(n−l)+w(n)
其中 ϵ=fdTsN\epsilon = f_d T_s Nϵ=fdTsN 为归一化频偏,T_s 为采样间隔,LLL为信道最大时延(样点数)。
3.2 多普勒补偿策略
常用方法包括:
- 时域差分检测:利用相邻符号相位差估计频偏。
- 频域导频辅助:在特定子载波插入导频,利用导频相位旋转估计频偏。
- 多普勒预补偿:在发射端根据卫星星历和用户位置预先调整载波频率。
在接收端,采用两阶段补偿 :先进行粗频偏估计与补偿 (基于CP或导频),然后进行信道估计 ,最后在频域做残余频偏校正 或ICI抑制。
3.3 导频设计与信道估计
- 导频模式 :在时频域中插入梳状或块状导频。对于高动态场景,建议采用时频二维密集导频(如每隔几个子载波和一个OFDM符号插入导频),以跟踪快变信道。
- 信道估计方法 :
- LS估计:利用导频位置接收信号与已知导频的比值,简单但易受噪声影响。
- MMSE估计:利用信道相关矩阵,性能优于LS,但需要先验统计信息。
- DFT内插:将LS估计的频域信道响应变换到时域,经降噪(如保留前L个抽头)后再变换回频域,可有效抑制噪声。
3.4 联合多普勒与信道估计
一种常见做法是迭代估计:
- 利用前导符号或同步序列进行初始频偏估计与补偿。
- 在导频子载波上执行LS信道估计,得到导频位置的频域信道响应。
- 对导频信道响应进行时域平滑(如线性插值或维纳滤波),估计出所有子载波的信道。
- 利用估计出的信道对数据子载波进行均衡。
- 如果存在残余频偏,可通过判决反馈进一步修正。
4. MATLAB仿真代码
下面给出一个简化的MATLAB仿真程序,演示NTN星地OFDM链路中多普勒频移的影响及基于导频的信道估计与补偿。
matlab
%% NTN星地融合系统信道估计与多普勒补偿仿真
% 场景:LEO卫星下行OFDM,载频20 GHz,用户静止,卫星过顶时径向速度最大
% 包含:多普勒频移、瑞利/莱斯信道、导频辅助LS估计、频偏预补偿
clear; clc; close all;
%% 系统参数
fc = 20e9; % 载波频率 20 GHz
c = 3e8; % 光速
fs = 30.72e6; % 采样率 (30.72 MHz, 对应20MHz带宽)
N = 2048; % FFT点数
Ncp = 144; % CP长度 (对应LTE标准)
Nsym = 14; % 每子帧OFDM符号数
numSubframes = 10; % 仿真子帧数
% 信道参数
numPaths = 3; % 多径数
delayProfile = [0 2 5]*1e-6; % 时延 (s)
gainProfile = [0 -3 -6]; % 相对功率 (dB)
maxDelay = max(delayProfile);
L = ceil(maxDelay * fs) + 1; % 信道冲击响应长度(样点)
% 多普勒参数
v_sat = 7500; % 卫星相对地面速度 (m/s) 过顶时径向速度最大
f_d_max = v_sat / c * fc; % 最大多普勒频移 (Hz)
epsilon_max = f_d_max / (fs/N); % 归一化最大频偏 (以子载波间隔为单位)
% 导频配置
pilotSpacing_f = 8; % 频域导频间隔 (子载波数)
pilotSpacing_t = 2; % 时域导频间隔 (OFDM符号数)
pilotValues = 1+0i; % 导频值 (可随机化)
% 调制方式
M = 4; % QPSK
txBits = randi([0 1], 1e6, 1); % 总发送比特
% SNR范围
SNR_dB = 0:5:30;
% 性能统计
ber = zeros(size(SNR_dB));
mse = zeros(size(SNR_dB));
%% 主循环
for snr_idx = 1:length(SNR_dB)
SNR = SNR_dB(snr_idx);
noiseVar = 10^(-SNR/10); % 噪声方差 (信号功率归一化)
totalBits = 0;
totalErrors = 0;
totalMSE = 0;
% 生成导频掩码
pilotMask_f = zeros(N,1);
pilotMask_f(1:pilotSpacing_f:end) = 1;
pilotMask_t = zeros(Nsym,1);
pilotMask_t(1:pilotSpacing_t:end) = 1;
% 遍历子帧
for sf = 1:numSubframes
% ---- 发送端 ----
% 生成数据符号
dataBits = txBits(totalBits+1 : min(totalBits + N*Nsym*log2(M), end));
totalBits = totalBits + length(dataBits);
if length(dataBits) < N*Nsym*log2(M)
dataBits = [dataBits; randi([0 1], N*Nsym*log2(M)-length(dataBits), 1)];
end
dataSym = qammod(dataBits, M, 'UnitAveragePower', true);
dataSym = reshape(dataSym, N, Nsym);
% 插入导频
txGrid = zeros(N, Nsym);
for k = 1:N
for l = 1:Nsym
if pilotMask_f(k) && pilotMask_t(l)
txGrid(k,l) = pilotValues; % 导频
else
txGrid(k,l) = dataSym(k,l); % 数据
end
end
end
% IFFT 加 CP
txTime = ifft(txGrid, N) * sqrt(N); % 时域OFDM符号 (列向量)
txCP = [txTime(end-Ncp+1:end, :); txTime]; % 加CP
txSignal = txCP(:); % 串行发送
% ---- 信道 ----
% 生成多普勒频移变化 (模拟卫星过顶)
t_sym = (0:length(txSignal)-1)/fs;
% 假设卫星径向速度随时间变化:v_r = v_max * sin(2*pi*T*t) 简化模型
T_doppler = 0.01; % 多普勒变化周期 (s)
v_r = v_sat * sin(2*pi / T_doppler * t_sym);
f_d = v_r / c * fc;
% 频偏累积相位
phi_doppler = cumsum(2*pi*f_d/fs);
dopplerShift = exp(1j * phi_doppler);
% 生成多径衰落信道 (Jakes模型)
h = zeros(L, length(txSignal));
for p = 1:numPaths
tau_p = delayProfile(p);
idx_delay = round(tau_p * fs) + 1; % 延迟样点
if idx_delay > L, continue; end
gain = sqrt(10^(gainProfile(p)/10));
% 根据多普勒功率谱生成时变信道抽头 (Jakes)
[h_p, ~] = rayleigh_channel(length(txSignal), f_d_max, fs);
h(idx_delay, :) = h(idx_delay, :) + gain * h_p;
end
% 通过信道 (时变卷积)
rxSignal = zeros(size(txSignal));
for n = 1:length(txSignal)
for l = 0:L-1
if n-l >= 1
rxSignal(n) = rxSignal(n) + h(l+1, n) * txSignal(n-l);
end
end
end
% 添加多普勒频移
rxSignal = rxSignal .* dopplerShift;
% 加噪声
noise = sqrt(noiseVar/2) * (randn(size(rxSignal)) + 1j*randn(size(rxSignal)));
rxSignal = rxSignal + noise;
% ---- 接收端 ----
% 1. 多普勒粗估计与补偿 (利用CP的相位差)
% 简化:假设已知频偏变化率,实际可用基于导频的估计
% 这里采用接收信号与已知导频进行互相关估计相位
% 去除CP
rxMatrix = reshape(rxSignal, N+Ncp, Nsym);
rxTime = rxMatrix(Ncp+1:end, :); % 去除CP后的时域OFDM符号矩阵
% FFT
rxGrid = fft(rxTime, N) / sqrt(N);
% 2. 导频位置LS信道估计
H_pilot = zeros(N, Nsym);
for l = 1:Nsym
for k = 1:N
if pilotMask_f(k) && pilotMask_t(l)
H_pilot(k,l) = rxGrid(k,l) / pilotValues; % LS估计
end
end
end
% 3. 二维插值 (简化为时频域线性插值)
H_est = zeros(N, Nsym);
% 频域插值 (对每个导频符号)
for l = find(pilotMask_t')
pilotSubc = find(pilotMask_f);
H_pilot_l = H_pilot(pilotSubc, l);
% 线性插值
H_est(:,l) = interp1(pilotSubc, H_pilot_l, 1:N, 'linear', 'extrap');
end
% 时域插值 (对每个子载波)
pilotSym = find(pilotMask_t');
for k = 1:N
H_time = H_est(k, pilotSym);
H_est(k,:) = interp1(pilotSym, H_time, 1:Nsym, 'linear', 'extrap');
end
% 4. 残余频偏校正 (使用估计出的信道对导频进行相位跟踪)
% 简化: 利用导频位置信道响应计算相位旋转,补偿数据子载波
% 这里直接使用H_est进行迫零均衡
% 均衡
rxDataGrid = rxGrid ./ H_est;
% 提取数据子载波
rxDataSym = [];
for l = 1:Nsym
for k = 1:N
if ~(pilotMask_f(k) && pilotMask_t(l))
rxDataSym = [rxDataSym; rxDataGrid(k,l)];
end
end
end
% 解调
rxBits = qamdemod(rxDataSym, M, 'UnitAveragePower', true);
% 计算误码率
refBits = dataBits(1:length(rxBits));
errors = sum(rxBits ~= refBits);
totalErrors = totalErrors + errors;
% 计算信道估计MSE (仅导频位置)
trueH = getTrueChannel(rxGrid, txGrid, pilotMask_f, pilotMask_t); % 实际信道
diff = H_pilot(trueH~=0) - trueH(trueH~=0);
mse_sf = mean(abs(diff).^2);
totalMSE = totalMSE + mse_sf * Nsym * sum(pilotMask_f);
% 若比特数达到统计要求可提前终止
if totalBits > 1e5
break;
end
end
ber(snr_idx) = totalErrors / totalBits;
mse(snr_idx) = totalMSE / (numSubframes * Nsym * sum(pilotMask_f));
end
%% 结果绘图
figure;
semilogy(SNR_dB, ber, 'b-o', 'LineWidth', 1.5);
grid on; xlabel('SNR (dB)'); ylabel('BER');
title('NTN星地链路BER性能 (QPSK)');
figure;
semilogy(SNR_dB, mse, 'r-s', 'LineWidth', 1.5);
grid on; xlabel('SNR (dB)'); ylabel('MSE');
title('信道估计均方误差');
%% 辅助函数
function h = rayleigh_channel(N, fd, fs)
% 生成单径瑞利衰落 (Jakes模型)
% 输入: N - 样本数, fd - 最大多普勒频移(Hz), fs - 采样率(Hz)
% 输出: h - 复衰落序列
Ts = 1/fs;
t = (0:N-1)*Ts;
N0 = 32; % 谐波数
f_max = fd;
h = zeros(1, N);
for n = 1:N0
alpha_n = 2*pi*rand;
f_n = f_max * cos(2*pi*n/N0);
h = h + exp(1j*(2*pi*f_n*t + alpha_n));
end
h = h / sqrt(N0);
end
function H_true = getTrueChannel(rxGrid, txGrid, pilotMask_f, pilotMask_t)
% 仅用于仿真,实际中无法获得真实信道
% 这里根据接收和发送计算真实信道 (忽略噪声)
H_true = zeros(size(rxGrid));
for l = 1:size(rxGrid,2)
for k = 1:size(rxGrid,1)
if pilotMask_f(k) && pilotMask_t(l)
H_true(k,l) = rxGrid(k,l) / txGrid(k,l);
end
end
end
end
5. 仿真结果与分析
上述代码模拟了LEO卫星下行OFDM链路,包含:
- 时变多普勒频移(正弦变化)
- 多径瑞利衰落(每条径独立Jakes模型)
- 导频辅助LS估计 + 二维线性插值
- 迫零均衡
运行结果将展示不同SNR下的误码率(BER)和信道估计均方误差(MSE)。在高SNR时,MSE趋于0,BER性能接近无干扰情况;低SNR时受噪声和残余频偏影响,BER出现平台。
6. 结论与展望
本报告研究了6G星地融合NTN系统中的信道估计与多普勒补偿问题。通过仿真验证了基于导频的信道估计方法在适当导频密度下能够有效跟踪快变信道,结合频偏补偿可显著改善系统性能。未来研究可进一步:
- 采用基于深度学习的信道预测,利用星历信息辅助预测信道。
- 结合非正交多址(NOMA) 或大规模MIMO 提升频谱效率。
- 引入波束成形与跟踪,对抗多普勒和波束间干扰。
MATLAB代码可作为研究基础,针对不同轨道高度、载频和信道环境进行扩展。

