采用 2DPSK 调制的数字通信系统仿真设计
- 格式:doc
- 大小:457.05 KB
- 文档页数:10
采用 2DPSK 调制的数字通信系统仿真设计
一、实验原理
差分编码移相2DPSK在数字通信系统中是一种重要的调制方式,其抗噪性能和信道频带利用率均优于移幅键控(ASK)和移频键控(FSK),因而在实际的数据传输系统中得到广泛的应用。采用 2DPSK 调制的数字通信系统系统整体框图如图1所示
图1 系统整体框图
1、信道编码(汉明码)
汉明码是一种能纠一位错的线性分组码,由于它的编译码简单,在数据通信和计算机存储系统中广泛应用。设原代码的码长为 k比特,附加纠错编码部分为r比特,当码字长度n = 2 r -1,r=n-k,r =
1 ,2 …时就称这种线性分组码为汉明码。其基本原理是,将信息码元与监督码元通过线性方程式联系起来,每一个监督位被编在传输码字的特定比特位置上。
2、2DPSK信号的调制
2DPSK方式即是利用前后相邻码元的相对载波相位值去表示数字信息的一种方式。例如,假设相位值用相位偏移△φ表示(△φ定义为本码元初相与前一码元初相只差),并设
△φ=π→数字信息1
△φ=0→数字信息0
则数字信息序列与2DPSK信号的码元相位关系可举例表示如如下:
数字信息: 0 0 1 1 1 0 0 1 0 1
2DPSK信号相位:0 0 0 π 0 π π π 0 0 π
或 π π π 0 π 0 0 0 π π 0
画出的2PSK及DPSK信号的波形如图2-1所示。
图2 2PSK及2DPSK信号的波形
2DPSK的产生基本类似于2PSK,只是调制信号需要经过码型变换,将绝对码变为相对码。2DPSK产生的原理框图如图2-2所示[1],图(a)为模拟调制法,图(b)为键控法。
(a)模拟调制法 (b)键控法
图3 2DPSK信号的调制原理图
3、信道噪声
信道噪声能够干扰通信效果,降低通信的可靠性。在通信系统的理论分析中常常用到的噪声有:白噪声,高斯噪声,高斯型白噪声,窄带高斯噪声,正弦信号加窄带高斯噪声。此次仿真中加入信道的噪声为高斯白噪声。所谓高斯白噪声是指幅度分布服从高斯分布,且功率谱密度又是均匀分布的噪声。
4、2DPSK信号的解调
2DPSK信号可以采用相干解调法(极性比较法)和差分相干解调法(相位比较法)。本次实验采用相干解调法,图4为相干解调法,解调器原理图和解调过程各点时间波形如图4和5所示。其解调原理是:先对2DPSK信号进行相干解调,恢复出相对码,再通过码反变换器变换为绝对码,从而恢复出发送的二进制数字信息。在解调过程中,若相干载波产生180o相位模糊,解调出的相对码将产生倒置现象,但是经过码反变换器后,输出的绝对码不会发生任何倒置现象,从而解决了载波相位模糊的问题。
图4 相干解调法解调器原理图
图5 解调过程各点时间波形
二、程序源代码
clear;
t0=0.15;
ts=0.001;
fc=200;
snr=10;
fs=1/ts;
df=0.2;
t=[ts:ts:t0];
snr_lin=10^(snr/10);
y=[];
nm=length(t);
%生成2DPSK
bn=[];bn(1)=1;%bn是差分码,设bn的第一个符号为1 for i=1:10
x=rand;
if x>=0.5
m(i)=1;
else
m(i)=0;
end
bn(i+1)=xor(m(i),bn(i));
for j=1:15
l=(i-1)*15+j;
c(l)=cos(2*pi*fc*t(l));
c1(l)=cos(2*pi*fc*t(l)+pi);
if m(i)==1;
mi(l)=1;
else
mi(l)=0;
end
if bn(i+1)==1;
bn1(l)=1;
y(l)=c(l);
else
bn1(l)=0;
y(l)=c1(l);
end
end
end
%加噪声
signal_power=spower(y(1:length(t))); % power in modulated signal
noise_power=signal_power/snr_lin; % compute noise power
noise_std=sqrt(noise_power); % compute noise standard deviation
noise=noise_std*randn(1,length(y)); % generate noise
r=y+noise; % add noise to the modulated signal
%时域频域转换
m=mi;
[M,m,df1]=fftseq(m,ts,df);
M=M*ts;
[BN1,bn1,df1]=fftseq(bn1,ts,df);
BN1=BN1*ts;
f=[0:df1:df1*(length(m)-1)]-fs/2;
[Y,y,df1]=fftseq(y,ts,df);
Y=Y*ts;
[C,c,df1]=fftseq(c,ts,df);
C=C*ts;
[R,r,df1]=fftseq(r,ts,df);
R=R*ts;
[NOISE,noise,df1]=fftseq(noise,ts,df);
NOISE=NOISE*ts;
%解调
f_cutoff=70;
n_cutoff=floor(70/df1);
H=zeros(size(f));
H(1:n_cutoff)=2*ones(1,n_cutoff);
H(length(f)-n_cutoff+1:length(f))=2*ones(1,n_cutoff);
yy=r.*c;
[YY,yy,df1]=fftseq(yy,ts,df);
YY=YY*ts;
DEM=H.*YY;%滤波
dem=real(ifft(DEM))/fs; dem=dem(1:length(t));
ytemp=dem;
y1=ytemp;
for i=(1:length(t));% 判决,得到解调结果
if y1(1,i)>0;
y1(1,i)=1;
else
y1(1,i)=0;
end;
end;
for i=(1:10);%码反变换
k=y1((i-1)*15+1:i*15);
if mean(k)>0.5;
y2(i)=1;
else
y2(i)=0;
end
end
y3(1)=xor(y2(1),1);
for i=(2:10);
y3(i)=xor(y2(i-1),y2(i));
end
for i=(1:10);
for j=(1:15);
l=(i-1)*15+j;
if y3(i)==1;
yout(l)=1;
else
yout(l)=0;
end
end
end
[Y1,y1,df1]=fftseq(y1,ts,df);
Y1=Y1*ts;
[YOUT,yout,df1]=fftseq(yout,ts,df);
YOUT=YOUT*ts;
pause;
%仿真
pause;
figure(1);
subplot(3,2,1);
plot(t,mi(1:length(t)));grid;axis([0 0.15 -2 2]);xlabel('Time');title('源信号波形');
subplot(3,2,2);
plot(f,abs(fftshift(M)));xlabel('Frequency'); title('源信号频谱');
subplot(3,2,3);
plot(t,bn1(1:length(t)));grid;axis([0 0.15 -2 2]);xlabel('Time');title('码变换后波形');
subplot(3,2,4);
plot(f,abs(fftshift(BN1)));xlabel('Frequency');title('码变换后频谱');
subplot(3,2,5);
plot(t,c(1:length(t)));grid;axis([0 0.15 -2 2]);xlabel('Time');title('载波波形');
subplot(3,2,6);
plot(f,abs(fftshift(C)));xlabel('Frequency');title('载波频谱');
pause;
figure(2);
subplot(3,2,1);
plot(t,noise(1:length(t)));grid;axis([0 0.15 -2 2]);xlabel('Time');title('噪声波形');
subplot(3,2,2);
plot(f,abs(fftshift(NOISE)));xlabel('Frequency');title('噪声频谱'); subplot(3,2,3);
plot(t,y(1:length(t)));grid;axis([0 0.15 -2 2]);xlabel('Time');title('未加噪声调制波形');
subplot(3,2,4);
plot(f,abs(fftshift(Y)));xlabel('Frequency'); title('未加噪声调制频谱');
subplot(3,2,5);
plot(t,r(1:length(t)));grid;axis([0 0.15 -2 2]);xlabel('Time');title('加噪声调制波形');
subplot(3,2,6);
plot(f,abs(fftshift(R)));xlabel('Frequency'); title('加噪声调制频谱');
pause;
figure(3);
subplot(3,2,1);
plot(t,yy(1:length(t)));grid;axis([0 0.15 -2 2]);xlabel('Time');title('相干解调后波形');
subplot(3,2,2);
plot(f,abs(fftshift(YY)));xlabel('Frequency'); title('相干解调后频谱');