clear all;
close all;
%初始化
fc=0.01;%载波频率;
num=20;%码元数
tnum=100;%码元长度
n=1:num;
a=zeros(1,num);
R=randi([0,1],1,num);%随机生成num个0,1
Base=[];
for i=1:1:num
if(R(i)==0)
base=-1*ones(1,tnum);
else
base=1*ones(1,tnum);
end
Base=[Base base];
end
%基带信号
figure(1);
subplot(411);
t=1:1:num*tnum;
plot(t,Base);
axis([1 num*tnum -2 2]);
set(gca,'Xtick',[0:200:2000],'Ytick',-1:1:1);%设置网格线坐标
xlabel('基带信号');
ylabel('幅值');
grid on;
%串并转换
for i=1:1:num
if(R(i)==0)
R(i)=-1;
else
R(i)=1;
end
end
R1=reshape(R,2,num/2);
I=R1(1,:);
Q=R1(2,:);
%与载波相乘
I2=[];
for i=1:1:num/2
if(I(i)==-1)
I1=-1*ones(1,tnum);
else
I1=1*ones(1,tnum);
end
I2=[I2,I1];
end
Q2=[];
for i=1:1:num/2
if(Q(i)==-1)
Q1=-1*ones(1,tnum);
else
Q1=1*ones(1,tnum);
end
Q2=[Q2,Q1];
end
t=1:1:num*tnum/2;
I3=I2.*sin(2*pi*fc*t);
Q3=Q2.*cos(2*pi*fc*t);
Qpsk=I3+Q3;%将两路信号相加得QPSK信号
%for i=1:1:num/2
%Qpsk(i*100)=NaN;%如何绘出不连续的点
%end
figure(1);
subplot(412);
plot(t,Qpsk);
axis([1 1000 -2 2]);
set(gca,'Xtick',[0:100:1000],'Ytick',-1:1:1);%设置网格线坐标
xlabel('QPSK信号');
ylabel('幅值');
grid on;
%加高斯白噪声wgn
SNR=5;%单位为dB
snr=10^(SNR/10);%将分贝化成十进制
Am=0.7;
N0=((Am^2)/2)/snr;%噪声功率单位为W
N0_db=10*log10(N0);%dBw
N=wgn(1,num*tnum/2,N0_db);
qp1=Qpsk+N;
t=1:1:num*tnum/2;%采样频率
subplot(413);
plot(t,qp1);
axis([1 1000 -2 2]);
set(gca,'Xtick',[0:100:1000],'Ytick',-1:1:1);%设置网格线坐标
xlabel('加噪后的QPSK信号');
ylabel('幅值');
grid on;
%[B,A] = BUTTER(N,Wn,'high') ---用来设计高通滤波器
%[B,A] = BUTTER(N,Wn,'low') 用来设计低通滤波器
%[B,A] = BUTTER(N,Wn)--带通滤波器
%比如说你的采样频率Fs=1000Hz,设计一个8阶、通带为100-200Hz的带通滤波器:
%[b,a]=butter(8,[0.2 0.4])=butter(8,[100/(1000/2) 200/(1000/2) ])
%y=filter(B,A,x)
%采样频率为1;
[b,a]=butter(1,[0.002 0.04]);%带通滤波器
qp2=filter(b,a,qp1);
t=1:1:1000;%采样频率
subplot(414);
plot(t,qp2);
axis([1 1000 -2 2]);
set(gca,'Xtick',[0:100:1000],'Ytick',-1:1:1);%设置网格线坐标
xlabel('带通后QPSK信号');
ylabel('幅值');
grid on;
%与载波信号相乘
figure(2);
subplot(321);
t=1:1:num*tnum/2;
I4=qp2.*sin(2*pi*fc*t);
%I4=Qpsk.*sin(2*pi*fc*t);
t=1:1:1000;%采样频率
plot(t,I4);
axis([1 1000 -2 2]);
set(gca,'Xtick',[0:100:1000],'Ytick',-1:1:1);%设置网格线坐标
xlabel('I信号与载波相乘');
ylabel('幅值');
grid on;
subplot(322);
t=1:1:num*tnum/2;
Q4=qp2.*cos(2*pi*fc*t);
plot(t,Q4);
axis([1 1000 -2 2]);
set(gca,'Xtick',[0:100:1000],'Ytick',-1:1:1);%设置网格线坐标
xlabel('Q信号与载波信号相乘');
ylabel('幅值');
grid on;
%低通滤波
[b1,a1] = butter(1,0.01);
I5=filter(b1,a1,I4);
t=1:1:1000;%采样频率
subplot(323);
plot(t,I5);
axis([1 1000 -2 2]);
set(gca,'Xtick',[0:100:1000],'Ytick',-1:1:1);%设置网格线坐标
xlabel('低通滤波后的I信号');
ylabel('幅值');
grid on;
[b2,a2] = butter(1,0.01);
Q5=filter(b2,a2,Q4);
t=1:1:1000;%采样频率
subplot(324);
plot(t,Q5);
axis([1 1000 -2 2]);
set(gca,'Xtick',[0:100:1000],'Ytick',-1:1:1);%设置网格线坐标
xlabel('低通滤波后的Q信号');
ylabel('幅值');
grid on;
%抽样判决
%JT=zeros(1,num*tnum);
i6=[];
I6=[];
for i=1:num/2
if(I5(i*tnum)>0)
I6=ones(1,tnum);
i6=[i6 I6];
else
I6=-1*ones(1,tnum);
i6=[i6 I6];
end
end
t=1:1:1000;%采样频率
%figure(2);
subplot(325);
plot(t,i6);
axis([1 1000 -2 2]);
set(gca,'Xtick',[0:100:1000],'Ytick',-1:1:1);%设置网格线坐标
xlabel('解调后的I信号');
ylabel('幅值');
grid on;
q6=[];
Q6=[];
for i=1:num/2
if(Q5(i*tnum)>0)
Q6=ones(1,tnum);
q6=[q6 Q6];
else
Q6=-1*ones(1,tnum);
q6=[q6 Q6];
end
end
t=1:1:1000;%采样频率
subplot(326);
plot(t,q6);
axis([1 1000 -2 2]);
set(gca,'Xtick',[0:100:1000],'Ytick',-1:1:1);%设置网格线坐标
xlabel('解调后的Q信号');
ylabel('幅值');
grid on;
%解调后的基带信号
JT=[];
for i=1:1:num/2
JT=[JT i6(((i-1)*100+1):i*100)];
JT=[JT q6(((i-1)*100+1):i*100)];
end
t=1:1:2000;%采样频率
figure(3);
subplot(411);
plot(t,JT);
axis([1 2000 -2 2]);
set(gca,'Xtick',[0:200:2000],'Ytick',-1:1:1);%设置网格线坐标
xlabel('解调后的基带信号');
ylabel('幅值');
grid on;