——单级性、双极性信号误码率的判断
实验目的:
1. 学习掌握数字信号序列的单级性、双极性码编码;
2. 掌握信号信噪比(BER)及误码率(SNR)的计算,判断分析其关系,了解抗干扰
能力与信噪比的关系。
3. 会用Matlab绘制单级性、双极性信号,能计算其通过加性噪声信道后的信噪比。
绘制误码率——信噪比图。
实验要求:
1. 产生两组数字信号序列,要求分别为单级性、双极性信号(归零或非归零均可)。 让其通过一个有加性高斯白噪声的信道,计算判断其信噪比的大小,并比较那种信号的抗干扰性能强。 2. 绘制单级性、双极性信号的误码率——信噪比图,观察分析数字信号的误码率BER
和信噪比SNR之间的关系。
实验内容:
一、数字基带信号的常见码型 ⑴码型知识
通信的任务是准确迅速地传递信息。信源信号经过信源编码之后成为离散的二进制数字信号。我们用一些离散的波形来代替这些数字信号。这些离散的信号可以直接进行传输,或者调制到载波上进行传输。这样就形成了两种最基本的数字信号的传输方式:基带传输和频带传输。
由于未经调制的 电脉冲信号所占有的频带通常从直流到低频开始,因而成为数字基带信号。在数字传输系统中,其传输对象主要是二元数字信号。
首先,简单介绍一下单级性码和双极性码。
单极性码:用一种电平以及零电平分别表示“1”和“0”码。 双极性码:用正-负电平分别表示“1”和“0”码。
而最简单的二元码中基带信号的波形为矩形,幅度取值只有两种电平。通常的二元码有如下几种:
1. 单级性非归零码(NRZ(L))
属于非归零码NRZ(Not Return Zero code)在整个码元期间电平保持不变。在这种编码中用高电平和低电平(通常为零电平)分别表示二进制 信息“1”、“0”。 2. 双极性非归零码
也同单级性非归零码相同的是在整个码元期间电平保持不变,但它用正电平,负电平分别表示“1”,“0”. 3. 单级性归零码(RZ(L))
归零码RZ(Return Zero code )在整个码元期间高电平只维持一段时间,其余时间返回零电平。单级性归零码与单级性非归零码不同,发送“1”时在整个码元期间高电平只持续一段时间,在码元其余时间内则返回零电平。
另外,还有一种双极性归零码,它的幅度取值有三种:-1、0、1,所以将它归于三元码进行讨论。
⑵Matlab实现单级性、双极性码
由上述知识,我们可以用阶梯函数stairs(x)绘制出单级性非归零码和双极性非归零码。
比如随意产生一个数字信号序列:
0 0 1 0 1 0 0 0 0 1 0 0 1 0 0 1 1 1 1 0 1 0 1 0 0 0 1 0 例程1:单级性码绘图为:
h1=[0 0 1 0 1 0 0 0 0 1 0 0 1 0 0 1 1 1 1 0 1 0 1 0 0 0 1 0] stairs(h1) grid on
axis([-0.1 length(h1) -1.1 1.1]); title('单极性归零码'); 例程2:双级性码绘图为:
h2=[-1 -1 1 -1 1 -1 -1 -1 -1 1 -1 -1 1 -1 -1 1 1 1 1 -1 1 -1 1 -1 -1 -1 1 -1] stairs(h2) grid on
axis([-0.1 length(h1) -1.1 1.1]); title('双极性归零码');
在矩形图中我们可以看到如果重复发送\"1\"码,势必要连续发送正电流;如果重复发送\"0\"码,势必要连续不送电流或连续发送负电流,这样使某一位码元与其下一位码元之间没有间隙,不易区分识别。归零码可以改善这种状况。下面我们用归零码来表示刚才的序列。 ◆ 以单级性归零码为例:
归零码的编码与非归零码的区别就在于,每个码元范围内电平有改变,不论所要传输的信息码是“1”或“0”,在本例中都取占码元长度一半的时长,这样我们可以做判断条件,当传输的信号为“1”时,在1/2码元长度内画高电平,紧接着的1/2码元内给零电平;同样,如果传输信号为“0”,则整个码元内为零电平。程序如下: 例程3:
code=100; %描点数为100,也就是说每比特内画图取点数为100
x=[0 0 1 0 1 0 0 0 0 1 0 0 1 0 0 1 1 1 1 0 1 0 1 0 0 0 1 0] ; t=0:.01:length(x); %时间序列,取长度为序列x长度,步长为0.01 for i=1:length(x) %编码过程 if x(i)==1
for j=1:code/2
% 由于是采用归零码,所以每个码元期间内有一半为序列编码,另一半则归零,所以取描点间隔的一半
y(code/2*(2*i-2)+j)=1; y(code/2*(2*i-1)+j)=0; end else
for j=1:code/2
y(code/2*(2*i-2)+j)=0; y(code/2*(2*i-1)+j)=0;
end end end
y=[y,x(i)]; %添加其后后一位 plot(t,y);
axis([0 length(x) -1.0 1.2]); %规范坐标范围,x轴为(0,length(x)),y轴为(-1.0, 1.2)
title('单极性归零码');
二、信号通过加性高斯白噪声信道后的信噪比分析 上次实验做过在随机信号中加入加性高斯白噪声,仍然使用awgn()函数,计
A2算信号的信噪比,按定义单级性信号的信噪比r= ,其中A2是输入信号的22b幅度能量,分母b2是噪声信号的能量,这样对数字信号序列X的能量求解就用
A2sum(abs(X).^2)来求解。同样,求双极性信号的信噪比按公式:r=2来计算。
4b例程4:信号通过加性高斯白噪声信道后的信噪比
snr=0;
l=[1 0 1 0 0 0 1 1]
ln=awgn(l,9,'measured'); Ps=sum(abs(l).^2);%signal power Pn=sum(abs(l-ln).^2);%noise power snr=10*log10(Ps/Pn);%信噪比
三、绘制单级性,双极性信号的误码率-信噪比图形
在这里直接产生一组信噪比数值,便于规律计算对应的误码率。根据通信原理的知识,我们知道在采样时刻幅度只有两个电平(如幅度A和0),接收端设定判决门限d,规定接收信号r大于d,判定信号幅度为A;接收信号r小于d,判定信号幅度为0。单极性非归零码的平均信号功率为,高斯噪声功率为,误码率为:。.性数字信号的误码率为:1rPe=erfc(),其中r为输入信号的信噪比,erfc()函数是互补误差函数,用于22计算信号的误码率。双极性非归零码的平均信号功率为,误比特率为。其中,Q函数在MATLAB中可由erfc函数实现而双极性信号的误码1erfc(r)率为:Pe=2。 绘制信噪比和误码率则采用semilogy函数来实现。semilogy(x)类似于plot函数,只是这类绘图中y轴采用对数log坐标。
例程6:
SNR=0.1:.01:100; %取一组信噪比值,便于以下计算对应的误码率 SNR0dB=10*log10(SNR); %信噪比线性化 S=erfc(sqrt(SNR/2))/2;
%根据误码率与信噪比关系公式,求单极性非归零码误码率序列
D=erfc(sqrt(SNR))/2; %双极性非归零误码率序列 semilogy(SNR0dB,S); hold on
semilogy(SNR0dB,D,'--'); xlabel('SNR0dB'); ylabel('BER0dB');
axis([-10 15 0.000001 1]);
title('数字基带传输误码率-信噪比曲线');
legend('单极性非归零码','双极性非归零码'); %给图形添加图例,见图5 实验结果:
一、单极性、双极性码型:
图1单极性、双极性码型
我们观测到序列0 0 1 0 1 0 0 0 0 1 0 0 1 0 0 1 1 1 1 0 1 0 1 0 0 0 1 0对应的数字编码如上图,其中单极性非归零码见图2,双极性非归零码见图3.
图2 单级性非归零码
图3 双极性非归零码
如下是单极性归零码(图4)可以看到对应每个码元区间内电平高度有变换。在双极性归零码中,这种电平的变换更明显,当我们拿到波形图时可以在图上无误的读出原序列。
图4 单极性归零码
图5 双极性归零码
二、单极性、双极性码型的信噪比:
单极性码l=[0 0 1 0 1 0 0 0 0 1 0 0 1 0 0 1 1 1 1 0 1 0 1 0 0 0 1 0] 信噪比snr
双极性码k=[-1 -1 1 -1 1 -1 -1 -1 -1 1 -1 -1 1 -1 -1 1 1 1 1 -1 1 -1 1 -1 -1 -1 1 -1] 信噪比snrk 两者信噪比数据:
第1组:snr=9.9634 snrk=12.0793(见图6) 第2组:snr=10.7609 snrk=11.7705 第3组:snr=9.4745 snrk=9.6053 第4组:snr=10.3911 snrk=11.5252
图6一组单极性,双极性非归零码的信噪比
三、以下是单极性、双极性非归零码的误码率——信噪比图
图7 单级性,双极性信号的误码率-信噪比图形
实验结果分析:
1. 数字基带信号是数字信息的电脉冲表示,单双极性码的编码原理,是按数字信号“0”“1”或“-1”来给与高低电平或者正负电平的脉冲编码。我们从下图比较可知:
① 单极性码中,非归零码和归零码都是以两个不同的电平数来表示1和0,但它们也有明显的区别,每个码元长度内,编码对应电平所占的时长不同,非归零码严格按照编码对应给与高低电平,码元期间不再改变,而归零码则会有末端归零的现象。
② 我们可以看出非归零码信息密度高,但需要外同步并有误码积累,归零码能够自同步,但信息密度低。
③ 单极性码和双极性码比较可知,双极性码的编码使得0,1的点评区分更加明显,这样就降低了误码率。双极性码中也有归零码和非归零码之分,其中双极性归零码属于三元码,这样就可以避免当信息中出现长串连续的“0”或“1”时,非归零码中呈现的连续固定电平,以及二元码“0”码时低电平持续等引起的检错能力差的现象,相应的 减少了误码率。
2. 对单极性码和双极性码的信噪比计算比较。
信号的信噪比试传输信号的能量与混入的噪声信号能量的比值,它反映了一组信号的抗干扰能力,信噪比越大,抗干扰能力越强。 我们从测试数据
第1组:snr=9.9634 snrk=12.0793(见图6)
第2组:snr=10.7609 snrk=11.7705
第3组:snr=9.4745 snrk=9.6053 第4组:snr=10.3911 snrk=11.5252
可以观察出,同一传输码在加性高斯白噪声信道中通过后得到的双极性码的信噪比snrk比单极性的信噪比snr高,这说明双极性编码的抗干扰能力要比单极性码的强。这是因为前面所提到的,二元码信息中每个编码0,1分别独立的相应于某个传输电平,在传送连续的1或0时,固定电平持续不变,在信道频带受限以及信道中其他干扰的情况下,经过传输新到后的基带信号波形会发生畸变,那么这些连续的电平处就很难正确恢复原始信号,削弱了有用信号的能量,相反,噪声信号的能量增加,这样就降低了信噪比。而双极性码的编码考虑到有电平的起伏变换,在遇到同样问题时可以稍加改善,但如果想更好的解决连续电平问题,还是选择归零码效果更好。
3. 双极性码和单极性码的误码率如信噪比的关系观测分析 信号误码率=
错误传输的误码数*100%,它同信号的信噪比有密切关系,
传输的所有码数在实验结果中我们可以看到
①两种信号随着信噪比的增强,误码率下降。
②单极性双极性码的误码率相同的情况下,单极性信号的误码率大于双极性信号,也就是说同一误码率情况下,双极性码的抗干扰性强。
③同一信噪比下,双极性的误码率比单极性码误码率高,但随着信噪比的减小,这种误码率的差距减小,最后趋于相同,也就是说,当信号的抗干扰能力太差时,两者无码情况差不多。
单极性、双极性非归零码的误码率——信噪比图
实验总结
通过实验进一步熟悉了二元码中单极性码和双极性码的编码原理,掌握归零码和非归零码的区别和优缺点,了解了单极性码和双极性码在传输中信噪比的不同, 理解了其误码率和信噪比的关系,在一定范围内,误码率随着信噪比的增加而减小。同时我也学会了用Matlab中的stairs函数绘制矩形图,会使用semilogy()函数绘制对数轴图像,了解了非全码宽信号的绘制(如归零码),另外会使用公式编程计算信号的能量和信噪比,以及误码率的转换。 附:程序
%%%%%%-------stairs函数绘制非归零码----------%%%%%%% clear;
clc;
h1=[0 0 1 0 1 0 0 0 0 1 0 0 1 0 0 1 1 1 1 0 1 0 1 0 0 0 1 0] subplot(221);stairs(h1) grid on
axis([-0.1 length(h1) -1.1 1.1]); title('单极性归零码');
h2=[-1 -1 1 -1 1 -1 -1 -1 -1 1 -1 -1 1 -1 -1 1 1 1 1 -1 1 -1 1 -1 -1 -1 1 -1] subplot(222);stairs(h2) grid on
axis([-0.1 length(h1) -1.1 1.1]); title('双极性归零码');
%%%%%%%绘制单极性、双极性码归零码%%%%%%%% clear; clc;
code=100; %描点数为100,也就是说每比特内画图取点数为100
x=[0 0 1 0 1 0 0 0 0 1 0 0 1 0 0 1 1 1 1 0 1 0 1 0 0 0 1 0] ; %二进制数字信号序列
t=0:.01:length(x); %时间序列,取长度为序列x长度,步长为0.01
for i=1:length(x) %编码过程 if x(i)==1
for j=1:code/2 % 由于是采用归零码,所以每个码元期间内有一半为序列编码,另一半则归零,所以取描点间隔的一半 y(code/2*(2*i-2)+j)=1; y(code/2*(2*i-1)+j)=0; end else
for j=1:code/2
y(code/2*(2*i-2)+j)=0; y(code/2*(2*i-1)+j)=0; end end end
y=[y,x(i)]; %添加最后一位 subplot(223); plot(t,y);
xlabel('码元'); ylabel('电平值'); grid on
axis([0 length(x) -1.0 1.2]); %规范坐标范围,x轴为(0,length(x)),y轴为(-1.0, 1.2)
title('单极性归零码');
for i=1:length(x) %编码过程 if x(i)==1
for j=1:code/2 % 由于是采用归零码,所以每个码元期间内有一半为序列编码,另一半则归零,所以取描点间隔的一半 y2(code/2*(2*i-2)+j)=1; y2(code/2*(2*i-1)+j)=0; end else
for j=1:code/2
y2(code/2*(2*i-2)+j)=-1; y2(code/2*(2*i-1)+j)=0; end end end
y2=[y2,x(i)]; %添加其后一位,补充完整整个序列
subplot(224); plot(t,y2); xlabel('码元'); ylabel('电平值'); grid on
axis([0 length(x) -1.2 1.2]); %规范坐标范围,x轴为(0,length(x)),y轴为(-1.2, 1.2) title('双极性归零码');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%----通过加性高斯白噪声信道的信噪比-------%%%%%% clear; clc; snr=0; snrk=0;
l=[0 0 1 0 1 0 0 0 0 1 0 0 1 0 0 1 1 1 1 0 1 0 1 0 0 0 1 0] ln=awgn(l,10,'measured'); Ps=sum(abs(l).^2);%signal power Pn=sum(abs(l-ln).^2);%noise power snr=10*log10(Ps/Pn)%信噪比
k=[-1 -1 1 -1 1 -1 -1 -1 -1 1 -1 -1 1 -1 -1 1 1 1 1 -1 1 -1 1 -1 -1 -1 1 -1] kn=awgn(k,10,'measured'); Psk=sum(abs(k).^2);%signal power Pnk=sum(abs(k-kn).^2);%noise power snrk=10*log10(Psk/Pnk)%信噪比
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear; clc
%%%%%-----------误码率-信噪比图---------%%%%%%%%%%% SNR=0.1:.01:100;
SNR0dB=10*log10(SNR); %信噪比线性化
S=erfc(sqrt(SNR/2))/2; %根据误码率与信噪比关系公式,求单极性非归零码误码率序列
D=erfc(sqrt(SNR))/2; %双极性非归零误码率序列 semilogy(SNR0dB,S); hold on
semilogy(SNR0dB,D,'--'); xlabel('SNR0dB'); ylabel('BER0dB');
axis([-10 15 0.000001 1]);
title('数字基带传输误码率-信噪比曲线');
legend('单极性非归零码','双极性非归零码'); %给图形添加图例,见图 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
因篇幅问题不能全部显示,请点此查看更多更全内容