主要内容

用粗同步和细同步校正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,单极数据=零(msglen,1);idx = 1: numFrames payload = randi([0 M-1],frameLen-barker.Length,1);data((idx-1)*frameLen + (1:frameLen)) = [preamble;有效载荷);结束

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

txFilter = comm.RaisedCosineTransmitFilter (...“OutputSamplesPerSymbol”, sps);rxFilter = comm.RaisedCosineReceiveFilter (...“InputSamplesPerSymbol”,sps,“DecimationFactor”, sps);粗= comm.CoarseFrequencyCompensator (“SampleRate”,fs,...'surformresolution'10);好= comm.CarrierSynchronizer (...'阻尼因子',0.4,'标准化龙宽度', 0.001,...“SamplesPerSymbol”,1,“调制”“QAM”);AxisLimits = [-6 6];constdiagram = comm.constellationdiagram(“ReferenceConstellation”, qammod (0: M - 1 M),...'ChannelNames',{'在收敛之前''收敛后'},...“ShowLegend”,真的,“XLimits”axislimits,“YLimits”, axislimits);

还为AWGN通道创建一个System对象,以及相位和频率偏移来增加信号的损害。增加一个大于90度的相位偏移来引起相位模糊,从而导致星座象限偏移。

ebn0 = 8;freqoffset = 110;phaseoffset = 110;awgnChannel = comm.AWGNChannel (“EbNo”ebn0,...“BitsPerSymbol”、钾、“SamplesPerSymbol”, sps);pfo = comm.phasefrequencyOffset('surformoffset',freqoffset,...“PhaseOffset”phaseoffset,“SampleRate”fs);

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

txmod = qammod(数据,m);txsig = txfilter(txmod);

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

txsigoffset = pfo(txsig);rxsig = awgnchannel(txsigoffset);

粗略频率补偿器系统对象为频率偏移提供粗略校正。对于该示例的条件,将接收信号校正的频率偏移校正到发送信号的10 Hz内是足够的。

syncoarse =粗(rxsig);

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

rxFiltSig =好(rxFilter (syncCoarse));

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

Constdiagram([rxfiltsig(1:1000)rxfiltsig(9001:结束)])

解调信号。考虑由发射和接收过滤器引起的信号延迟,以将接收的数据与发送的数据对齐。计算并显示总位错误和BER。在检查比特错误时,使用接收信号的后部部分以确保同步循环融合。

rxData = qamdemod (rxFiltSig, M);延迟= (txFilter。FilterSpanInSymbols + rxFilter.FilterSpanInSymbols) / 2;idxSync = 2000;在同步循环融合后,%检查接收信号的接收信号[syncdattlerr,syncdataber] = biterr(数据(idxsync:end-divel),rxdata(idxsync + delay:结束))
syncdatattlerr = 16116.
syncDataBER = 0.5042

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

idx = 9000 + (1:barker.Length);phffset = angle(txMod(idx) .* 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延迟),resphzdata(idxsync + delay:结束))
resPhzTtlErr = 5
resPhzBER = 1.5643 e-04