正确的相位和频率偏移16-QAM使用粗和细同步

在AWGN信道显著相位和频率偏移用于16-QAM信号的补偿是在两个步骤中完成。首先,校正使用由所述粗略频率补偿器提供的估计的粗略频率偏移,然后微调使用载波同步校正。因为粗略频率校正的,载波同步收敛很快即使归一化的带宽被设置为一个低的值。降低带宽归一化的值使能小的残余载波偏移校正更好。施加相位和频率偏移校正所接收的信号之后,决心相位模糊使用前同步码。

定义仿真参数。

fs = 10000;%试样率(Hz)的sps = 4;每个符号%的样品M = 16;%调制顺序k = log2 (M);每个符号位%rng (1996)%设定种子可重复的结果巴克= comm.BarkerCode(...“长度”13,'SamplesPerFrame'13);%的序言msgLen = 1 e4;numFrames = 10;frameLen = msgLen / numFrames;

生成数据有效负载,并在每一帧中添加序言。序言稍后用于相位模糊度的解决。

前导码=(1 +巴克())/ 2;%持续13,单极数据= 0 (msgLen, 1);对于IDX = 1:numFrames有效载荷=兰迪([0 M-1],frameLen-barker.Length,1);数据((IDX-1)* frameLen +(1:frameLen))= [前导码;有效载荷];结束

创建用于发射脉冲形状滤波的系统对象,接收脉冲形状滤波,所述QAM粗略频率补偿,载波同步,和一个星座图。

txFilter = comm.RaisedCosineTransmitFilter(...'OutputSamplesPerSymbol', sps);rxFilter = comm.RaisedCosineReceiveFilter(...'InputSamplesPerSymbol'sps,'DecimationFactor', sps);粗= comm.CoarseFrequencyCompensator('采样率'fs,...“FrequencyResolution”,10);细= comm.CarrierSynchronizer(...“DampingFactor”, 0.4,“NormalizedLoopBandwidth”0.001,...'SamplesPerSymbol', 1'调制''QAM');轴对称= [-6];constDiagram = comm.ConstellationDiagram (“ReferenceConstellation”,qammod(0:M-1,M),...“ChannelNames”,{“在融合之前”融合后的},...'ShowLegend',真正,“XLimits”,axislimits,'YLimits',axislimits);

还创建用于AWGN信道的系统中的对象,并且相位和频率偏移到损伤添加到该信号。相位偏移大于90度加入以诱导相位模糊的结果在星座象限移位。

ebn0 = 8;freqoffset = 110;phaseoffset = 110;awgnChannel = comm.AWGNChannel('的EbNo',ebn0,...“BitsPerSymbol”中,k,'SamplesPerSymbol', sps);卵圆孔未闭= comm.PhaseFrequencyOffset (“FrequencyOffset”freqoffset,...'PhaseOffset',phaseoffset,'采样率',FS);

生成随机数据符号,采用16-QAM调制,并通过发射脉冲整形滤波器的调制信号。

txMod = qammod(数据,M);txSig = txFilter (txMod);

使用。应用相位和频率偏移卵圆孔未闭系统对象,然后通过AWGN信道传递信号到加性高斯白噪声。

txSigOffset =卵圆孔未闭(txSig);rxSig = awgnChannel (txSigOffset);

粗频补偿器系统对象提供了对频率偏移的粗校正。对于本例中的情况,将接收信号的频率偏差校正到与发射信号的10 Hz以内就足够了。

syncCoarse =粗(rxSig);

将信号通过接收脉冲整形滤波器,并进行精细的频率校正。

rxFiltSig =细(rxFilter(syncCoarse));

显示信号中第一个和最后1000个符号的星座图。在同步环路收敛之前,图的螺旋特性表明频率偏移没有得到纠正。载波同步器收敛到解决方案后,将符号与参考星座对齐。

constDiagram ([rxFiltSig (1:1000) rxFiltSig(9001:结束)))

解调信号。考虑由传输和接收滤波器引起的信号延迟,以使接收数据与传输数据对齐。计算和显示总比特错误和误码率。当检查位错误时,使用接收信号的后一部分以确保同步循环已经收敛。

RXDATA = qamdemod(rxFiltSig,M);延迟=(txFilter.FilterSpanInSymbols + rxFilter.FilterSpanInSymbols)/ 2;idxSync = 2000;检查在同步循环已经收敛后接收到的信号的BER[syncDataTtlErr, syncDataBER] = biterr(数据(idxSync: end-delay) rxData (idxSync +延迟:结束)
syncDataTtlErr = 16116
syncDataBER = 0.5042

根据所使用的随机数据,也可以是来自在所述同步环路收敛和锁后的接收信号的相位模糊造成的比特错误。在这种情况下,可以使用前导码来确定,然后取下相位模糊从同步信号,以减少比特差错。如果相位模糊是最小的,比特错误的数量可以是不变的。

IDX = 9000 +(1:barker.Length);phOffset =角度(txMod(IDX)*缀(rxFiltSig(IDX +延迟))。);phOffsetEst =平均值(phOffset);DISP(['相位偏移= ',num2str(rad2deg(phOffsetEst)),“度”])
相位偏移= -90.1401度
resPhzSig = exp(1i*phOffsetEst) * rxFiltSig;

解决相位模糊之后解调信号。重新计算总比特错误和BER。

resPhzData = qamdemod (resPhzSig, M);[resPhzTtlErr, resPhzBER] = biterr(数据(idxSync: end-delay) resPhzData (idxSync +延迟:结束)
resPhzTtlErr = 5
resPhzBER = 1.5643e-04