⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 signalanalyze.m

📁 本程序主要是对三种调制方式APSK PSK QAM进行了性能 比较
💻 M
字号:
clear all;
close all;
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 系统参数设置 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
N=10240;
M=16;
K=4;
v=sqrt(-1);
alpha=2.75;        %16APSK性能最优时内外半径比,r1为内半径
P=12;              % 信号功率设定
x=randint(1,N,M)+1;  %产生一组随机数
%%%%%%%%%%%%%%%%%%%%%%%%%%  16APSK信源产生模块 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
r1=sqrt(P/(4+12*alpha*alpha));
r2=r1*alpha;
s_apsk=[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))].';
for n=1:N
    x_apsk(n)=s_apsk(x(n));
end
%%%%%%%%%%%%%%%%%%%%%  16QAM信源产生模块  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
L=sqrt(P*9/160);
d=L*2/3;
d0=d/2;
s_qam=[d0+v*d0;
       d0+v*3*d0;
       d0-v*d0;
       d0-v*3*d0;
       3*d0+v*d0;
       3*d0+v*3*d0;
       3*d0-v*d0;
       3*d0-v*3*d0;
       -d0+v*d0;
       -d0+v*3*d0;
       -d0-v*d0;
       -d0-v*3*d0;
       -3*d0+v*d0;
       -3*d0+v*3*d0;
       -3*d0-v*d0;
       -3*d0-v*3*d0].';

for n=1:N
    x_qam(n)=s_qam(x(n));
end



%%%%%%%%%%%%%%%%%%%%% 16PSK信号产生模块  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

R=sqrt(P/16);
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

%%%%%%%%%%%%%%  IFFT处理模块  %%%%%%%%%%%%%%%%%%%%%
y_apsk=reshape(x_apsk,K,N/K);
y_qam=reshape(x_qam,K,N/K);
y_psk=reshape(x_psk,K,N/K);
for n=1:N/K
    yy_apsk(:,n)=ifft(y_apsk(:,n),K);
    yy_qam(:,n)=ifft(y_qam(:,n),K);
    yy_psk(:,n)=ifft(y_psk(:,n),K);
end
z_apsk=reshape(yy_apsk,1,N);
z_qam=reshape(yy_qam,1,N);
z_psk=reshape(yy_psk,1,N);

%%%%%%%%%%%%%%%%%%  送放大器 %%%%%%%%%%%%%%%%%%%%%%
% for n=1:N
%     HPA_apsk(n)=saleh(z_apsk(n));
%     HPA_qam(n)=saleh(z_qam(n));
%     HPA_psk(n)=saleh(z_psk(n));
% end


%%%%%%%%%%%%%%%  经过预失真器再放大 %%%%%%%%%%%%%%%%%%


l1=0.6;
l2=1;
A=[zeros(2,N);ones(1,N);zeros(5,N)];
yi=z_apsk;
y=z_apsk;
y1=z_apsk;
z3=zeros(1,N);
T=[0.6,0,0.3,0,0,0,0,0;
   0,0.1,0,0,0,0,0,0;
   0.3,0,0.6,0,0,0,0,0;
   0,0,0,0.1,0,0,0,0;
   0,0,0,0,0.1,0,0,0;
   0,0,0,0,0,0.6,0,0;
   0,0,0,0,0,0,0.1,0;
   0,0,0,0,0,0,0,0.1];
for n=3:N
 Q(n,:)=[-y(n-1),-y(n-2),yi(n),abs(yi(n))^2*yi(n),abs(yi(n))^4*yi(n),abs(yi(n))^6*yi(n),abs(yi(n))^8*yi(n),abs(yi(n))^10*yi(n)];
 y(n)=Q(n,:)*A(:,n-1);
 z3(n)=saleh(y(n));
 Q1(n,:)=[-y1(n-1),-y1(n-2),z3(n),abs(z3(n))^2*z3(n),abs(z3(n))^4*z3(n),abs(z3(n))^6*z3(n),abs(z3(n))^8*z3(n),abs(z3(n))^10*z3(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,:)'));
  E(n)=yi(n)-z3(n); 
  E1(n)=y(n)-y1(n); 
end

HPA_apsk=z3;

l1=0.6;
l2=1;
A=[zeros(2,N);ones(1,N);zeros(5,N)];
yi=z_qam;
y=z_qam;
y1=z_qam;
z3=zeros(1,N);
T=[0.6,0,0.3,0,0,0,0,0;
   0,0.1,0,0,0,0,0,0;
   0.3,0,0.6,0,0,0,0,0;
   0,0,0,0.1,0,0,0,0;
   0,0,0,0,0.1,0,0,0;
   0,0,0,0,0,0.6,0,0;
   0,0,0,0,0,0,0.1,0;
   0,0,0,0,0,0,0,0.1];
for n=3:N
 Q(n,:)=[-y(n-1),-y(n-2),yi(n),abs(yi(n))^2*yi(n),abs(yi(n))^4*yi(n),abs(yi(n))^6*yi(n),abs(yi(n))^8*yi(n),abs(yi(n))^10*yi(n)];
 y(n)=Q(n,:)*A(:,n-1);
 z3(n)=saleh(y(n));
 Q1(n,:)=[-y1(n-1),-y1(n-2),z3(n),abs(z3(n))^2*z3(n),abs(z3(n))^4*z3(n),abs(z3(n))^6*z3(n),abs(z3(n))^8*z3(n),abs(z3(n))^10*z3(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,:)'));
  E(n)=yi(n)-z3(n); 
  E1(n)=y(n)-y1(n);
end

HPA_qam=z3;

l1=0.6;
l2=1;
A=[zeros(2,N);ones(1,N);zeros(5,N)];
yi=z_psk;
y=z_psk;
y1=z_psk;
z3=zeros(1,N);
T=[0.6,0,0.3,0,0,0,0,0;
   0,0.1,0,0,0,0,0,0;
   0.3,0,0.6,0,0,0,0,0;
   0,0,0,0.1,0,0,0,0;
   0,0,0,0,0.1,0,0,0;
   0,0,0,0,0,0.6,0,0;
   0,0,0,0,0,0,0.1,0;
   0,0,0,0,0,0,0,0.1];
for n=3:N
 Q(n,:)=[-y(n-1),-y(n-2),yi(n),abs(yi(n))^2*yi(n),abs(yi(n))^4*yi(n),abs(yi(n))^6*yi(n),abs(yi(n))^8*yi(n),abs(yi(n))^10*yi(n)];
 y(n)=Q(n,:)*A(:,n-1);
 z3(n)=saleh(y(n));
 Q1(n,:)=[-y1(n-1),-y1(n-2),z3(n),abs(z3(n))^2*z3(n),abs(z3(n))^4*z3(n),abs(z3(n))^6*z3(n),abs(z3(n))^8*z3(n),abs(z3(n))^10*z3(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,:)'));
  E(n)=yi(n)-z3(n); 
  E1(n)=y(n)-y1(n); 
end


HPA_psk=z3;


%%%%%%%%%%%      植入噪声          %%%%%%%%%%%%%%%%%%
% HPA_apsk=z_apsk;
% HPA_qam=z_qam;
% HPA_psk=z_psk;
for tt=1:20
HPA_apsk=awgn(HPA_apsk,tt,'measured');
HPA_qam=awgn(HPA_qam,tt,'measured');
HPA_psk=awgn(HPA_psk,tt,'measured');


%%%%%%%%%%%%%%%%%% 解调模块 %%%%%%%%%%%%%%%%%%%%%%%

Dez_apsk=reshape(HPA_apsk,K,N/K);
Dez_qam=reshape(HPA_qam,K,N/K);
Dez_psk=reshape(HPA_psk,K,N/K);

for n=1:N/K
    Deyy_apsk(:,n)=fft(Dez_apsk(:,n),K);
    Deyy_qam(:,n)=fft(Dez_qam(:,n),K);
    Deyy_psk(:,n)=fft(Dez_psk(:,n),K);
end

Dey_apsk=reshape(Deyy_apsk,1,N);
Dey_qam=reshape(Deyy_qam,1,N);
Dey_psk=reshape(Deyy_psk,1,N); 
    
r_apk=abs(Dey_apsk);
q_apk=angle(Dey_apsk);
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_apsk(1);
        elseif q_apk(n)<=pi&q_apk(n)>pi/2
            x_deapk(n)=s_apsk(2);
        elseif q_apk(n)<=-pi/2&q_apk(n)>-pi
            x_deapk(n)=s_apsk(3);
        else x_deapk(n)=s_apsk(4);
        end
    else if q_apk(n)<=pi/6&q_apk(n)>0
            x_deapk(n)=s_apsk(5);
        elseif q_apk(n)<=pi/3&q_apk(n)>pi/6
            x_deapk(n)=s_apsk(6);
        elseif q_apk(n)<=pi/2&q_apk(n)>pi/3
            x_deapk(n)=s_apsk(7);
        elseif q_apk(n)<=2*pi/3&q_apk(n)>pi/2
            x_deapk(n)=s_apsk(8);
        elseif q_apk(n)<=5*pi/6&q_apk(n)>2*pi/3
            x_deapk(n)=s_apsk(9);
        elseif q_apk(n)<=6*pi/6&q_apk(n)>5*pi/6
            x_deapk(n)=s_apsk(10);
        elseif q_apk(n)<=-5*pi/6&q_apk(n)>-pi
            x_deapk(n)=s_apsk(11);
        elseif q_apk(n)<=-2*pi/3&q_apk(n)>-5*pi/6
            x_deapk(n)=s_apsk(12);
        elseif q_apk(n)<=-pi/2&q_apk(n)>-2*pi/3
            x_deapk(n)=s_apsk(13);
        elseif q_apk(n)<=-pi/3&q_apk(n)>-pi/2
            x_deapk(n)=s_apsk(14);
        elseif q_apk(n)<=-pi/6&q_apk(n)>-pi/3
            x_deapk(n)=s_apsk(15);
        else x_deapk(n)=s_apsk(16);
        end
    end
end
[num,rt]=symerr(x_apsk(200:N),x_deapk(200:N));
ber_apsk(tt)=rt;

    xi=real(Dey_qam);
    xq=imag(Dey_qam);
    for n=1:N
        if xi(n)<=d&xi(n)>0
            if xq(n)<=d&xq(n)>0
                x_deqam(n)=s_qam(1); 
            elseif xq(n)>d
                x_deqam(n)=s_qam(2); 
            elseif xq(n)>-d&xq(n)<=0
                x_deqam(n)=s_qam(3);
            else  x_deqam(n)=s_qam(4);
            end
        elseif xi(n)>d
             if xq(n)<=d&xq(n)>0
                x_deqam(n)=s_qam(5);
            elseif xq(n)>d
                x_deqam(n)=s_qam(6); 
            elseif xq(n)>-d&xq(n)<=0
                x_deqam(n)=s_qam(7);
            else  x_deqam(n)=s_qam(8);
            end
        elseif xi(n)<=0&xi(n)>-d
             if xq(n)<=d&xq(n)>0
                x_deqam(n)=s_qam(9);
            elseif xq(n)>d
                x_deqam(n)=s_qam(10);
            elseif xq(n)>-d&xq(n)<=0
                x_deqam(n)=s_qam(11);
            else  x_deqam(n)=s_qam(12);
            end
        else 
            if xq(n)<=d&xq(n)>0
                x_deqam(n)=s_qam(13);
            elseif xq(n)>d
                x_deqam(n)=s_qam(14); 
            elseif xq(n)>-d&xq(n)<=0
                x_deqam(n)=s_qam(15);
            else  x_deqam(n)=s_qam(16);
            end
        end
    end
    [num,rt]=symerr(x_qam(200:N),x_deqam(200:N));
    ber_qam(tt)=rt;


    r_psk=abs(Dey_psk);
    q_psk=angle(Dey_psk);
    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(200:N),x_depsk(200:N));
    ber_psk(tt)=rt;
end
t=1:20;
semilogy(t,ber_apsk,'-bd',t,ber_psk,'-ro',t,ber_qam,'-b*');
legend('16APK信号','16PSK信号','16QAM信号',3); 





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -