概述
-
18.基于Matlab的QPSK系统载波同步分析
前面几节介绍了相干解调的几个基本概念,下来结合一个实际的通信系统,从实际的应用出发深入理解载波同步的概念。载波同步是基于锁相环技术使本地获取和载波同频同相的参考信号,用来解调信号。
载波同步就是对本地参考信号进行频率和相位偏差的补偿,进而实现本地参考信号和载波信号同频同相。
载波同步只适用于单载波调制系统,载波同步算法对于BPSK、QPSK、OQPSK、8-PSK、PAM和QAM都是兼容的。
目前锁相环使用比较多的是Costas环和平方环进行载波同步,但是两者都有相位模糊的特点。
18.1.QPSK通信系统载波同步分析
- 系统参数设置:
帧长:1000bits(包括preamble)
帧个数:10;
调制模式:QPSK;
解调相位模糊处理:barker码,由于锁相环处理必然有相位模糊,所以通过barker码解决相位模糊的问题;
%%------------------------------ Parameter ------------------------------%%
M = 4;% Modulation order,QPSK
rng(1993) % For repeatable results,每次仿真结果相同
barker = comm.BarkerCode(...
'Length',13,'SamplesPerFrame',13);% For preamble,使用preamble来解决相位模糊问题
msgLen = 1e4;
numFrames = 10;%10帧
frameLen = msgLen/numFrames;
- 产生射频信号
将preamble添加到帧头位置;
%%--------------------------- Generate Tx Signal ------------------------%%
preamble = (1+barker())/2;% Length 13,unipolar,将双极性的barker码,转换为单极性
data = zeros(msgLen,1);
for idx = 1 : numFrames
payload = randi([0 M-1],frameLen-barker.Length,1);
data((idx-1)*frameLen + (1:frameLen)) = [preamble; payload];%将barker码添加到帧头
end
modSig = pskmod(data,4,pi/4);%产生调制信号
- 生成相位和频率偏差
相偏:45°
频偏:10KHz
采样频率:1Mhz,频偏是采样频率的1%
%%------------------- Generate Phase and Frequence Offset ---------------%%
pfo = comm.PhaseFrequencyOffset('PhaseOffset',45, ...
'FrequencyOffset',1e4,'SampleRate',1e6);
- 生成载波同步器
SamplesPerSymbol:符号过采样倍数,本例子默认为1;
%%---------------------------- Carrier Synchronizer ---------------------%%
carrierSync = comm.CarrierSynchronizer( ...
'SamplesPerSymbol',1,'Modulation','QPSK');
- 添加相偏、频偏和信道噪声
%%-------------------- Add Phase and Frequence Offset -------------------%%
modSigOffset = pfo(modSig);
%%--------------------------- Add Channel Noise -------------------------%%
rxSig = awgn(modSigOffset,12);
- 查看发射信号的星座图
由星座图可以看出由于存在相偏和频偏导致星座点没有收敛,星座图发散。
不添加相偏和频偏的发射信号星座点如下:
scatterplot(rxSig)%发射星座图
- 对比同步处理前后的星座图
存在相偏和频偏的情况下,对比第一帧和第十帧的星座图可以看出进过同步器后星座点已经开始收敛。
没有相偏和频偏的情况下,对比第一帧和第十帧的星座图可以看出星座点均敛。
- 对同步后的信号进行解调并计算BER
syncDataTtlErr = 3990;
syncDataBER = 0.4986;
从结果可以看出BER比较大,由于星座点已经收敛,说明已经获得同频同相的本地载波信号,造成BER高的原因可能是相位模糊造成的。
%%-----------------------------------------------------------------------%%
syncData = pskdemod(syncSignal,4,pi/4);%Demodulate the synchronized signal
[syncDataTtlErr,syncDataBER] = biterr(data(6000:end),syncData(6000:end))%Compute and display the total bit errors and BER
- 利用barker码计算相位模糊
相位模糊范围:0、,或者,通常情况下Costas环和平方环的是的相位模糊,具体和调制模式有关;
求出载波同步前后相同barker码的相位角,就求出了相位模糊角;
angle求出的相位角范围,满足相位模糊范围;
%%--------------------------- Phase ambiguity ---------------------------%%
idx = 9000 + (1:barker.Length);
phOffset = angle(modSig(idx) .* conj(syncSignal(idx)));
phOffset = round((2/pi) * phOffset); % -1, 0, 1, +/-2
phOffset(phOffset==-2) = 2; % Prep for mean operation
phOffset = mean((pi/2) * phOffset); % -pi/2, 0, pi/2, or pi
disp(['Estimated mean phase offset = ',num2str(phOffset*180/pi),' degrees'])
求出的相位模糊:Estimated mean phase offset = 180 degrees
- 补偿相位模糊,将补偿后的数据进行解调并计算BER
syncDataTtlErr = 403;
syncDataBER = 0.0504;
%%------------------------------ Phase Shift ----------------------------%%
resPhzSig = exp(1i*phOffset) * syncSignal;
resPhzData = pskdemod(resPhzSig,4,pi/4);%Demodulate the signal after resolving the phase ambiguity
[resPhzTtlErr, resPhzBER] = biterr(data(6000:end),resPhzData(6000:end))
18.2.下一步分析内容
结合以上分析实例,对具体同步器算法进行研究;
最后
以上就是外向月亮为你收集整理的通信原理及系统系列20—— 基于Matlab的QPSK通信系统载波同步分析的全部内容,希望文章能够帮你解决通信原理及系统系列20—— 基于Matlab的QPSK通信系统载波同步分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复