📄 apkpskqam.m
字号:
elseif q_psk(n)<=13*pi/16&q_psk(n)>11*pi/16
x_depsk(n)=s_psk(6);
elseif q_psk(n)<=15*pi/16&q_psk(n)>13*pi/16
x_depsk(n)=s_psk(7);
elseif q_psk(n)<=16*pi/16&q_psk(n)>15*pi/16
x_depsk(n)=s_psk(8);
elseif q_psk(n)<=-15*pi/16&q_psk(n)>-16*pi/16
x_depsk(n)=s_psk(8);
elseif q_psk(n)<=-13*pi/16&q_psk(n)>-15*pi/16
x_depsk(n)=s_psk(9);
elseif q_psk(n)<=-11*pi/16&q_psk(n)>-13*pi/16
x_depsk(n)=s_psk(10);
elseif q_psk(n)<=-9*pi/16&q_psk(n)>-11*pi/16
x_depsk(n)=s_psk(11);
elseif q_psk(n)<=-7*pi/16&q_psk(n)>-9*pi/16
x_depsk(n)=s_psk(12);
elseif q_psk(n)<=-5*pi/16&q_psk(n)>-7*pi/16
x_depsk(n)=s_psk(13);
elseif q_psk(n)<=-3*pi/16&q_psk(n)>-5*pi/16
x_depsk(n)=s_psk(14);
elseif q_psk(n)<=-1*pi/16&q_psk(n)>-3*pi/16
x_depsk(n)=s_psk(15);
else
x_depsk(n)=s_psk(16);
end
end
[num,rt]=symerr(x_psk,x_depsk);
ber_pskhpa(i)=rt;
%加入预失真
A=[zeros(2,N);ones(1,N);zeros(5,N)];
T=[0.2,0,0,0,0,0,0,0;
0,0.2,0,0,0,0,0,0;
0,0,0.2,0,0,0,0,0;
0,0,0,0.2,0,0,0,0;
0,0,0,0,0.2,0,0,0;
0,0,0,0,0,0.2,0,0;
0,0,0,0,0,0,0.2,0;
0,0,0,0,0,0,0,0.2];
l1=0.6;l2=1;
w=x_psknoisy;
y=x_psknoisy;
y1=x_psknoisy;
z=x_psknoisy;
for n=3:N
Q(n,:)=[-y(n-1),-y(n-2),w(n),abs(w(n))^2*w(n),abs(w(n))^4*w(n),abs(w(n))^6*w(n),abs(w(n))^8*w(n),abs(w(n))^10*w(n)];
y(n)=Q(n,:)*A(:,n-1);
z(n)=saleh(y(n));
Q1(n,:)=[-y1(n-1),-y1(n-2),z(n),abs(z(n))^2*z(n),abs(z(n))^4*z(n),abs(z(n))^6*z(n),abs(z(n))^8*z(n),abs(z(n))^10*z(n)];
y1(n)=Q1(n,:)*A(:,n-1);
e(n)=(y(n)-y1(n))/(1+Q1(n,:)*T*Q1(n,:)');
A(:,n)=A(:,n-1)+T*Q1(n,:)'*e(n);
T=1/l1*(T-l2*T*Q1(n,:)'*Q1(n,:)*T/(l1+l2*Q1(n,:)*T*Q1(n,:)'));
end
q_psk=angle(z);
for n=1:N
if q_psk(n)<=3*pi/16&q_psk(n)>1*pi/16
x_depsk(n)=s_psk(1);
elseif q_psk(n)<=5*pi/16&q_psk(n)>3*pi/16
x_depsk(n)=s_psk(2);
elseif q_psk(n)<=7*pi/16&q_psk(n)>5*pi/16
x_depsk(n)=s_psk(3);
elseif q_psk(n)<=9*pi/16&q_psk(n)>7*pi/16
x_depsk(n)=s_psk(4);
elseif q_psk(n)<=11*pi/16&q_psk(n)>9*pi/16
x_depsk(n)=s_psk(5);
elseif q_psk(n)<=13*pi/16&q_psk(n)>11*pi/16
x_depsk(n)=s_psk(6);
elseif q_psk(n)<=15*pi/16&q_psk(n)>13*pi/16
x_depsk(n)=s_psk(7);
elseif q_psk(n)<=16*pi/16&q_psk(n)>15*pi/16
x_depsk(n)=s_psk(8);
elseif q_psk(n)<=-15*pi/16&q_psk(n)>-16*pi/16
x_depsk(n)=s_psk(8);
elseif q_psk(n)<=-13*pi/16&q_psk(n)>-15*pi/16
x_depsk(n)=s_psk(9);
elseif q_psk(n)<=-11*pi/16&q_psk(n)>-13*pi/16
x_depsk(n)=s_psk(10);
elseif q_psk(n)<=-9*pi/16&q_psk(n)>-11*pi/16
x_depsk(n)=s_psk(11);
elseif q_psk(n)<=-7*pi/16&q_psk(n)>-9*pi/16
x_depsk(n)=s_psk(12);
elseif q_psk(n)<=-5*pi/16&q_psk(n)>-7*pi/16
x_depsk(n)=s_psk(13);
elseif q_psk(n)<=-3*pi/16&q_psk(n)>-5*pi/16
x_depsk(n)=s_psk(14);
elseif q_psk(n)<=-1*pi/16&q_psk(n)>-3*pi/16
x_depsk(n)=s_psk(15);
else
x_depsk(n)=s_psk(16);
end
end
[num,rt]=symerr(x_psk(50:N),x_depsk(50:N));
ber_pskhpapd(i)=rt;
end
n=1:30;
figure(4);
semilogy(n,ber_psk,'-bd',n,ber_pskhpa,'-rd',n,ber_pskhpapd,'-g*');
legend('理想状况','only HPA','HPA+Predisyortion',3);
title('PSK信噪比与误码率的关系曲线');
grid;
%%%%%%%%%%%%%%%%%%%%% 16qam信号处理模块 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x1=(fix(4*rand(1,N))*2-3)/3*R*beta;
x2=(fix(4*rand(1,N))*2-3)/3*R*beta;
x_qam=x1+v*x2;
d=R*beta*2/3;
figure(5);
plot(real(x_qam),imag(x_qam),'.');title('16QAM信号星座图');grid;
for i=1:30
x_qamnoisy=awgn(x_qam,i,'measured'); % 加入噪声
xi=real(x_qamnoisy);
xq=imag(x_qamnoisy);
for n=1:N
if xi(n)<=d&xi(n)>0
if xq(n)<=d&xq(n)>0
x_deqam(n)=d/2+v*d/2;
elseif xq(n)>d
x_deqam(n)=d/2+v*d*3/2;
elseif xq(n)>-d&xq(n)<=0
x_deqam(n)=d/2-v*d/2;
else x_deqam(n)=d/2-v*d*3/2;
end
elseif xi(n)>d
if xq(n)<=d&xq(n)>0
x_deqam(n)=3*d/2+v*d/2;
elseif xq(n)>d
x_deqam(n)=3*d/2+v*d*3/2;
elseif xq(n)>-d&xq(n)<=0
x_deqam(n)=3*d/2-v*d/2;
else x_deqam(n)=3*d/2-v*d*3/2;
end
elseif xi(n)<=0&xi(n)>-d
if xq(n)<=d&xq(n)>0
x_deqam(n)=-d/2+v*d/2;
elseif xq(n)>d
x_deqam(n)=-d/2+v*d*3/2;
elseif xq(n)>-d&xq(n)<=0
x_deqam(n)=-d/2-v*d/2;
else x_deqam(n)=-d/2-v*d*3/2;
end
else
if xq(n)<=d&xq(n)>0
x_deqam(n)=-3*d/2+v*d/2;
elseif xq(n)>d
x_deqam(n)=-3*d/2+v*d*3/2;
elseif xq(n)>-d&xq(n)<=0
x_deqam(n)=-3*d/2-v*d/2;
else x_deqam(n)=-3*d/2-v*d*3/2;
end
end
end
[num,rt]=symerr(x_qam,x_deqam);
ber_qam(i)=rt;
%%%%%%%%%%% 通过放大器
for n=1:N
x_qamhpa(n)=saleh(x_qamnoisy(n))/ratio;
end
xi=real(x_qamhpa);
xq=imag(x_qamhpa);
for n=1:N
if xi(n)<=d&xi(n)>0
if xq(n)<=d&xq(n)>0
x_deqam(n)=d/2+v*d/2;
elseif xq(n)>d
x_deqam(n)=d/2+v*d*3/2;
elseif xq(n)>-d&xq(n)<=0
x_deqam(n)=d/2-v*d/2;
else x_deqam(n)=d/2-v*d*3/2;
end
elseif xi(n)>d
if xq(n)<=d&xq(n)>0
x_deqam(n)=3*d/2+v*d/2;
elseif xq(n)>d
x_deqam(n)=3*d/2+v*d*3/2;
elseif xq(n)>-d&xq(n)<=0
x_deqam(n)=3*d/2-v*d/2;
else x_deqam(n)=3*d/2-v*d*3/2;
end
elseif xi(n)<=0&xi(n)>-d
if xq(n)<=d&xq(n)>0
x_deqam(n)=-d/2+v*d/2;
elseif xq(n)>d
x_deqam(n)=-d/2+v*d*3/2;
elseif xq(n)>-d&xq(n)<=0
x_deqam(n)=-d/2-v*d/2;
else x_deqam(n)=-d/2-v*d*3/2;
end
else
if xq(n)<=d&xq(n)>0
x_deqam(n)=-3*d/2+v*d/2;
elseif xq(n)>d
x_deqam(n)=-3*d/2+v*d*3/2;
elseif xq(n)>-d&xq(n)<=0
x_deqam(n)=-3*d/2-v*d/2;
else x_deqam(n)=-3*d/2-v*d*3/2;
end
end
end
[num,rt]=symerr(x_qam,x_deqam);
ber_qamhpa(i)=rt;
%%%%%%%% 通过预失真器
A=[zeros(2,N);ones(1,N);zeros(5,N)];
T=[0.2,0,0,0,0,0,0,0;
0,0.2,0,0,0,0,0,0;
0,0,0.2,0,0,0,0,0;
0,0,0,0.2,0,0,0,0;
0,0,0,0,0.2,0,0,0;
0,0,0,0,0,0.2,0,0;
0,0,0,0,0,0,0.2,0;
0,0,0,0,0,0,0,0.2];
l1=0.6;l2=1;
w=x_qamnoisy;
y=x_qamnoisy;
y1=x_qamnoisy;
z=x_qamnoisy;
for n=3:N
Q(n,:)=[-y(n-1),-y(n-2),w(n),abs(w(n))^2*w(n),abs(w(n))^4*w(n),abs(w(n))^6*w(n),abs(w(n))^8*w(n),abs(w(n))^10*w(n)];
y(n)=Q(n,:)*A(:,n-1);
z(n)=saleh(y(n));
Q1(n,:)=[-y1(n-1),-y1(n-2),z(n),abs(z(n))^2*z(n),abs(z(n))^4*z(n),abs(z(n))^6*z(n),abs(z(n))^8*z(n),abs(z(n))^10*z(n)];
y1(n)=Q1(n,:)*A(:,n-1);
e(n)=(y(n)-y1(n))/(1+Q1(n,:)*T*Q1(n,:)');
A(:,n)=A(:,n-1)+T*Q1(n,:)'*e(n);
T=1/l1*(T-l2*T*Q1(n,:)'*Q1(n,:)*T/(l1+l2*Q1(n,:)*T*Q1(n,:)'));
end
xi=real(z);
xq=imag(z);
for n=1:N
if xi(n)<=d&xi(n)>0
if xq(n)<=d&xq(n)>0
x_deqam(n)=d/2+v*d/2;
elseif xq(n)>d
x_deqam(n)=d/2+v*d*3/2;
elseif xq(n)>-d&xq(n)<=0
x_deqam(n)=d/2-v*d/2;
else x_deqam(n)=d/2-v*d*3/2;
end
elseif xi(n)>d
if xq(n)<=d&xq(n)>0
x_deqam(n)=3*d/2+v*d/2;
elseif xq(n)>d
x_deqam(n)=3*d/2+v*d*3/2;
elseif xq(n)>-d&xq(n)<=0
x_deqam(n)=3*d/2-v*d/2;
else x_deqam(n)=3*d/2-v*d*3/2;
end
elseif xi(n)<=0&xi(n)>-d
if xq(n)<=d&xq(n)>0
x_deqam(n)=-d/2+v*d/2;
elseif xq(n)>d
x_deqam(n)=-d/2+v*d*3/2;
elseif xq(n)>-d&xq(n)<=0
x_deqam(n)=-d/2-v*d/2;
else x_deqam(n)=-d/2-v*d*3/2;
end
else
if xq(n)<=d&xq(n)>0
x_deqam(n)=-3*d/2+v*d/2;
elseif xq(n)>d
x_deqam(n)=-3*d/2+v*d*3/2;
elseif xq(n)>-d&xq(n)<=0
x_deqam(n)=-3*d/2-v*d/2;
else x_deqam(n)=-3*d/2-v*d*3/2;
end
end
end
[num,rt]=symerr(x_qam(30:N),x_deqam(30:N));
ber_qamhpapd(i)=rt;
end
n=1:30;
figure(6);
semilogy(n,ber_qam,'-bd',n,ber_qamhpa,'-rd',n,ber_qamhpapd,'-g*');
legend('理想状况','only HPA','HPA+Predisyortion',3);
title('QAM信噪比与误码率的关系曲线');
grid;
n=1:30;
figure(7);
semilogy(n,ber_apkhpa,'-bd',n,ber_pskhpa,'-ro',n,ber_qamhpa,'-g*');
legend('16APK信号','16PSK信号','16QAM信号',3);
title('信噪比与误码率关系曲线(放大器对信号影响)');
xlabel('SNR(dB)');
ylabel('误码率');
grid;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -