主要内容

QPSK发射机和接收机

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

介绍

传输的QPSK数据经受了模拟无线传输影响的损害,如添加加性高斯白噪声(AWGN),引入载波频率和相位偏移,以及定时漂移。为解决这些缺陷,本实例提供了实用数字接收机的参考设计。接收机包括基于相关的粗频补偿、基于锁相环的细频补偿、基于锁相环的码元定时恢复、帧同步和相位模糊分辨。

这个例子有两个主要目的:

  • 建立一个通用无线通信系统的模型,该系统能够成功地恢复由于各种信道损伤而损坏的消息。

  • 为了说明关键通信工具箱™同步组件的使用,包括粗载波频率补偿和细载波频率补偿、带有位填充和剥离的闭环定时恢复、帧同步和载波相位模糊解决。

初始化

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

prmQPSKTxRx = commqpsktxrx_init%#ok<*NOPTS> % QPSK系统参数useScopes = true;如果要使用范围,则为trueprintreceiveddata = false;如果要打印收到的数据,则为truecompileIt = false;如果要编译代码,则为trueUSECODEGEN = FALSE;%true以运行生成的mex文件
prmqpsktxrx =带字段的结构:调制顺序:4插值:2抽取:1 rsym:50000 tsym:2.0000-05 fs:100000 totalframe:1000 barkercode:[1 1 1 1 1 1 -1 -1 1 1 -1 1 -1 1] BarkerLength:13号标题:26消息:'Hello World'Messagleght:16 NumberOfMessage:20 PayoRoveLength:2240框架:1133 FRAMETIME:0.0227滚动福音:0.0227滚动缩合器:0.5000 ScramblerBase:2爬行剪辑:[11 1 0 1] ScramblerInitialCitialItitions:[0 0 0 0] RaiedcosineFiltersPan:10阶段Offset:47 EBNO:13频率:5000 DelightType:'三角形'所需的功率:2 AsverageLength:50 MaxPowerGain:6000 PhaserecofofofopBandWidth:0.0100 PhaserecoveryDampingFactor:1 TimingRecoveryLoopBandWidth:0.0100 TimingRecoveryDampingFactor:1 TimingErrordettorningFactor:5.4000 PreambleDetorthreshold:20 MessageBits:[11200x1双] Bermask:[1540x1双]

被测系统的代码体系结构

这个例子模拟了一个使用QPSK调制的数字通信系统。这个函数runQPSKSystemUnderTest.m模拟这种通信环境。本脚本中的QPSK收发器模型分为以下四个主要组件。

1)qpsktransmitter.m.:生成位流,然后编码,调制和过滤它。

2)QPSKChannel.m:用载波偏移、定时偏移和AWGN建模信道。

3)QPSKReceiver.m:模拟接收机,包括相位恢复、定时恢复、解码、解调等组件。

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

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

单个组件的描述

发射机

该组件使用ASCII字符生成消息,将字符转换为位,并附加一个巴克码用于接收帧同步。然后使用QPSK对数据进行调制,并用平方根提高的余弦滤波器进行滤波。

渠道

这个组件模拟了空中传输的效果。它降低了发射信号的相位和频率偏移,一个时变延迟模拟发射机和接收机之间的时钟偏差,以及AWGN。

接收者

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

1)自动增益控制:将其输出功率设置为级别,确保相位和定时误差检测器的等效增益保持恒定。AGC在此之前放置上升余弦接收滤波器这样就可以用2的过采样系数来测量信号的幅值。这个过程提高了估计的准确性。

2)频率粗补偿:采用基于相关的算法粗略估计频率偏差,然后进行补偿。估计的粗频偏被平均,以便精细的频率补偿被允许锁定/收敛。因此,用a估计粗频偏comm.carefrequencycompensator系统对象和平均公式;补偿是使用comm.PhaseFrequencyOffset系统对象。

3)定时恢复:采用闭环标量处理进行定时恢复,以克服信道引入的延迟影响comm.SymbolSynchronizer系统对象。对象实现PLL以校正接收信号中的符号定时误差。在此示例中为对象选择旋转不变的加德纳定时错误检测器;因此,定时恢复可以在精细频率补偿之前。对象的输入是样本的固定长度帧。对象的输出是符号的帧,其长度可以因位填充和剥离而变化,具体取决于实际信道延迟。

4)精细频率补偿:对频率偏差进行闭环标量处理并精确补偿comm.CarrierSynchronizer系统对象。该对象实现了一个锁相环(PLL)来跟踪输入信号中的剩余频率偏移和相位偏移。

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

6)帧同步:执行帧同步,并将变长符号输入转换为定长输出,使用aFrameSynchronizer系统对象。对象有一个次级输出,它是一个布尔标量,指示第一个帧输出是否有效。

7)数据解码器:执行相位模糊分辨和解调。同时,数据解码器将重新生成的消息与发送的消息进行比较,并计算误码率。

范围

该组件提供可选的绘图可视化:

  • 一个描述接收信号平方根提高余弦滤波前后的频谱,

  • 星座图显示了接收信号经过接收机滤波后,经过定时恢复,然后经过精细的频率补偿。

有关系统组件的更多信息,请参阅QPSK发送器和接收器在Simulink中金宝app金宝app仿真软件的例子。

被测系统

在测试脚本下的系统中的主循环逐帧处理数据。设置MATLAB变量compileIt为true,以便生成代码。可以通过使用codegen命令由MATLAB Coder™产品提供。的codegen命令将MATLAB®函数转换为MEX文件,生成加速执行的代码。生成的C代码运行速度比原始MATLAB代码快几倍。对于本例,setuseCodegen使用由true生成的代码codegen而不是matlab代码。

内环runQPSKSystemUnderTest.m使用前面提到的四个System对象。在这个文件中,在被测系统周围有一个for循环,每次处理一帧。

对于计数= 1:prmQPSKTxRx。FrameCount transmittedSignal = qpskTx();rcvdSignal = qpskChan(transmittedSignal, count); / /发送信号[RCRxSignal, timingRecSignal, freqRecSignal, BER] = qpskRx(rcvdSignal);% Receiver如果使用escope runQPSKScopes(qpskScopes, rcvdSignal, RCRxSignal, timingRecSignal, freqRecSignal);%绘制所有范围结束结束

执行和结果

为了运行System Under Test脚本并获取模拟QPSK通信的误码率值,执行以下代码。当您运行模拟时,它会显示误码率数据和一些图形结果。显示的范围是星座图上升余弦接收滤波器产出,呢符号同步器输出,细频补偿输出,以及功率谱上升余弦接收滤波器输出。

如果compileIt codegen报告runQPSKSystemUnderTest.marg游戏{coder.Constant (prmQPSKTxRx) coder.Constant (useScopes) coder.Constant (printReceivedData)}% #好吧结束如果useCodegen BER = runQPSKSystemUnderTest_mex(prmQPSKTxRx,useScopes,printReceivedData); / /输出其他的ber = runqpsksystemundertest(prmqpsktxrx,useescopes,printreceiveddata);结束流('错误率=%f。\ n'BER (1));流('检测到的错误数= %d.\n',BER(2));流('被比较的样本总数= %d.\n'BER (3));
错误率= 0.000238。检测到的错误数= 366。比较样本总数= 1536920。

交替执行选项

正如本节已经提到的被测系统,通过在示例开始时使用变量,可以与代码交互以探索系统对象和编码选项的不同方面。

默认情况下,变量useScopesprintReceivedData分别设置为true和false。的useScopes变量允许在示例执行期间打开MATLAB范围。使用作用域,您可以看到模拟的子组件的行为,还可以更好地理解系统在模拟时间内的功能。当您将该变量设置为false时,作用域将不会在示例执行期间打开。当您设置printReceivedData如果是这样,您还可以在命令窗口中看到已解码的接收数据包。另外两个变量,compileIt和useCodegen,与速度性能有关,可用于分析设计权衡。

将Compileit设置为True时,此示例脚本将使用Matlab Coder™功能编译脚本RunqpsksystemunderText以进行加速执行。此命令将创建MEX文件(RunqpsksystemunderTest_mex)并将其保存在当前文件夹中。将USECodegen设置为true以运行MEX文件,该示例能够更快地运行MATLAB中实现的系统。此功能对于实现实时系统并是一个重要的仿真工具至关重要。最大化仿真速度,设置useScopes假和useCodegen为true以运行mex文件。

有关其他勘探选项,请参阅QPSK发送器和接收器在Simulink中金宝app例子。

概括

这个例子模拟了在AWGN信道上的数字通信。它展示了如何建模的几个部分的QPSK系统,如调制,频率和相位恢复,时间恢复,和帧同步。它通过计算误码率来衡量系统性能。它还表明,生成的C代码运行速度比原始MATLAB代码快几倍。

附录

这个例子使用了下面的脚本和辅助函数:

参考

1.大米,迈克尔。数字通信-离散时间方法.1 ed。纽约,纽约:2008年Prentice Hall。