通信原理 简易QPSK AB方法的调制解调及星座图的matlab实现

QPSK调制解调方框图如下所示

A方式 框图如下所示:

A方式代码如下所示

clc
clear

Nm = 100;%100个码元
snrdB = 20;%信噪比20dB
Ts = 2;%原始码元间隔
N_sample = 1000;
dt = Ts/N_sample;%采样间隔

Msg = randi(4,1,Nm);
Msg_q = Msg-1;%转换为四进制,为产生的信号
sig_Msg_q = [];
for ik = 1:Nm
    sig_Msg_q = [sig_Msg_q,Msg_q(ik)*ones(1,2*N_sample)];
end
t =0:dt/2:Nm*Ts-dt/2;
figure(1);
plot(t,sig_Msg_q);axis([0,10,-1,4]);%四进制消息码电平
Msg_bin = [];
for ik = 1:Nm
    Msg_bin = [Msg_bin,fix(Msg_q(ik)/2)];
    Msg_bin = [Msg_bin,Msg_q(ik)-2*fix(Msg_q(ik)/2)];
end
Msg_bin_a = [];
Msg_bin_b = [];
for ik = 1:Nm
    Msg_bin_a = [Msg_bin_a,Msg_bin(2*ik-1)];
    Msg_bin_b = [Msg_bin_b,Msg_bin(2*ik)];
end%分成a,b两列
sig_Msg_bin = [];
for ik = 1:Nm
    sig_Msg_bin = [sig_Msg_bin,Msg_bin(2*ik-1)*ones(1,N_sample)];
    sig_Msg_bin = [sig_Msg_bin,Msg_bin(2*ik)*ones(1,N_sample)];
end
figure(2);
plot(t,sig_Msg_bin);axis([0,10,-1,2]);

wavNum = 20;%wavNum单码元三角函数波周期数
Ph = 0:2*wavNum*pi/N_sample:2*pi*wavNum*(Ts-1/N_sample);%Ph为相位
gt11 = cos(Ph.*ones(1, Ts*N_sample)+pi/2);
gt10 = cos(Ph.*ones(1, Ts*N_sample));
gt01 = cos(Ph.*ones(1, Ts*N_sample)+pi);
gt00 = cos(Ph.*ones(1, Ts*N_sample)+pi*3/2);
ph_out_sig= [3/2*pi,pi,0,pi/2];
sc_sig_out = [];
for ik = 1:50
    sc_sig_out =[sc_sig_out,cos(ph_out_sig(Msg(ik)))+i*sin(ph_out_sig(Msg(ik)))];
end
sc_out = sc_sig_out;

sig_out = [];
for ik = 1:Nm
    if Msg_bin_a(ik)==1
        if Msg_bin_b(ik)==1
            sig_out = [sig_out,gt11];
        else
            sig_out = [sig_out,gt10];
        end
    else
        if Msg_bin_b(ik)==1  
            sig_out = [sig_out,gt01];
        else
            sig_out = [sig_out,gt00];
        end
    end
end

figure(3);plot(t,sig_out);axis([0,1,-1.5,1.5]);%总输出波形

sig_channel = awgn(sig_out,snrdB);
figure(4);plot(t,sig_channel);axis([0,1,-1.5,1.5]);%添加噪声之后的信号,噪声单位SNRdB

wp=[wavNum-5 wavNum+5]*2/N_sample;
ws=[wavNum-10 wavNum+10]*2/N_sample;
rp=3;
rs=30;
[N,wn]=cheb2ord(wp,ws,rp,rs);
[b,a]=cheby2(N,rp,wn,'bandpass');%切比雪夫带通滤波
sig_bandpass = filter(b,a,sig_channel);
figure(5);plot(t,sig_bandpass);axis([0,1,-1.5,1.5]);%经过带通滤波器之后的信号

Ph1 = 0:2*wavNum*pi/N_sample:2*pi*wavNum*(Nm*Ts-1/N_sample);
sig_local1 = cos(Ph1.*ones(1, Nm*Ts*N_sample));

sig_local2 = -1*sin(Ph1.*ones(1, Nm*Ts*N_sample));

sig_mul_a = sig_local1.*sig_bandpass;
sig_mul_b = sig_local2.*sig_bandpass;
figure(6);
subplot(2,1,1);plot(t,sig_mul_a);axis([0,0.1,-1.5,1.5]);
subplot(2,1,2);plot(t,sig_mul_b);axis([0,0.1,-1.5,1.5]);

wp=(0.5)*2/N_sample; 
ws=(1.5)*2/N_sample; 
Rp=3;Rs=30; 
[N,wn]=cheb2ord(wp,ws,rp,rs);
[b,a]=cheby2(N,rp,wn,'low');
sig_lp_a = filter(b,a,sig_mul_a);
sig_lp_b = filter(b,a,sig_mul_b);
figure(7);
subplot(2,1,1);plot(t,sig_lp_a);axis([0,1,-1.5,1.5]);
subplot(2,1,2);plot(t,sig_lp_b);axis([0,1,-1.5,1.5]);%切比雪夫低通滤波

t1 = Ts*N_sample/2:Ts*N_sample:2*Nm*N_sample-Ts*N_sample/2;
Msg_out_a = [];
Msg_out_b = [];
lvl_rec_a = [];
lvl_rec_b = [];
for ik = 1:length(t1)
    Msg_out_a = [Msg_out_a,sign(sig_lp_a(t1(ik)))];
    Msg_out_b = [Msg_out_b,sign(sig_lp_b(t1(ik)))];
    lvl_rec_a = [lvl_rec_a,sig_lp_a(t1(ik))];
    lvl_rec_b = [lvl_rec_b,sig_lp_b(t1(ik))];
end
sc_rec = lvl_rec_a+lvl_rec_b*i;
Msg_rec_bin = [];
for ik = 1:Nm
    Msg_rec_bin = [Msg_rec_bin,Msg_out_a(ik)];
    Msg_rec_bin = [Msg_rec_bin,Msg_out_b(ik)];
end
Msg_rec_q = (Msg_out_a+1)/2*2+(Msg_out_b+1)/2;

sig_Msg_rec_bin = [];
sig_Msg_rec_q = [];
for ik = 1:Nm
    sig_Msg_rec_bin = [sig_Msg_rec_bin,Msg_rec_bin(2*ik-1)*ones(1,N_sample)];
    sig_Msg_rec_bin = [sig_Msg_rec_bin,Msg_rec_bin(2*ik)*ones(1,N_sample)];
    sig_Msg_rec_q = [sig_Msg_rec_q,Msg_rec_q(ik)*ones(1,2*N_sample)];
end
figure(8);
subplot(211);plot(t,sig_Msg_rec_bin);axis([0,10,-2,2]);
subplot(212);plot(t,sig_Msg_rec_q);axis([0,10,-1,4]);
       
scatterplot(sc_out);
scatterplot(sc_rec);

count = 0;
for i = 1:Nm
    if Msg_q(i) == Msg_rec_q(i)
        count = count + 1;
    end
end
Pe = (Nm-count)/Nm;

运行结果如下所示

 

 

B方式框图如下所示:

B方式代码如下所示:

clc
clear

Nm = 1000;
snrdB = -10;%信噪比20dB
Ts = 2;%原始码元间隔
N_sample = 1000;
dt = Ts/N_sample;%采样间隔
Msg = randi(4,1,Nm);
Msg_q = Msg-1;%转换为四进制,为产生的信号
sig_Msg_q = [];
for ik = 1:Nm
    sig_Msg_q = [sig_Msg_q,Msg_q(ik)*ones(1,2*N_sample)];
end
t =0:dt/2:Nm*Ts-dt/2;
figure(1);
plot(t,sig_Msg_q);axis([0,10,-1,4]);%四进制消息码电平
Msg_bin = [];
for ik = 1:Nm
    Msg_bin = [Msg_bin,fix(Msg_q(ik)/2)];
    Msg_bin = [Msg_bin,Msg_q(ik)-2*fix(Msg_q(ik)/2)];
end
Msg_bin_a = [];
Msg_bin_b = [];
for ik = 1:Nm
    Msg_bin_a = [Msg_bin_a,Msg_bin(2*ik-1)];
    Msg_bin_b = [Msg_bin_b,Msg_bin(2*ik)];
end%分成a,b两列
sig_Msg_bin = [];
sig_Msg_bin_a = [];
sig_Msg_bin_b = [];
for ik = 1:Nm
    sig_Msg_bin = [sig_Msg_bin,Msg_bin(2*ik-1)*ones(1,N_sample)];
    sig_Msg_bin = [sig_Msg_bin,Msg_bin(2*ik)*ones(1,N_sample)];
    sig_Msg_bin_a = [sig_Msg_bin_a,Msg_bin_a(ik)*ones(1,2*N_sample)];
    sig_Msg_bin_b = [sig_Msg_bin_b,Msg_bin_b(ik)*ones(1,2*N_sample)];
end
figure(2);
subplot(311);plot(t,sig_Msg_bin);axis([0,10,-1,2]);title('二进制码');
subplot(312);plot(t,sig_Msg_bin_a);axis([0,10,-1,2]);title('二进制A通道码');
subplot(313);plot(t,sig_Msg_bin_b);axis([0,10,-1,2]);title('二进制B通道码');
    
wavNum = 20;%wavNum单码元三角函数波周期数
Ph = 0:2*wavNum*pi/N_sample:2*pi*wavNum*(Ts-1/N_sample);%Ph为相位
gta1 = cos(Ph.*ones(1, Ts*N_sample)); %a通道消息码为1
gta0 = -1*cos(Ph.*ones(1, Ts*N_sample));%a通道消息码为0
gtb1 = -1*sin(Ph.*ones(1, Ts*N_sample)); %b通道消息码为1
gtb0 = sin(Ph.*ones(1, Ts*N_sample));%b通道消息码为0
sc_out = (Msg_bin_a*2-1)+(Msg_bin_b*2-1)*i;

sig_a = [];
sig_b = [];
for ik = 1:Nm
    if Msg_bin_a(ik) == 1
        sig_a = [sig_a,gta1];
    else
        sig_a = [sig_a,gta0];
    end
    if Msg_bin_b(ik) == 1
        sig_b = [sig_b,gtb1];
    else
        sig_b = [sig_b,gtb0];
    end
end
sig_out = sig_a+sig_b;
figure(3);
subplot(311);plot(t,sig_out);axis([0,10,-1,2]);
subplot(312);plot(t,sig_a);axis([0,10,-1,2]);
subplot(313);plot(t,sig_b);axis([0,10,-1,2]);

sig_channel = pesnrf(sig_out,snrdB);

wp=[wavNum-0.5 wavNum+0.5]*2/N_sample;
ws=[wavNum-1.5 wavNum+1.5]*2/N_sample;
rp=3;
rs=30;
[N,wn]=cheb2ord(wp,ws,rp,rs);
[b,a]=cheby2(N,rp,wn,'bandpass');%切比雪夫带通滤波
sig_bandpass = filter(b,a,sig_channel);
figure(4);
subplot(311);plot(t,sig_out);axis([0,10,-1,2]);title('输出');
subplot(312);plot(t,sig_channel);axis([0,10,-1,2]);title('信道输出');
subplot(313);plot(t,sig_bandpass);axis([0,10,-1,2]);title('带通滤波器输出');

Ph1 = 0:2*wavNum*pi/N_sample:2*pi*wavNum*(Nm*Ts-1/N_sample);
sig_local1 = cos(Ph1.*ones(1, Nm*Ts*N_sample));
sig_local2 = -1*sin(Ph1.*ones(1, Nm*Ts*N_sample));

sig_mul_a = sig_local1.*sig_bandpass;
sig_mul_b = sig_local2.*sig_bandpass;
figure(5);
subplot(211);plot(t,sig_mul_a);axis([0,10,-2,2]);title('A通道相乘信号');
subplot(212);plot(t,sig_mul_b);axis([0,10,-2,2]);title('B通道相乘信号');

wp=(0.25)*2/N_sample; 
ws=(1)*2/N_sample; 
Rp=3;Rs=30; 
[N,wn]=cheb2ord(wp,ws,rp,rs);
[b,a]=cheby2(N,rp,wn,'low');
sig_lp_a = filter(b,a,sig_mul_a);
sig_lp_b = filter(b,a,sig_mul_b);
figure(6);
subplot(211);plot(t,sig_lp_a);axis([0,10,-2,2]);title('A通道低通滤波输出信号');
subplot(212);plot(t,sig_lp_b);axis([0,10,-2,2]);title('B通道低通滤波输出信号');


t1 = Ts*N_sample/2:Ts*N_sample:2*Nm*N_sample-Ts*N_sample/2;
Msg_out_a = [];
Msg_out_b = [];
lvl_rec_a = [];
lvl_rec_b = [];
for ik = 1:length(t1)
    Msg_out_a = [Msg_out_a,sign(sig_lp_a(t1(ik)))];
    Msg_out_b = [Msg_out_b,sign(sig_lp_b(t1(ik)))];
    lvl_rec_a = [lvl_rec_a,sig_lp_a(t1(ik))];
    lvl_rec_b = [lvl_rec_b,sig_lp_b(t1(ik))];
end
sc_rec = lvl_rec_a+lvl_rec_b*i;
Msg_rec_bin = [];
for ik = 1:Nm
    Msg_rec_bin = [Msg_rec_bin,Msg_out_a(ik)];
    Msg_rec_bin = [Msg_rec_bin,Msg_out_b(ik)];
end
Msg_rec_q = (Msg_out_a+1)/2*2+(Msg_out_b+1)/2;

sig_Msg_out_a = [];
sig_Msg_out_b = [];
sig_Msg_rec_bin = [];
sig_Msg_rec_q = [];
for ik = 1:Nm
    sig_Msg_out_a = [sig_Msg_out_a,Msg_out_a(ik)*ones(1,2*N_sample)];
    sig_Msg_out_b = [sig_Msg_out_b,Msg_out_b(ik)*ones(1,2*N_sample)];
    sig_Msg_rec_bin = [sig_Msg_rec_bin,Msg_rec_bin(2*ik-1)*ones(1,N_sample)];
    sig_Msg_rec_bin = [sig_Msg_rec_bin,Msg_rec_bin(2*ik)*ones(1,N_sample)];
    sig_Msg_rec_q = [sig_Msg_rec_q,Msg_rec_q(ik)*ones(1,2*N_sample)];
end
figure(7);
subplot(411);plot(t,sig_Msg_out_a);axis([0,10,-2,2]);title('A通道输出码元');
subplot(412);plot(t,sig_Msg_out_b);axis([0,10,-2,2]);title('B通道输出码元');
subplot(413);plot(t,sig_Msg_rec_bin);axis([0,10,-2,2]);title('接收到的二进制码元');
subplot(414);plot(t,sig_Msg_rec_q);axis([0,10,-1,4]);;title('接收到的四进制码元');
       
scatterplot(sc_out);title('理论星座图');
scatterplot(sc_rec);title('实际星座图');

count = 0;
for i = 1:Nm
    if Msg_q(i) == Msg_rec_q(i)
        count = count + 1;
    end
end
Pe = (Nm-count)/Nm;

运行结果如下所示:

 

 

 

出错时把pesnrf换成awgn即可

  • 8
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值