具有自适应对准的QPSK通信系统
本例中的模型演示了一个实用的QPSK调制数字通信系统,该系统可以解决无线信道的实际问题:频率偏移、多径衰落和噪声。 主要目标是显示使用RLS滤波器补偿失真的自适应信道对准的有效性。
完整的数据传输路径:
-比特的生成→调制→脉冲整形
-通过现实的沟通渠道
-接收→对准→解调→误差估计
关键通道效果:
-相位和频移(多普勒高达10Hz+固定120°移位)
-多路径传播(两个具有不同延迟和衰减的路径)
-加性白高斯噪声(SNR=30dB)
框架结构
-训练序列(30个字符)-用于"训练"自适应滤波器
-有用的数据(50个字符—-真实信息
-这种结构模拟实际的通信系统(Wi-Fi,LTE),其中导频信号被周期性地发送。
两阶段处理
帧→[训练部分]→RLS滤波器(训练)→[数据]→FIR滤波器(尺度的应用)
-训练阶段:RLS滤波器根据已知的训练序列调整系数
-操作阶段:在FIR滤波器中使用调整后的权重来对齐有用的数据
模型演示了什么
-
QPSK在困难条件下的可行性-即使频率变化和衰减,系统仍可运行
-
自适应均衡效率-正确调谐的滤波器如何"清理"失真信号
-
同步的实用方法是使用训练序列而不是理想假设。
-
效率和开销之间的权衡是每50个字符的数据进行30个字符的训练(37.5%的开销)
申请范围
-数字通信原理的教育示范
-校准和补偿算法的测试
-评估各种调制方案的抗噪性
-无线系统的原型解决方案
现在让我们继续初始化和运行模型。 下面的代码以自适应对齐方式初始化QPSK通信系统的参数:设置1mbit/s的传输速率、帧结构(100位,包括30个训练字符)、调制和整形滤波器的参数、调整频率偏移达10hz和双波束衰落的信道、确定RLS滤波器的参数(15个权重和0.95的遗忘因子)并准备调整均衡器的训练序列。
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("速度:∞(比特率/1e6)Mbps,帧:∞(numBitsPerFrame)位")
println("结构:$(Int.(numDataSymsPerFrame))数据+$(numTrainSyms)训练字符")
println("通道:多普勒频宽(maxDoppler)Hz,2波束,信噪比(snrdB)dB")
println("均衡器:ψ(numEqWeights)采样的RLS滤波器,λ=ψ(lambda)")
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")
WorkspaceArrays.plot_wa(WorkspaceArray{Vector{Float64}}("qpsk_freqfade/Error Rate Calculation.Output_1"))
输出
分析BER图,我们清楚地看到,使用我们的通道参数,误差为零。 该系统表明,即使是相对简单的自适应滤波方法(RLS+导频训练)也可以有效地对抗真实通信信道中的严重失真,使得在非理想条件下高速数据传输成为可 该模型说明了数字通信的一个基本原理:接收侧的处理可以补偿物理信道的许多问题,将"脏"模拟信号转换为纯数字数据。