1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJuVk5ps
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
在数字通信中,载波同步是保证正常数据传输的重要环节之一。Costas环是一种常用的基于相位差检测的载波同步方法,适用于QPSK调制信号的同步。本文将介绍基于Costas环的QPSK载波同步方法,并比较不同环路系数对载波同步的影响。
载波同步是相干解调的基础,不管对于模拟通信还是数字通信来说,只要是相干解调,接收端都必须提供同频同相的载波。当然,若采用基带传输,此时便没有载波同步的问题,因为没有频带调制,即没有乘以载波进行频谱搬移的过程。
4.部分源码
...........................................................................
SNRS = [2:2:16];
for SNR_DB = SNRS
SNR_DB
% SNR_DB = 4
rece = awgn(send,SNR_DB,'measured'); %接受端的信号,加载指定的snr
%rece = send;
%锁相环参数预设
Discriminator_Out=zeros(carlen * nsamp,1);
Freq_Control=zeros(carlen * nsamp,1);
PLL_Phase_Part=zeros(carlen * nsamp,1); %锁相环频率
PLL_Freq_Part=zeros(carlen * nsamp,1); %锁相环相位
WC_frame = zeros(1,carlen * nsamp);
NCO_Phase = 0;
............................................................................
end
end
%判断同步头,信号是否出现了反相,及时调整
num1 = symerr(sign(I_D(comps1:compf1)) , sign(dataoutI(comps1:compf1)));
num2 = symerr(sign(I_D(comps1:compf1)) , -sign(dataoutI(comps1:compf1)));
num3 = symerr(sign(I_D(comps1:compf1)) , sign(dataoutQ(comps1:compf1)));
num4 = symerr(sign(I_D(comps1:compf1)) , -sign(dataoutQ(comps1:compf1)));
numI = [num1,num2,num3,num4];
num = min(numI)
if num1 == num
dataout_I = dataoutI;
elseif num2 == num
dataout_I = -dataoutI;
elseif num3 == num
dataout_I = dataoutQ;
else
dataout_I = -dataoutQ;
end
num1 = symerr(sign(Q_D(comps2:compf2)) , sign(dataoutQ(comps2:compf2)));
num2 = symerr(sign(Q_D(comps2:compf2)) , -sign(dataoutQ(comps2:compf2)));
num3 = symerr(sign(Q_D(comps2:compf2)) , sign(dataoutI(comps2:compf2)));
num4 = symerr(sign(Q_D(comps2:compf2)) , -sign(dataoutI(comps2:compf2)));
numQ = [num1,num2,num3,num4];
num = min(numQ)
if num1 == num
dataout_Q = dataoutQ;
elseif num2 == num
dataout_Q = -dataoutQ;
elseif num3 == num
dataout_Q = dataoutI;
else
dataout_Q = -dataoutI;
end
%进入gardner环的信号
datarcosI = dataout_I(9:end) ;
datarcosQ = dataout_Q(9:end) ;
%统计误码率
in = dataI';
out = sign(datarcosI(1: 4:end));
[num2,rt2]= symerr(out(3001:end-5),in(3001:end));
num2
ratio(1,tp) = rt2;
in = dataQ';
out = sign(datarcosQ(1: 4:end));
[num2,rt2]= symerr(out(3001:end-5),in(3001:end));
num2
ratio(1,tp) = ratio(1,tp) + rt2;
tp = tp + 1;
end
errrate= ratio/2;
%误码率图
snr = SNRS;
figure;
semilogy(snr ,errrate,'-r>',...
'LineWidth',1,...
'MarkerSize',6,...
'MarkerEdgeColor','k',...
'MarkerFaceColor',[0.9,0.9,0.0]);
grid on;
save R11.mat SNRS errrate
0X_004m