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

在AWGN信道中,对16-QAM信号的重要相位和频率偏移的补偿是分两步完成的。首先,利用粗频补偿器提供的估计校正粗频偏,然后利用载波同步对校正进行微调。由于粗频率校正,载波同步器迅速收敛,即使归一化带宽被设置为一个低的值。较低的归一化带宽值能够更好地校正较小的残余载波偏置。在对接收信号进行相位和频率偏移校正后,利用前半部分解决相位模糊问题。

定义仿真参数。

fs = 10000;%采样率(赫兹)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 payload = randi([0 M-1],frame -barker. length,1);data((idx-1)*frameLen + (1:frameLen))) =[序言;有效载荷);结束

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

txFilter = comm.RaisedCosineTransmitFilter (“OutputSamplesPerSymbol”, sps);rxFilter = comm.RaisedCosineReceiveFilter (“InputSamplesPerSymbol”sps,“DecimationFactor”, sps);粗= comm.CoarseFrequencyCompensator (“SampleRate”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”、钾、“SamplesPerSymbol”, sps);卵圆孔未闭= comm.PhaseFrequencyOffset (“FrequencyOffset”freqoffset,“PhaseOffset”phaseoffset,“SampleRate”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。/ 2; / 2; / 2;idxSync = 2000;检查在同步循环已经收敛后接收到的信号的BER[syncDataTtlErr, syncDataBER] = biterr(数据(idxSync: end-delay) rxData (idxSync +延迟:结束)
syncDataTtlErr = 16116
syncDataBER = 0.5042

根据所使用的随机数据,在同步循环收敛和锁定后,可能会有由于接收信号的相位不明确而产生的位误差。在这种情况下,您可以使用前导来确定并消除同步信号的相位模糊,以减少比特错误。如果相位模糊是最小的,比特错误的数量可能是不变的。

idx = 9000 + (1:barker.Length);* conj(rxFiltSig(idx+delay)));phOffsetEst =意味着(phOffset);disp (['相位偏移= 'num2str (rad2deg (phOffsetEst)),“度”])
相位偏移= -90.1401度
resPhzSig = exp(1i*phOffsetEst) * rxFiltSig;

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

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