1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJ6Vkphx
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
基于16QAM(Quadrature Amplitude Modulation)调制的音频信号同步接收器是一个复杂但高效的通信系统。该系统主要涉及三个关键部分:Gardner符号同步、载波同步以及CMA(Constant Modulus Algorithm)均衡。
4.部分源码
........................................................................
%gardner算法开始
%gardner算法开始
len=length(out);
K=4; %每 个符号采4个样点
Ns=len; %总的采样点数
N=floor(Ns/K);%符号数
i=4; %用来表示Ts的时间序号,指示n,n_temp,nco,
k=1; %用来表示Ti时间序号,指示u,yI,yQ
ms=1; %用来指示T的时间序号,用来指示a,b以及w
strobe=zeros(1,Ns);
c1=0.0267;
c2=0.00035556; %环路滤波器系数
%%%%% 仿真输入测试的PSK基带数据 %%%
aI=real(out);
aQ=imag(out);
ik=[];
qk=[];
ns=length(aI)-2;
length(aI);
tic;
while(i<ns)
n_temp(i+1)=n(i)-w(ms);
if(n_temp(i+1)>0)
n(i+1)=n_temp(i+1);
else
n(i+1)=mod(n_temp(i+1),1);
%内插滤波器模块
FI1=0.5*aI(i+2-2)-0.5*aI(i+1-2)-0.5*aI(i-2)+0.5*aI(i-1-2);
FI2=1.5*aI(i+1-2)-0.5*aI(i+2-2)-0.5*aI(i-2)-0.5*aI(i-1-2);
FI3=aI(i-2);
.....................................................................
end
k=k+1;
u(k)=n(i)/w(ms);
end
i=i+1;
end
toc;
figure;
t=0:length(u)-1;
T=1/2400;
subplot(311);
plot(t*T,u);
xlabel('运算点数');
ylabel('分数间隔');
t=0:length(time_error)-1;
T=1/2400;
subplot(312);
plot(t*T,time_error);
xlabel('运算点数');
ylabel('定时误差');
t=0:length(w)-1;
T=1/2400;
subplot(313);
t=0:length(ik)-1;
T=1/1200;
plot(t*T,ik);title('最终的基带数据I');
len=length(ik);
symbolall=ik-1i*qk;
sym=zeros(1,len);
ik=[0,ik];
basebandSignal=symbolall';
%%
%载波同步
tic;
T=1/FS;
Yo = [];
%给锁相环一个初始相位
Phase0 = pi/4;
for frame=1:nf
x = basebandSignal(frame)*exp(sqrt(-1)*(phase*frame*T+Phase0)); %phase是反馈的调整变量,用来调整输入信号的载波频率来调整跟踪频率
%将数据转换到基带
......................................................................
Yo(frame)= dfrq;
end
%均衡器
OUT4 = CMA(OUT3);
OUT4 = OUT4;
toc;
LENS = 1000;%simulink设置的是1000.这里也1000.
axis([-0.5,0.5,-0.5,0.5]);
subplot(133);
plot(real(OUT4(LENS*(i-1)+1:LENS*i)),imag(OUT4(LENS*(i-1)+1:LENS*i)),'r.');title('CMA均衡基带数据星座图');
axis([-0.5,0.5,-0.5,0.5]);
pause(0.1);
end
y=OUT4;
T=1/2400;
Tx_real=y;
Tx_real=Tx_real';
t=t(1:length(Tx_real))*T;
data=[t' Tx_real];
ts2= timeseries;
ts2.Time=t';
ts2.Data=Tx_real;
save('data2.mat','-v7.3','ts2');
0X_027m
---