通信人家园
标题: 有关几种常用基带码型的MATLAB仿真实现 [查看完整版帖子] [打印本页]
时间: 2016-3-2 22:52
作者: Std_Try
标题: 有关几种常用基带码型的MATLAB仿真实现
在数字通信系统中,需要将输入的数字序列映射为信号波形在信道中传输,此时信源输出数字序列,经过信号映射后成为适于信道传输的数字调制信号。根据映射后信号的频谱特性,可以分成基带信号和频带信号。通常基带信号指信号的频谱为低通型,而频带信号的频谱为带通型的。由消息转换过来的原始信号所固有的频带称为基本频带,简称“基带”。来自数据终端的原始数据信号,其频谱一般是从零开始的,往往包含丰富的低频成分,甚至直流分量,故称之为数字基带信号。用数字基带信号直接进行传输,即不搬移基带信号的频谱或只经过简单的码型变换就直接进行传输的方式称为数字基带传输。基带信号所包含的频率范围很宽,可以从直流到高频,所以对用于传输基带信号的信道是有限制的。因此就要求传输过程的码型具有利于提高系统的频带利用率,不含直流分量,时低频分量要尽量少,足够大的定时信号供提取,误码检测能力,码型变换设备简单,容易实现等特点。
基带传输系统的组成框图如下所示。它主要由码波形变换器、发送滤波器、传输波形,信道、接收滤波器和取样判决器等5个功能电路组成。基带传输系统的输入信号是由终端设备编码器产生的脉冲序列,为了使这种脉冲序列适合于信道的传输,一般要经过码型变换器,码型变换器把二进制脉冲序列变为双极性码(AMI码或HDB3码),有时还要进行波形变换,使信号在基带传输系统内减小码间干扰。当信号经过信道时,由于信道特性不理想及噪声的干扰,使信号受到干扰而变形。在接收端为了减小噪声的影响,首先使信号进入接收滤波器,然后再经过均衡器,校正由于信道特性(包括接收滤波器在内)不理想而产生的波形失真或码间串扰。最后在取样定时脉冲到来时,进行判决以恢复基带数字码脉冲。
数字基带信号的类型很多,常见的有矩形脉冲,三角波,高斯脉冲和升余弦脉冲等,以下是几种常见的基带信号的码型。
(1)单极性不归零码(SNRZ),编译器直接输出的原始码型,主要特点是:包含直流分量,信号能量大部分集中在低频;不能直接从码流中提取定时时钟;无误码检测能力。不太适合信道中传输。
(2)单极性归零码(SRZ),占空比是50%,主要特点是:可以直接从码流中提取定时时钟,其他缺点与NRZ码相同。它主要用于数字设备的内部传输,也不适合在信道传输。
(3)双极性不归零码(DNRZ),"1"码和"0"码都有电流,"1"为正电流,"0"为负电流,正和负的幅度相等,判决门限为零电平。
(4)双极性归零码:DRZ码,其中"1"码发正的窄脉冲,"0"码发负的窄脉冲,两个码元的时间间隔可以大于每一个窄脉冲的宽度,取样时间是对准脉冲的中心。
MATLAB仿真实现
(1)单极性不归零码
%产生单极性不归零码的波形图
axes(handles.axes1);%当前坐标系为1
for i =1:length(randomBinary); %计算码元的值
if(randomBinary(i) == 1) %如果输入信息为1
for j = 1:grid
y((i-1)*grid+j) = 1;%该码对应的点取值为1
end
else%如果输入信息为0
for j = 1:grid
y((i-1)*grid+j) = 0;%该码对应的点取值为0
end
end
end
y =[y,randomBinary(i)];%加上y序列的最后一位
M =max(y);%获取y序列最大值
m =min(y);%获取y序列最小值
plot(t,y);%绘图函数
axis([0,i,m-0.1,M+0.1]);%设置坐标轴范围x从0到i,y从m-0.1到M+0.1
title(num2str(randomBinary),'Fontsize',18);%产生标题函数
%产生单极性不归零码的频谱图
axes(handles.axes2);%当前坐标系为2
L =100;%每码元采样点数
N =1000;%采样点数
M =N/L;%码元数
Rs = 2;%码元速率
Ts =1/Rs;%比特间隔
Fs =L/Ts;%采样速率
Bs =Fs/2;%系统带宽
T =N/Fs;%截短时间
ts =(-T/2):1/FsT/2-1/Fs);%时域采样点 F = -Bs+[0:N-1]/T;%频域采样点
Ep =zeros(1,N);%产生方阵
for k =1:10000
snrz= zeros(L,M);%创建L行M列0矩阵
fori = 1:M
if(randomBinary(i) == 1) %如果随机信号为1
snrz(:,i) = 1;%把第i列赋值为1
else
snrz(:,i) = 0;%把第i列赋值为0
end
end
s =snrz(:)';
S = fftshift(fft(s))*Fs;%一维快速傅里叶变换,低频成分在矩阵的两边,要将低频成分放到中间的话用fftshift(fft( ))
P = (S.*conj(S))/M; %计算功率谱密度 S*S的共轭矩阵
snrz= (-length(S)/2:length(S)/2-1)/10; %snrz序列的范围
Ep =Ep*(1-1/k)+P/k;%计算均值
end
Max =max(Ep);%获取y序列最大值
plot(snrz,Ep);%绘制图像函数
axis([-10,10,0,Max]);%设置坐标轴范围函数
title(num2str(randomBinary),'Fontsize',18);%设置标题函数
E = 0;R0= 0;%定义均值和自相关函数
snrz =[0,0.5;1,0.5];%snrz码型的概率分布
for n =1:length(snrz)
E = E + snrz(n,1)*snrz(n,2);%计算均值
R0 =R0 + snrz(n,1)*snrz(n,1)*snrz(n,2);%计算自相关函数在0的值
end
set(handles.Eedit,'string',num2str(E));%显示均值
set(handles.Redit,'string',num2str(R0)); %显示自相关函数
(2)单极性归零码
axes(handles.axes1);%当前坐标系为1
for i= 1:length(randomBinary); %计算码元的值
if(randomBinary(i) == 1)%如果输入信息为1
for j = 1:grid/2
y(grid/2*(2*i-2)+j) = 1;%定义前半段时间值为1
y(grid/2*(2*i-1)+j) = 0;%定义后半段时间值为0
end
else%如果输入信息为0
for j = 1:grid
y(grid*(i-1)+j) = 0;%该码对应的时间点取值为0
end
end
end
y =[y,randomBinary(i)];%加上y序列的最后一位
M = max(y);%获取y序列最大值
m =min(y);%获取y序列最小值
plot(t,y);%绘图函数
axis([0,i,m-0.1,M+0.1]);%设置坐标轴范围x从0到i,y从m-0.1到M+0.1
title(num2str(randomBinary),'Fontsize',18);
%产生单极性归零码的频谱图
axes(handles.axes2);%当前坐标系为1
L =100;%每码元采样点数
N =1000;%采样点数
M =N/L;%码元数
Rs = 2;%码元速率
Ts =1/Rs;%比特间隔
Fs =L/Ts;%采样速率
Bs =Fs/2;%系统带宽
T =N/Fs;%截短时间
ts =(-T/2):1/FsT/2-1/Fs);%时域采样点 F = -Bs+[0:N-1]/T;%频域采样点
Ep =zeros(1,N);
for k =1:10000
srz= zeros(L,M);
fori = 1:M
if(randomBinary(i) == 1)
srz(1/2,i) = 1; else
srz(1/2,i) = 0; end
end
s =srz(:)';
S =fftshift(fft(s))*Fs;
srz= (-length(S)/2:length(S)/2-1)/10;%srz序列的范围
P = (S.*conj(S))/T; %样本信号功率谱密度
Ep =Ep*(1-1/k)+P/k;%计算功率谱密度的均值
end
Max =max(Ep);%获取y序列最大值
plot(srz,Ep);%绘制图像函数
axis([-10,10,0,Max]);%设置坐标轴范围和间隔函数
title(num2str(randomBinary),'Fontsize',18);%设置标题
E = 0;R0= 0;%定义均值和自相关函数
srz =[0,0.75;1,0.25];%snrz码型的概率分布
for n =1:length(srz)
E = E + srz(n,1)*srz(n,2);%计算均值
R0 =R0 + srz(n,1)*srz(n,1)*srz(n,2);%计算自相关函数在0的值
end
set(handles.Eedit,'String',num2str(E));%显示均值
set(handles.Redit,'String',num2str(R0));%显示自相关函数
(3)双极性不归零码
%产生双极性不归零码的波形图
axes(handles.axes1);%当前坐标系为1
for i =1:length(randomBinary); %计算码元的值
if(randomBinary(i) == 1) %如果输入信息为1
for j = 1:grid
y((i-1)*grid+j) = 1;%该码对应的点取值为1
end
else%如果输入信息为0
for j = 1:grid
y((i-1)*grid+j) = -1;%该码对应的点取值为-1
end
end
end
y =[y,randomBinary(i)];
M =max(y);
m =min(y);
plot(t,y);
axis([0,i,m-0.1,M+0.1]);
title(num2str(randomBinary),'Fontsize',18);
%产生双极性不归零码的频谱图
axes(handles.axes2);%当前坐标系为2
L =100;%每码元采样点数
N =1000;%采样点数
M =N/L;%码元数
Rs = 2;%码元速率
Ts =1/Rs;%比特间隔
Fs =L/Ts;%采样速率
Bs = Fs/2;%系统带宽
T =N/Fs;%截短时间
ts =(-T/2):1/FsT/2-1/Fs);%时域采样点 F = -Bs+[0:N-1]/T;%频域采样点
Ep =zeros(1,N);
rate =str2num(get(handles.Dedit,'String'));
for k =1:10000
a =sign(randn(1,M));
dnrz= zeros(L,M);
fori = 1:M
if(a(i) == 1)
dnrz(:,i) = 1;
else
dnrz(:,i) = -1;
end
end
s =dnrz(:)';
S =fftshift(fft(s))*Fs;
dnrz= (-length(S)/2:length(S)/2-1)/10;
P = (S.*conj(S))/T; %样本信号功率谱密度
Ep =(Ep*(k-1)+P)/k;
end
Max =max(Ep);%获取y序列最大值
plot(dnrz,Ep);
axis([-10,10,0,Max]);
title(num2str(randomBinary),'Fontsize',18);
E = 0;R0= 0;%定义均值和自相关函数
dnrz =[1,0.5;-1,0.5];%snrz码型的概率分布
for n =1:length(dnrz)
E =E + dnrz(n,1)*dnrz(n,2);%计算均值
R0 =R0 + dnrz(n,1)*dnrz(n,1)*dnrz(n,2);%计算自相关函数在0的值
end
set(handles.Eedit,'string',num2str(E));%显示均值
set(handles.Redit,'string',num2str(R0));%显示自相关函数
(4)双极性归零码
%产生双极性归零码的波形图
axes(handles.axes1);%当前坐标系为1
for i =1:length(randomBinary); %计算码元的值
if(randomBinary(i) == 1) %如果输入信息为1
for j = 1:grid/2
y(grid/2*(2*i-2)+j) = 1;%定义前半段时间值为1
y(grid/2*(2*i-1)+j) = 0;%定义前半段时间值为0
end
else%如果输入信息为0
for j = 1:grid/2,
y(grid/2*(2*i-2)+j) = -1;%定义前半段时间值为-1
y(grid/2*(2*i-1)+j) = 0; %定义前半段时间值为0
end
end
end
y =[y,randomBinary(i)];
M =max(y);
m =min(y);
yh = y;
plot(t,y);
axis([0,i,m-0.1,M+0.1]);
title(num2str(randomBinary),'Fontsize',18);
%产生双极性归零码的频谱图
axes(handles.axes2);%当前坐标系为2
axes(handles.axes2);%当前坐标系为2
L =100;%每码元采样点数
N =1000;%采样点数
M =N/L;%码元数
Rs = 2;%码元速率
Ts =1/Rs;%比特间隔
Fs =L/Ts;%采样速率
Bs =Fs/2;%系统带宽
T =N/Fs;%截短时间
ts =(-T/2):1/FsT/2-1/Fs);%时域采样点 F = -Bs+[0:N-1]/T;%频域采样点
Ep =zeros(1,N);
rate =str2num(get(handles.Dedit,'String'));
for k =1:10000
a =sign(randn(1,M));
drz= zeros(L,M);
fori = 1:M
if(a(i) == 1)
drz(1/2,i) = 1; else
drz(1/2,i) = -1; end
end
rateradio = L*rate;
drz(1:rateradio,:)= ones(rateradio,1)*a;
s =drz(:)';
S =fftshift(fft(s))*Fs;
drz= (-length(S)/2:length(S)/2-1)/10;
P = (S.*conj(S))/T; %样本信号功率谱密度
Ep =(Ep*(k-1)+P)/k;
end
Max =max(Ep);%获取y序列最大值
plot(drz,Ep);
axis([-10,10,-10,Max]);
title(num2str(randomBinary),'Fontsize',18);
E = 0;R0= 0;%定义均值和自相关函数
drz =[1,0.25;-1,0.25;0,0.5];%snrz码型的概率分布
for n =1:length(drz)
E =E + drz(n,1)*drz(n,2);%计算均值
R0 =R0 + drz(n,1)*drz(n,1)*drz(n,2);%计算自相关函数在0的值
end
set(handles.Eedit,'string',num2str(E));
set(handles.Redit,'string',num2str(R0));
时间: 2018-6-3 09:28
作者: timezb520
通信人家园 (https://www.txrjy.com/) |
Powered by C114 |