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即可