主要内容

利用粗、细同步校正16-QAM相位和频率偏移

AWGN信道中16-QAM信号的相位和频率补偿分两步完成。首先,利用粗频补偿器提供的估计值对粗频偏移进行校正,然后利用载波同步对校正进行微调。由于粗频率校正,即使将标准化带宽设置为较低的值,载波同步器也会快速收敛。较低的归一化带宽值可以更好地校正小剩余载波偏移。在对接收信号应用相位和频率偏移校正后,使用前导信号解决相位模糊。

定义仿真参数。

Fs = 10000;%采样率(Hz)SPS = 4;每个符号的样本百分比M = 16;调制阶数k = log2(M);每个符号的比特数%rng (1996)为可重复的结果设置种子barkercode (...%作为序言“长度”13岁的“SamplesPerFrame”13);msgLen = 1e4;numFrames = 10;frameLen = msgLen/numFrames;

生成数据载荷并将序言添加到每一帧。序言稍后用于相位模糊的解决。

前言= (1+barker())/2;%长度13,单极数据= 0 (msgLen, 1);idx = 1: numFrames payload = randi([0 M-1], frameen -barker. length,1);data((idx-1)*frameLen + (1:frameLen)) =[前言;有效载荷);结束

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

txFilter = com . raisedcosinetransmitfilter (...“OutputSamplesPerSymbol”, sps);rxFilter = com . raisedcosinereceivefilter (...“InputSamplesPerSymbol”sps,...“DecimationFactor”, sps);粗= com .粗频率补偿器(...“SampleRate”fs,...“FrequencyResolution”10);fine = com . carriersynchronizer (...“DampingFactor”, 0.4,...“NormalizedLoopBandwidth”, 0.001,...“SamplesPerSymbol”, 1...“调制”“QAM”);Axislimits = [-6 6];constDiagram = com . constellationdiagram (...“ReferenceConstellation”, qammod (0: M - 1 M),...“ChannelNames”, {“在融合之前”融合后的},...“ShowLegend”,真的,...“XLimits”axislimits,...“YLimits”, axislimits);

还为AWGN信道创建一个System对象,并为信号添加相位和频率偏移。添加大于90度的相位偏移来诱导相位模糊,从而导致星座象限漂移。

Ebn0 = 8;Freqoffset = 110;相位偏移= 110;awgnChannel = com . awgnChannel (...“EbNo”ebn0,...“BitsPerSymbol”、钾、...“SamplesPerSymbol”, sps);pfo = com . phasefrequencyoffset (...“FrequencyOffset”freqoffset,...“PhaseOffset”phaseoffset,...“SampleRate”fs);

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

txMod = qammod(data,M);txSig = txFilter(txMod);

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

txSigOffset = pfo(txSig);rxSig = awgnChannel(txSigOffset);

粗频率补偿器系统对象为频率偏移提供粗校正。对于本例中的条件,将接收信号校正的频率偏移校正到发射信号的10hz范围内就足够了。

sync粗=粗(rxSig);

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

rxFiltSig = fine(rxFilter(sync粗));

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

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

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

rxData = qamdemod(rxFiltSig,M);delay = (txFilter.)FilterSpanInSymbols +...rxFilter.FilterSpanInSymbols) / 2;idxSync = 2000;同步环路收敛后检查误码率[syncDataTtlErr,syncDataBER] = biterr(...数据(idxSync: end-delay), rxData (idxSync +延迟:结束)
syncDataTtlErr = 16116
syncDataBER = 0.5042

根据所使用的随机数据,在同步环收敛并锁定后,接收信号中可能会有由相位模糊引起的比特误码。在这种情况下,您可以使用导言来确定,然后从同步信号中删除相位模糊,以减少误码。如果相位模糊最小,则误码数可能不变。

idx = 9000 + (1:bark . length);phOffset =角度(txMod(idx) .* conj(rxFiltSig(idx+延迟)));phOffsetEst = mean(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.5643e-04