正确的符号计时和多普勒偏移
方法纠正符号计时和频率偏移错误comm.SymbolSynchronizer
而且comm.CarrierSynchronizer
系统对象。
配置
初始化仿真参数。
M = 16;调制阶数nSym = 2000;数据包中的符号数SPS = 2;每个符号的样本百分比spsFilt = 8;用于过滤器和通道的每个符号的样本spsSync = 2;%用于同步器的每个符号的样本lenFilt = 10;% RRC过滤器长度
为发射器和接收器创建一对匹配的根凸起余弦(RRC)滤波器系统对象。
txfilter = com . raisedcosinetransmitfilter (...FilterSpanInSymbols = lenFilt,...OutputSamplesPerSymbol = spsFilt,...获得=√spsFilt);rxfilter = com . raisedcosinereceivefilter (...FilterSpanInSymbols = lenFilt,...InputSamplesPerSymbol = spsFilt,...DecimationFactor = spsFilt / 2,...获得=√1 / spsFilt);
创建一个相频偏移系统对象来引入100 Hz多普勒频移。
多普勒= com .相位频率偏移(...FrequencyOffset = 100,...PhaseOffset = 45,...SampleRate = 1 e6);
创建一个可变delay System对象来引入定时偏移。
varDelay = dsp.VariableFractionalDelay;
创建载波和符号同步器系统对象,分别校正多普勒频移和定时偏移。
carrierSync = com . carriersynchronizer (...SamplesPerSymbol = spsSync);symbolSync = com . symbolsynchronizer (...TimingErrorDetector =早期的后期(non-data-aided)”,...SamplesPerSymbol = spsSync);
创建星座图系统对象以查看结果。
refConst = qammod(0:M-1,M,UnitAveragePower=true);cdReceive = com .星座图(...ReferenceConstellation = refConst,...SamplesPerSymbol = spsFilt标题=接收信号的);cdDoppler = com .星座图(...ReferenceConstellation = refConst,...SamplesPerSymbol = spsSync,...Title =“频率校正信号”);cdTiming = com .星座图(...ReferenceConstellation = refConst,...SamplesPerSymbol = spsSync,...Title =“频率和定时同步信号”);
主要处理回路
主要处理循环:
生成随机符号并应用QAM调制。
对调制信号进行滤波。
应用频率和定时偏移。
将传输的信号通过AWGN信道传递。
过滤接收的信号。
纠正多普勒频移。
纠正定时偏移。
为k = 1:15 data = randi([0 M-1],nSym,1);modSig = qammod(data,M,UnitAveragePower=true);txSig = txfilter(modSig);txDoppler =多普勒(txSig);txDelay = varDelay(txDoppler,k/15);rxSig = awgn(txDelay,25);rxFiltSig = rxfilter(rxSig);rxCorr = carrierSync(rxFiltSig);rxData = symbolSync(rxCorr);结束
可视化
绘制接收信号、频率校正信号和频率定时同步信号的星座图。在接收信号中不能识别特定的星座点,只能在频率校正信号中识别部分星座点。然而,时间和频率同步信号对准预期的QAM星座点。
cdReceive (rxSig)
cdDoppler (rxCorr)
cdTiming (rxData)