AnyMath 文档
Notebook

具有自适应同步功能的QPSK通信系统

本示例中介绍的模型演示了一个采用QPSK调制的实用数字通信系统,该系统能够应对无线信道中的实际问题:频率偏移、多径衰落和噪声。 主要目的是展示利用RLS滤波器进行失真补偿的自适应信道均衡的有效性。

完整的数据传输路径

  • 比特生成 → 调制 → 脉冲成形
  • 通过真实通信信道传输
  • 接收 → 信道均衡 → 解调 → 误码率估算

关键信道效应

  • 相位和频率偏移(多普勒效应高达 10 Hz + 120° 固定偏移)
  • 多径传播(两条具有不同延迟和衰减的路径)
  • 加性白高斯噪声(信噪比 SNR = 30 dB)

帧结构

  • 训练序列(30 个符号)——用于“训练”自适应滤波器
  • 有效数据(50个符号)——实际信息
  • 这种结构模拟了实际通信系统(Wi-Fi、LTE),其中会周期性地传输导频信号

两阶段处理

帧 → [训练部分] → RLS 滤波器(训练) → [数据] → FIR 滤波器(应用权重)
  • 训练阶段:RLS滤波器根据已知的训练序列调整权重
  • 运行阶段:将调整后的权重应用于FIR滤波器,以对实用数据进行平滑处理
image.png

该模型展示了什么

  1. QPSK在复杂条件下的可靠性——即使存在频率偏移和信号衰落,系统仍能保持正常运行

  2. 自适应对齐的有效性——正确调谐的滤波器如何“净化”失真信号

  3. 同步的实用方法——使用训练序列代替理想假设

  4. 效率与开销之间的权衡——每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)$")
速率:1.0 Mbit/s,帧:100 比特
结构:50条数据 + 30个训练字符
通道:10赫兹多普勒,双波束,信噪比30分贝
平滑器:15个采样点的RLS滤波器,λ=0.95
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")
Building...
Progress 0%
Progress 2%
Progress 5%
Progress 6%
Progress 9%
Progress 14%
Progress 19%
Progress 24%
Progress 29%
Progress 33%
Progress 38%
Progress 43%
Progress 48%
Progress 53%
Progress 58%
Progress 63%
Progress 68%
Progress 73%
Progress 78%
Progress 83%
Progress 88%
Progress 93%
Progress 98%
Progress 100%
Progress 100%
Out[0]:
SimulationResult(
    run_id => 2,
    "Error Rate Calculation.Output_1" => WorkspaceArray{Vector{Float64}}("qpsk_freqfade/Error Rate Calculation.Output_1")
,
    "Unbuffer-1.1" => WorkspaceArray{ComplexF64}("qpsk_freqfade/Unbuffer-1.1")
,
    "Unbuffer.1" => WorkspaceArray{ComplexF64}("qpsk_freqfade/Unbuffer.1")

)
In [ ]:
WorkspaceArrays.plot_wa(WorkspaceArray{Vector{Float64}}("qpsk_freqfade/Error Rate Calculation.Output_1"))
Out[0]:

结论

通过分析误码率(BER)曲线,我们可以清楚地看到,在我们的信道参数下,误码率为零。 该系统表明,即使是相对简单的自适应滤波方法(RLS + 导频学习),也能有效应对实际通信信道中的严重失真,从而在非理想条件下实现高速数据传输。 该模型阐释了数字通信的基本原理:接收端的处理可以补偿物理信道中的许多问题,将“脏”的模拟信号转化为干净的数字数据。