clc
clear all
%%%%%%%%%%%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
T=1; % 符号时间
SNR=0; % 性噪比
fc=10/T; % 载波频率
len=100; % 信号个数
delta_T=T/100; % 采样间隔
fs=1/delta_T; % 采样频率
t=0:delta_T:len*T-delta_T;
N=length(t); % 样本数目
%%%%%%%%%%%%%%%%%%%%%%%%%%%%产生二进制信号%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
data=randint(1,len,2);
datanrz=data.*2-1; % 转换成双极性码
data_baseband=zeros(1,len/delta_T);
for q=1:len
data_baseband((q-1)/delta_T+1:q/delta_T)=datanrz(q);
end % 传输信号
data_spectrum=abs(fft(data_baseband)); %基带信号频谱
%串并转换
idata=datanrz(1:2:(len-1));
qdata=datanrz(2:2:len);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%QPSK调制%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ich=zeros(1,len/2/delta_T);
for i=1:len/2
ich((i-1)/delta_T+1:i/delta_T)=idata(i);
end
for ii=1:N/2
a(ii)=sqrt(2/T)*cos(2*pi*fc*t(ii));
end
ich=ich.*a; % I信道调制
qch=zeros(1,len/2/delta_T);
for j=1:len/2
qch((j-1)/delta_T+1:j/delta_T)=qdata(j);
end
for jj=1:N/2
b(jj)=sqrt(2/T)*sin(2*pi*fc*t(jj));
end
qch=qch.*b; % Q-信道调制
QPSKdata=ich+qch; % QPSK调制信号
QPSKdata_spectrum=abs(fft(QPSKdata)); % QPSK调制信号频谱
%%%%%%%%Rayleigh multipath/AWGN(Additive White Gaussian Noise)%%%%%%%%%%%%%
ray_ich=raylrnd(0.8,1,len/2/delta_T);
ray_qch=raylrnd(0.8,1,len/2/delta_T);
ich_ray=ich.*ray_ich;
qch_ray=qch.*ray_qch;
QPSKdata_ray=ich_ray+qch_ray;
QPSKdata_ch=awgn(QPSKdata_ray,SNR);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%QPSK 解调%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
idata1=QPSKdata_ch.*a;
qdata1=QPSKdata_ch.*b; % 相干解调
idata2=zeros(1,len/2);
qdata2=zeros(1,len/2);
for n=1:len/2
ichsum(n)=sum(idata1((n-1)/delta_T+1:n/delta_T))*delta_T;
if ichsum(n)>=0
idata2(n)=1;
else idata2(n)=0;
end
qchsum(n)=sum(qdata1((n-1)/delta_T+1:n/delta_T))*delta_T;
if qchsum(n)>=0
qdata2(n)=1;
else qdata2(n)=0;
end
end % 判决
%并串转换
demodata=zeros(1,len);
demodata(1:2:(len-1))=idata2;
demodata(2:2:len)=qdata4;
% 计算误差
num_BER=sum(abs(demodata-data))
%%%%%%%%%%%%%%%%%%%%%%%%%%%画图%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
h = spectrum.welch;
figure(1)
plot(data_baseband),title('基带信号');
figure(2)
plot(fftshift(QPSKdata_spectrum)),title('基带信号频谱');
figure(3)
psd(h,data_baseband,'fs',fs),title('基带信号功率普');
figure(4)
plot(QPSKdata),title('调制信号');
axis([0 500 -3 3]);
figure(5)
plot(fftshift(QPSKdata_spectrum)),title('调制信号频谱');
figure(6)
psd(h,QPSKdata,'fs',fs),title('调制信号功率普');
figure(7)
for i=1:len/2
plot(idata(i),qdata(i),'ro'),title('星座图');hold on;
axis([-2 2 -2 2]);
plot(ichsum(i),qchsum(i),'*');hold on;
legend('信道前','信道后');
end
这是QPSK的调制与解调你在二进制后面加一个差分编码就是DQPSK了