主要内容

QPSK发射器和接收器

这个例子展示了用MATLAB®实现QPSK发射器和接收器。特别是,这个例子说明了解决现实世界的无线通信问题的方法,如载波频率和相位偏移,定时恢复和帧同步。对于同一系统的S金宝appimulink®实现,请参阅Simulink中的QPSK发射器和接收器金宝app的例子。

介绍

传输的QPSK数据经历损伤,该损伤模拟了无线传输的影响,例如添加白色高斯噪声(AWGN),引入载波频率和相位偏移,以及定时漂移。为了应对这些损伤,该示例提供了实用数字接收器的参考设计。接收器包括基于相关的粗略频率补偿,基于PLL的微频补偿,基于PLL的符号定时恢复,帧同步和相位模糊分辨率。

此示例有两个主要目的:

  • 为了模拟能够成功恢复消息的一般无线通信系统,这些系统被各种模拟信道损伤损坏。

  • 为了说明使用键通信工具箱™同步分量,包括粗略和细载波频率补偿,具有比特填充和剥离,帧同步和载波相位模糊分辨率的闭环定时恢复。

初始化

commqpsktxrx_init.m.脚本初始化仿真参数并生成结构prmqpsktxrx。

prmqpsktxrx = commqpsktxrx_init.%#OK <* NOPTS>%QPSK系统参数USESCOPES = TRUE;% true如果使用范围printReceivedData = false;如果接收的数据要打印,则%truecompileit = false;% true如果要编译代码useCodegen = false;% true运行生成的mex文件
prmQPSKTxRx =结构体字段:ModulationOrder: 4插值:2大量毁灭:1 Rsym: 50000 Tsym: 2.0000 e-05 Fs: 100000 TotalFrame: 1000 BarkerCode: [1 1 1 1 1 1 1 1 1 1 1 1 1] BarkerLength: 13 HeaderLength: 26日消息:“Hello world”MessageLength: 16 NumberOfMessage: 20 PayloadLength: 2240 FrameSize: 1133 FrameTime: 0.0227 RolloffFactor:0.5000 ScramblerBase: 2 ScramblerPolynomial: [1 1 1 0 1] ScramblerInitialConditions: [0 0 0 0] RaisedCosineFilterSpan: 10 PhaseOffset: 47 EbNo: 13 FrequencyOffset: 5000 DelayType:“三角形”DesiredPower: 2 AveragingLength: 50 MaxPowerGain: 20 MaximumFrequencyOffset: 6000 PhaseRecoveryLoopBandwidth: 0.0100 PhaseRecoveryDampingFactor:1 TimingRecoveryLoopBandwidth: 0.0100 TimingRecoveryDampingFactor: 1 TimingErrorDetectorGain: 5.4000 PreambleDetectorThreshold: 20 MessageBits: [11200x1 double] BerMask: [1540x1 double]

正在测试的系统的代码架构

此示例使用QPSK调制模拟数字通信系统。功能runqpsksystemundertest.m.模拟此通信环境。此脚本中的QPSK收发器模型分为以下四个主要组件。

1)QPSKTransmitter.m:生成位流,并对其进行编码、调制和过滤。

2)QPSKCHANNEL.M.:使用载波偏移,定时偏移和AWGN模拟通道。

3)qpskreceiver.m:塑造接收器,包括相位恢复,定时恢复,解码,解调等组件。

4)QPSKScopes.m:可选使用时间范围,频率范围和星座图可视化信号。

每个组件都使用系统对象建模。要查看四个主系统对象组件的构建,请参阅runqpsksystemundertest.m.

各个组件的描述

发射机

该组件使用ASCII字符生成消息,将字符转换为位,并将Barker代码添加到接收器帧同步。然后使用QPSK调制该数据,并用平方根升高的余弦滤波器过滤。

通道

该组件模拟过空气传输的影响。它通过相位和频率偏移来降低发送信号,使变送器和接收器之间模拟时钟偏斜的时变延迟,以及AWGN。

接收机

该组件重新生成原始传输消息。它分为七个子组件。

1)自动增益控制:将其输出功率设置为确保相位和定时误差检测器的等效增益随时间保持恒定的水平。AGC放置在凸起余弦接收过滤器这样信号幅度可以用两个过采样系数测量。该过程提高了估计的准确性。

2)粗略频率补偿:使用基于相关的算法来大致估计频率偏移,然后补偿它。平均估计的粗频偏移,使得允许微量补偿锁定/收敛。因此,使用a估计粗略频率偏移comm.CoarseFrequencyCompensator系统对象和平均公式;补偿是使用a执行的comm.phasefrequencyoffset.系统对象。

3)定时恢复:使用闭环标量处理执行定时恢复,以克服通道引入的延迟的影响,使用acomm.symbolsynchronizer系统对象。该对象实现一个锁相环来纠正接收信号中的符号定时错误。在本例中,为目标选择旋转不变的加德纳定时误差检测器;因此,定时恢复可以先于精细的频率补偿。对象的输入是一个固定长度的采样帧。该对象的输出是一个符号帧,其长度可能由于位填充和剥离而变化,这取决于实际的信道延迟。

4)细频补偿:使用a准确地执行闭环标量处理并补偿频率偏移量comm.carriersynchronizer系统对象。对象实现锁相环(PLL)以跟踪剩余频率偏移和输入信号中的相位偏移。

5)前导码检测:使用a检测输入中已知的Barker代码的位置comm.PreambleDetector系统对象。该对象实现了一个基于互相关连的算法来检测输入中已知的符号序列。

6)帧同步:执行帧同步,并且还使用a将变量长度符号输入转换为固定长度输出,Framesynchronizer.系统对象。该对象具有辅助输出,该辅助输出是一个布尔标量,指示第一帧输出有效。

7)数据解码器:执行相位模糊的分辨率和解调。此外,数据解码器将再生消息与发送的一个进行比较并计算BER。

作用域

此组件提供可选的可视化来图形:

  • 光谱范围描绘了平方根之前和之后的接收信号升高的余弦滤波,

  • 星座图,示出了接收器滤波后的接收信号,在定时恢复之后然后在微频补偿之后。

有关系统组件的更多信息,请参阅Simulink中的QPSK发射器和接收器金宝app金宝appSimulink示例。

正在测试的系统

系统下的主循环在测试脚本下处理数据逐帧数据。设置MATLAB变量编译为了生成代码来实现。这可以通过使用来实现Codegen.Matlab Coder™产品提供的命令。这Codegen.命令将MATLAB®函数转换为MEX文件,生成加速执行的代码。生成的C代码比原始MATLAB代码快几倍。对于此示例,设置UseCodegen.符合使用由生成的代码Codegen.而不是MATLAB代码。

内循环runqpsksystemundertest.m.使用先前提到的四个系统对象。在此文件中,系统围绕被测系统循环一次以一次处理一个帧。

对于count = 1:prmqpsktxrx.framecount发送rignal = qpsktx();rcvdsignal = QPSKCHAN(传输,计数);[RcrxSignal,TimingRecsignal,FreqRecsignal,BER] = QPSKRX(RCVDSignal);%接收器如果useScopes runqpskscopes(QPSkscopes,Rcvdsignal,RcrxSignal,TimingRecsignal,FreqRecsignal);%绘制所有范围结束结束

执行和结果

要在测试脚本下运行系统并获取模拟QPSK通信的BER值,则执行以下代码。运行模拟时,它会显示误码率数据和一些图形结果。显示的范围是星座图凸起余弦接收过滤器输出时,符号同步器产出,和细频率补偿输出,和功率谱的凸起余弦接收过滤器输出。

如果Compileit Codegen.-报告runqpsksystemundertest.m.-  args.{编码器.Constant(prmqpsktxrx),coder.constant(USESCOPES),Coder.Constant(PrintReceivedData)}%#好的结尾如果USECODEGEN BER = runqpsksystemunderTest_mex(Prmqpsktxrx,Usescopes,PrintReceivedData);别的数量= runQPSKSystemUnderTest (prmQPSKTxRx useScopes printReceivedData);结尾fprintf('错误率= %f.\n',BER(1));fprintf('检测到的错误数=%d。\ n'BER (2));fprintf('比较样本的总数=%d。\ n',BER(3));
错误率= 0.000238。检测到的误差数= 366.比较样本的总数= 1536920。

备用执行选项

如本节所述正在测试的系统,通过使用示例开头的变量,可以与代码交互,以探索System对象和编码选项的不同方面。

默认情况下,变量useScopes.printreceiveddata.分别设置为true和false。这useScopes.变量使MATLAB示波器能够在示例执行期间打开。使用范围,您可以了解模拟子组件的行为方式,并更好地了解系统如何在模拟时间中运行。将此变量设置为false时,示例执行期间的范围不会打开。当你设置时printreceiveddata.为true,您还可以看到在命令窗口中打印的解码收到的数据包。另外两个变量,编译和UseCodegen.,与速度性能有关,可用于分析设计折衷。

当您将compileIt设置为true时,这个示例脚本将使用MATLAB Coder™功能来编译脚本runQPSKSystemUnderText以加速执行。这个命令将创建一个MEX文件(runQPSKSystemUnderTest_mex)并将其保存到当前文件夹中。一旦你设置useCodegen为true来运行mex文件,这个例子就能够更快地运行MATLAB实现的系统。这个特性对于实时系统的实现是必不可少的,也是一个重要的仿真工具。为了使模拟速度最大化,设置useScopes.虚假和UseCodegen.tir才能运行mex文件。

对于其他探索期权,请参阅Simulink中的QPSK发射器和接收器金宝app的例子。

总结

此示例模拟AWGN通道上的数字通信。它展示了如何模拟QPSK系统的几个部分,例如调制,频率和相位恢复,定时恢复和帧同步。通过计算BER来测量系统性能。它还表明,所生成的C代码比原始MATLAB代码快几倍。

附录

此示例使用以下脚本和辅助功能:

参考文献

米,迈克尔。数字通信 - 离散时间方法.第1版。纽约,纽约:普伦蒂斯霍尔,2008。