📄 qpsk.m
字号:
clear all;
clc;
num=100; %原始信息序列长度
samp=100; %采样点数
delta_T=1/samp; %采样间隔
N=samp*num; %总的采样点数
msg_orig=randint(1,num); %序列生成
data1=2*msg_orig-1; %单/双极性变换
ry_I=raylrnd(0.8,1,num/2); %以0.8为参数的瑞利衰落
ry_Q=raylrnd(0.8,1,num/2); %以0.8为参数的瑞利衰落
for i=1:num
data1_orig(samp*(i-1)+1:samp*i)=data1(i);%对data1进行采样
end
for i=1:2000
data(i)=data1_orig(i);
end
%--------------------------------------------画信源及频谱图-----------------------
figure(1);
subplot(2,1,2); %在一个窗口里画两个图
pwelch(data1_orig,[],[],[],10); %画信源的频谱图
subplot(2,1,1);
x1=0+0.01:0.01:100;
plot(x1,data1_orig); %画信源的图型
axis([0 10 -1.2 1.2]); %画信源图时规定两坐标轴的范围
%----------------------------------将信息源分成两路 ,并对第I路信号抽样-------------------------
data11=zeros(1,samp*num/2);
for i1=1:num/2
data11(samp*(i1-1)+1:samp*i1)=data1(2*i1-1);%I路信号是信源的第奇数个码元,并对它抽样
end
%----------------------------------将信息源分成两路,并对第Q路信号抽样-------------------------
data12=zeros(1,samp*num/2);
for i2=1:num/2
data12(samp*(i2-1)+1:samp*i2)=data1(2*i2);%
end
%------------------------------------------对余弦载波抽样------------------------------
for j1=1:samp*num/2
a1(j1)=cos((j1-1)*2*pi/100); %每个余弦波每个周期采50个点
end
%------------------------------------------对正弦载波抽样------------------------------
for j2=1:samp*num/2
a2(j2)=sin((j2-1)*2*pi/100);
end
%---------------------------------------------调制-------------------------------------
data21=data11.*a1; %I路用余弦调制
data22=data12.*a2; %Q路用正弦调制
%--------------------------------------为两路信号加上瑞利衰落--------------------------
for i=1:num/2
data21_ray(i)=data21(i)*ry_I(i);
data22_ray(i)=data22(i)*ry_Q(i);
end
data2_modul=data21+data22; %调制后总的信号
data2_ray=data21_ray+data22_ray; %加瑞利衰落后总的信号
for i=1:1000
data2_modul_t(i)=data2_modul(i);
end
%-----------------------------------------画调制后的信号波形和频谱图---------------
figure(2);
subplot(2,1,2);
pwelch(data2_modul,[],[],[],10);
subplot(2,1,1);
x2=0+0.01:0.01:10;
plot(x2,data2_modul_t);
data3=awgn(data2_modul,1,'measured'); %经过AWGN信道
for i=1:1000
data3_t(i)=data3(i);
end
%-----------------------------------画经过高斯信道后的信号波形和频谱图----------------------
figure(3);
subplot(2,1,2);
pwelch(data3,[],[],[],10);
subplot(2,1,1);
plot(x2,data3_t);
%------------------------------------------------星座图--------------------------------------------
clear;
N=1000;
s00=[1 0]; s01=[0 -1]; s11=[-1 0]; s10=[0 1]; % 信号映射
SNRindB1=8;
E=1; % 码元能量
snr=10^(SNRindB1/10);
sgma=sqrt(E/snr)/2;
for i=1:N
temp=rand; % 生成取值在0和1之间的服从均匀分布的随机变量
if (temp<0.25), % 概率为1/4的信源符号 "00"
dsource1(i)=0; dsource2(i)=0;
s(i)=complex(s00(1),s00(2));
elseif (temp<0.5), % 概率为1/4的信源符号 "01"
dsource1(i)=0; dsource2(i)=1;
s(i)=complex(s01(1),s01(2));
elseif (temp<0.75), % 概率为1/4的信源符号 "10"
dsource1(i)=1; dsource2(i)=0;
s(i)=complex(s10(1),s10(2));
else % 概率为1/4的信源符号 "11"
dsource1(i)=1; dsource2(i)=1;
s(i)=complex(s11(1),s11(2));
end;
end;
for i=1:N %通过Raleigh信道之前的的星座图
n=sgma*randn(1,2);
if ((dsource1(i)==0) & (dsource2(i)==0)),
r=s00+n;
elseif ((dsource1(i)==0) & (dsource2(i)==1)),
r=s01+n;
elseif ((dsource1(i)==1) & (dsource2(i)==0)),
r=s10+n;
else
r=s11+n;
end;
rr(i)=complex(r(1),r(2));
end;
figure(4);
for i=1:1000
subplot(2,1,1)
plot(rr(i),'b*');
hold on;
end;
subplot(2,1,1)
plot(s,'rd');
title('Before Rayleigh');
grid on;
hold off;
% 通过Raleigh信道之后的的星座图
for i=1:N
m=raylrnd(0.7); % 生成服从Rayleigh分布的随机变量
n=sgma*randn(1,2); % 生成两个服从N(0,sgma)的随机变量
if ((dsource1(i)==0) & (dsource2(i)==0)),
r=m*s00+n;
elseif ((dsource1(i)==0) & (dsource2(i)==1)),
r=m*s01+n;
elseif ((dsource1(i)==1) & (dsource2(i)==0)),
r=m*s10+n;
else
r=m*s11+n;
end;
rr(i)=complex(r(1),r(2));
end;
figure(4);
for i=1:1000
subplot(2,1,2)
plot(rr(i),'b*');
hold on;
end;
subplot(2,1,2)
plot(s,'rd');
title('After Rayleigh');
grid on;
hold off;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -