📄 apkpskqam.m
字号:
clc;
clear all;
close all;
%%%%%%%%%%%%%%%%%% 系统参数设置 %%%%%%%%%%%%%%%%%%%%%%%%%%%%
N=10000;
M=16;
R=0.45; %16PSK信号幅度,其他两个信号均以此为参考,以保证输入信号功率相同
alpha=1.13; %16apsk信号外围幅度比例(与psk信号对比)
beta=0.95; %16qam信号外围实部幅度比例
v=sqrt(-1);
ratio=1.7; % TWTA放大比例 认为在解调时有必要处理一下
%%%%%%%%%%%%%%%%%%%%%%% 16_APSK信号处理模块 %%%%%%%%%%%%%%%%%%%%%%
%给出信号源
r1=R*alpha/3;
r2=R*alpha;
s0=[r1*exp(v*(2*pi*1/4-pi/4));
r1*exp(v*(2*pi*2/4-pi/4));
r1*exp(v*(2*pi*3/4-pi/4));
r1*exp(v*(2*pi*4/4-pi/4));
r2*exp(v*(2*pi*1/12-pi/12));
r2*exp(v*(2*pi*2/12-pi/12));
r2*exp(v*(2*pi*3/12-pi/12));
r2*exp(v*(2*pi*4/12-pi/12));
r2*exp(v*(2*pi*5/12-pi/12));
r2*exp(v*(2*pi*6/12-pi/12));
r2*exp(v*(2*pi*7/12-pi/12));
r2*exp(v*(2*pi*8/12-pi/12));
r2*exp(v*(2*pi*9/12-pi/12));
r2*exp(v*(2*pi*10/12-pi/12));
r2*exp(v*(2*pi*11/12-pi/12));
r2*exp(v*(2*pi*12/12-pi/12))];
s=s0.';
x=randint(1,N,M)+1;
for n=1:N
x_apk(n)=s(x(n));
end
figure(1);
plot(real(x_apk),imag(x_apk),'.');title('16APK信号星座图');grid;
for i=1:30
%加入噪声
x_apknoisy=awgn(x_apk,i,'measured');
r_apk=abs(x_apknoisy);
q_apk=angle(x_apknoisy);
for n=1:N
if r_apk(n)<=(r1+r2)/2
if q_apk(n)<=pi/2&q_apk(n)>0
x_deapk(n)=s(1);
elseif q_apk(n)<=pi&q_apk(n)>pi/2
x_deapk(n)=s(2);
elseif q_apk(n)<=-pi/2&q_apk(n)>-pi
x_deapk(n)=s(3);
else x_deapk(n)=s(4);
end
else if q_apk(n)<=pi/6&q_apk(n)>0
x_deapk(n)=s(5);
elseif q_apk(n)<=pi/3&q_apk(n)>pi/6
x_deapk(n)=s(6);
elseif q_apk(n)<=pi/2&q_apk(n)>pi/3
x_deapk(n)=s(7);
elseif q_apk(n)<=2*pi/3&q_apk(n)>pi/2
x_deapk(n)=s(8);
elseif q_apk(n)<=5*pi/6&q_apk(n)>2*pi/3
x_deapk(n)=s(9);
elseif q_apk(n)<=6*pi/6&q_apk(n)>5*pi/6
x_deapk(n)=s(10);
elseif q_apk(n)<=-5*pi/6&q_apk(n)>-pi
x_deapk(n)=s(11);
elseif q_apk(n)<=-2*pi/3&q_apk(n)>-5*pi/6
x_deapk(n)=s(12);
elseif q_apk(n)<=-pi/2&q_apk(n)>-2*pi/3
x_deapk(n)=s(13);
elseif q_apk(n)<=-pi/3&q_apk(n)>-pi/2
x_deapk(n)=s(14);
elseif q_apk(n)<=-pi/6&q_apk(n)>-pi/3
x_deapk(n)=s(15);
else x_deapk(n)=s(16);
end
end
end
[num,rt]=symerr(x_apk,x_deapk);
ber_apk(i)=rt;
% figure(2);
% plot(real(x_apknoisy),imag(x_apknoisy),'.');
%经过放大器
for n=1:N
x_apk_hpa(n)=saleh(x_apknoisy(n))/ratio;
end
% figure(3);
% plot(real(x_apk_hpa),imag(x_apk_hpa),'.');
%解调过程
r_apk=abs(x_apk_hpa);
q_apk=angle(x_apk_hpa);
for n=1:N
if r_apk(n)<(r1+r2)/2
if q_apk(n)<=pi/2&q_apk(n)>0
x_deapk(n)=s(1);
elseif q_apk(n)<=pi&q_apk(n)>pi/2
x_deapk(n)=s(2);
elseif q_apk(n)<=-pi/2&q_apk(n)>-pi
x_deapk(n)=s(3);
else x_deapk(n)=s(4);
end
else if q_apk(n)<=pi/6&q_apk(n)>0
x_deapk(n)=s(5);
elseif q_apk(n)<=pi/3&q_apk(n)>pi/6
x_deapk(n)=s(6);
elseif q_apk(n)<=pi/2&q_apk(n)>pi/3
x_deapk(n)=s(7);
elseif q_apk(n)<=2*pi/3&q_apk(n)>pi/2
x_deapk(n)=s(8);
elseif q_apk(n)<=5*pi/6&q_apk(n)>2*pi/3
x_deapk(n)=s(9);
elseif q_apk(n)<=6*pi/6&q_apk(n)>5*pi/6
x_deapk(n)=s(10);
elseif q_apk(n)<=-5*pi/6&q_apk(n)>-pi
x_deapk(n)=s(11);
elseif q_apk(n)<=-2*pi/3&q_apk(n)>-5*pi/6
x_deapk(n)=s(12);
elseif q_apk(n)<=-pi/2&q_apk(n)>-2*pi/3
x_deapk(n)=s(13);
elseif q_apk(n)<=-pi/3&q_apk(n)>-pi/2
x_deapk(n)=s(14);
elseif q_apk(n)<=-pi/6&q_apk(n)>-pi/3
x_deapk(n)=s(15);
else x_deapk(n)=s(16);
end
end
end
[num,rt]=symerr(x_apk,x_deapk);
ber_apkhpa(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_apknoisy;
y=x_apknoisy;
y1=x_apknoisy;
z=x_apknoisy;
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
r_apk=abs(z);
q_apk=angle(z);
for n=1:N
if r_apk(n)<=(r1+r2)/2
if q_apk(n)<=pi/2&q_apk(n)>0
x_deapk(n)=s(1);
elseif q_apk(n)<=pi&q_apk(n)>pi/2
x_deapk(n)=s(2);
elseif q_apk(n)<=-pi/2&q_apk(n)>-pi
x_deapk(n)=s(3);
else x_deapk(n)=s(4);
end
else if q_apk(n)<=pi/6&q_apk(n)>0
x_deapk(n)=s(5);
elseif q_apk(n)<=pi/3&q_apk(n)>pi/6
x_deapk(n)=s(6);
elseif q_apk(n)<=pi/2&q_apk(n)>pi/3
x_deapk(n)=s(7);
elseif q_apk(n)<=2*pi/3&q_apk(n)>pi/2
x_deapk(n)=s(8);
elseif q_apk(n)<=5*pi/6&q_apk(n)>2*pi/3
x_deapk(n)=s(9);
elseif q_apk(n)<=6*pi/6&q_apk(n)>5*pi/6
x_deapk(n)=s(10);
elseif q_apk(n)<=-5*pi/6&q_apk(n)>-pi
x_deapk(n)=s(11);
elseif q_apk(n)<=-2*pi/3&q_apk(n)>-5*pi/6
x_deapk(n)=s(12);
elseif q_apk(n)<=-pi/2&q_apk(n)>-2*pi/3
x_deapk(n)=s(13);
elseif q_apk(n)<=-pi/3&q_apk(n)>-pi/2
x_deapk(n)=s(14);
elseif q_apk(n)<=-pi/6&q_apk(n)>-pi/3
x_deapk(n)=s(15);
else x_deapk(n)=s(16);
end
end
end
[num,rt]=symerr(x_apk(50:N),x_deapk(50:N));
ber_apkhpapd(i)=rt;
end
n=1:30;
figure(2);
semilogy(n,ber_apk,'-bd',n,ber_apkhpa,'-rd',n,ber_apkhpapd,'-g*');
legend('理想状况','only HPA','HPA+Predistortion',3);
title('APSK信噪比与误码率的关系曲线');
grid;
%%%%%%%%%%%%%%%%%%%%%%% 16_PSK信号处理模块 %%%%%%%%%%%%%%%%%%%%%%
s_psk=[R*exp(v*2*pi*1/16);
R*exp(v*2*pi*2/16);
R*exp(v*2*pi*3/16);
R*exp(v*2*pi*4/16);
R*exp(v*2*pi*5/16);
R*exp(v*2*pi*6/16);
R*exp(v*2*pi*7/16);
R*exp(v*2*pi*8/16);
R*exp(v*2*pi*9/16);
R*exp(v*2*pi*10/16);
R*exp(v*2*pi*11/16);
R*exp(v*2*pi*12/16);
R*exp(v*2*pi*13/16);
R*exp(v*2*pi*14/16);
R*exp(v*2*pi*15/16);
R*exp(v*2*pi*16/16)].';
for n=1:N
x_psk(n)=s_psk(x(n));
end
figure(3);
plot(real(x_psk),imag(x_psk),'.');title('16PSK信号星座图');grid;
for i=1:30
x_psknoisy=awgn(x_psk,i,'measured');
r_psk=abs(x_psknoisy);
q_psk=angle(x_psknoisy);
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,x_depsk);
ber_psk(i)=rt;
% 通过放大器
for n=1:N
x_psk_hpa(n)=saleh(x_psknoisy(n))/ratio;
end
q_psk=angle(x_psk_hpa);
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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -