具有自适应同步功能的QPSK通信系统
本示例中介绍的模型演示了一个采用QPSK调制的实用数字通信系统,该系统能够应对无线信道中的实际问题:频率偏移、多径衰落和噪声。 主要目的是展示利用RLS滤波器进行失真补偿的自适应信道均衡的有效性。
完整的数据传输路径:
- 比特生成 → 调制 → 脉冲成形
- 通过真实通信信道传输
- 接收 → 信道均衡 → 解调 → 误码率估算
关键信道效应:
- 相位和频率偏移(多普勒效应高达 10 Hz + 120° 固定偏移)
- 多径传播(两条具有不同延迟和衰减的路径)
- 加性白高斯噪声(信噪比 SNR = 30 dB)
帧结构
- 训练序列(30 个符号)——用于“训练”自适应滤波器
- 有效数据(50个符号)——实际信息
- 这种结构模拟了实际通信系统(Wi-Fi、LTE),其中会周期性地传输导频信号
两阶段处理
帧 → [训练部分] → RLS 滤波器(训练) → [数据] → FIR 滤波器(应用权重)
- 训练阶段:RLS滤波器根据已知的训练序列调整权重
- 运行阶段:将调整后的权重应用于FIR滤波器,以对实用数据进行平滑处理
.png)
该模型展示了什么
-
QPSK在复杂条件下的可靠性——即使存在频率偏移和信号衰落,系统仍能保持正常运行
-
自适应对齐的有效性——正确调谐的滤波器如何“净化”失真信号
-
同步的实用方法——使用训练序列代替理想假设
-
效率与开销之间的权衡——每50个数据符号使用30个训练符号(37.5%的开销)
应用领域
- 数字通信原理的教育演示
- 均衡与补偿算法的测试
- 评估各种调制方案的抗干扰能力
- 无线系统解决方案的原型设计
现在让我们进入模型的初始化和运行阶段,下面的代码将初始化具有自适应整流功能的 QPSK 通信系统参数:设置传输速率为 1 Mbit/s, 帧结构(100比特,包括30个训练符号)、调制参数和成形滤波器参数,配置了具有高达10 Hz频率偏移和双波束衰落的信道, 同时定义了RLS滤波器的参数(15个权重和0.95的遗忘因子),并准备了用于调整均衡器的训练序列。
In [ ]:
bitRate = 1000000;
numBitsPerFrame = 100;
bitsPerSymbol = 2;
numTrainSyms = 30;
pulseDelay = 8;
oversampleFactor = 8;
rolloffFactor = 0.2;
modOrder = 2^bitsPerSymbol;
numDataSymsPerFrame = numBitsPerFrame / bitsPerSymbol;
numSymsPerFrame = numDataSymsPerFrame + numTrainSyms;
qpskmod = EngeeComms.QPSKBasebandModulator(PhaseOffset = pi/4);
trainSig = qpskmod(rand(0:modOrder-1,numTrainSyms));
maxDoppler = 10;
numEqWeights = 15;
refTap = 8;
lambda = 0.95;
snrdB = 30;
symbolPeriod = bitsPerSymbol/bitRate;
chanSamplePeriod = symbolPeriod/oversampleFactor * 50/80;
pathDelays = [0 chanSamplePeriod];
pathGains = [0 -6];
numDataSymsPerFrame = numBitsPerFrame / bitsPerSymbol;
numSymsPerFrame = numDataSymsPerFrame + numTrainSyms;
initEqWeights = complex(zeros(numEqWeights));
eqDelay = refTap - 1;
trimTrainSig = trainSig[1:end-eqDelay];
println("速率:$(bitRate/1e6) Mbit/s,帧:$(numBitsPerFrame) 位")
println("结构:$(Int.(numDataSymsPerFrame)) 数据 + $(numTrainSyms) 个训练符号")
println("通道:多普勒 $(maxDoppler) 赫兹,2 束,信噪比 $(snrdB) 分贝")
println("均衡器:RLS滤波器,$(numEqWeights)$个采样点,λ=$(lambda)$")
In [ ]:
function run_model( name_model)
Path = (@__DIR__) * "/" * name_model * ".engee"
if name_model in [m.name for m in engee.get_all_models()] # 检查模型加载到内核的条件
model = engee.open( name_model ) # 打开模型
model_output = engee.run( model, verbose=true ); # 运行模型
else
model = engee.load( Path, force=true ) # 加载模型
model_output = engee.run( model, verbose=true ); # 运行模型
engee.close( name_model, force=true ); # 关闭模型
end
sleep(0.1)
return model_output
end
run_model("qpsk_freqfade")
Out[0]:
In [ ]:
WorkspaceArrays.plot_wa(WorkspaceArray{Vector{Float64}}("qpsk_freqfade/Error Rate Calculation.Output_1"))
Out[0]:
结论
通过分析误码率(BER)曲线,我们可以清楚地看到,在我们的信道参数下,误码率为零。 该系统表明,即使是相对简单的自适应滤波方法(RLS + 导频学习),也能有效应对实际通信信道中的严重失真,从而在非理想条件下实现高速数据传输。 该模型阐释了数字通信的基本原理:接收端的处理可以补偿物理信道中的许多问题,将“脏”的模拟信号转化为干净的数字数据。