北京邮电大学通信仿真课程设计报告.docx
《北京邮电大学通信仿真课程设计报告.docx》由会员分享,可在线阅读,更多相关《北京邮电大学通信仿真课程设计报告.docx(88页珍藏版)》请在冰点文库上搜索。
北京邮电大学通信仿真课程设计报告
北京邮电大学课程设计任务书
指导单位:
信息工程学院信息论教研室
指导教师:
邵志嘉
专业和班级:
信息工程专业97601班
学生姓名:
陈鹏
设计题目:
信道编码的仿真
主要技术指标:
要求完成项目:
阐明该系统的原理及抗噪声性能该系统的仿真设计和程序实现仿真测试该系统的抗噪声性能
国防工业出版社
人民邮电出版社
北京邮电大学出版社
主要参考文献:
樊昌信等《通信原理(第四版)》王立宁等《MATLAB与通信仿真》计算机仿真课程教学笔记吴伟陵《信息处理与编码》
信道错误!
未定义书签。
信道模型错误!
未定义书签。
噪声错误!
未定义书签。
信号错误!
未定义书签。
二进制双极性通信系统的蒙特卡罗仿真错误!
未定义书签。
二进制双极性通信系统的蒙特卡罗仿真模型错误!
未定义书签。
信道编码错.误!
未定义书签
信道编码错误!
未定义书签。
信道编码性能测试的蒙特卡罗仿真模型错误!
未定义书签。
线性分组码错误!
未定义书签。
卷积码错误!
未定义书签。
交织码错误!
未定义书签。
级联码错误!
未定义书签。
标准级联码系统框图错误!
未定义书签。
信道编码与扩频通信错误!
未定义书签
二进制双极性扩频通信系统的蒙特卡罗仿真错误!
未定义书签。
级联码对双用户二进制双极性扩频系统误码性能的改善错误!
未定义书签。
本文采用蒙特卡罗计算机仿真方法,使用MATLAB软件对二进
制双极性通信系统中的几种基本信道编码进行了仿真性能测试和讨论,并从实际角度出发,对扩频通信中的信道编码进行了初步仿真。
首先,本文阐述了对二进制双极性通信系统进行蒙特卡罗计算机仿真的具体方法,给出了二进制双极性通信系统的蒙特卡罗仿真模型以及仿真流程图。
接着,本文对几种基本信道编码:
(7,4)HAMMING码、(2,1,3)卷积码、级联码(外编码采用(7,4)HAMMING码,交织编码采用(7,4)卷积交织编码,内编码采用(2,1,3)卷积码),分别进行了仿真性能测试,根据仿真结果得出了三种编码纠错性能依次增强,级联码为最佳编码方案的结论。
并且,还分别
对级联码中的两种交织方式:
卷积交织和循环等差交织进行仿真,依
照仿真结果对两种具体的交织方式进行了性能比较。
最后,从仿真为
实际应用服务的角度出发,仿真测试了级联码(外编码采用(7,4)
HAMMING码,交织编码采用(7,4)卷积交织编码,内编码采用
(2,1,3)卷积码)对双用户二进制双极性扩频通信系统误码性能改善情况,得出了在二进制双极性扩频通信系统中采用级联码,能
够实现信道复用和误码性能双赢的结论。
信道是通信系统三大组成部分(信源、信道、信宿)之一,而信道中的噪声又是不可避免的,因此对信道和噪声的研究乃是研究通信问题的基础。
信道
对于广义上的信道,按功能分,可分为调制信道和编码信道,其关系可见下图
信道模型
在进行二进制数字基带传输信道编码仿真时,我们通常基于编码信道的概念分析建模,对于调制信道则仅考虑每一抽样判决时刻判决器输入端情形,这样做大大
简化了仿真模型,使我们把主要精力真正集中于编码仿真本身。
噪声
本次数字基带传输信道编码仿真,研究干扰为加性高斯白噪声的情况。
此类情况称为AWGN信道,属于加性干扰。
噪声性能指标:
信噪比SNR:
SNRJOIogR(dB)
Pn
噪声平均功率:
2
Pn"
2(其中为功率谱密度,w为带宽)
仿真时,我们视抽样判决时刻判决器输入端噪声为高斯白噪声序列。
产生高斯白噪声序列的方法:
1.利用MATLAB提供的函数得到(0,1)上的均匀分布随机数;
2.利用函数变换法:
若口「耳?
为相互独立的(0,1)区间均匀分布的随机变量,则变量:
-2lncos(2二)
©2=J-2冷Rn(2计2)
为N(0,1)独立的高斯随机数。
之后利用线性变换按要求调整均值方差。
MATLAB源程序
function[gsrv1,gsrv2]=gngauss(m,sgma)
%[gsrv1,gsrv2]=gngauss(m,sgma)
%[gsrv1,gsrv2]=gngauss(sgma)
%[gsrv1,gsrv2]=gngauss
ifnargin==0
m=0;sgma=1;
elseifnargin==1
sgma=m;m=0;
end
u=rand;
z=sgma*(sqrt(2*log(1/(1-u))));
gsrv1=m+z*cos(2*pi*u);
gsrv2=m+z*sin(2*pi*u);
信号
本次数字基带传输信道编码仿真,输入信道信号采用BPSK信号,二进制信源
序列的1,0符号分别被映射为两个持续时间t[0,T]相位差为二的正弦波,即
t[0,T]
~⑴卡严
斗
~0(t)—拝ej2f0t
信号性能指标:
E:
信号功率;
T:
确知信号周期;
相关系数一-1;归一化信噪比:
D2=E(N为输入信道的噪声功率谱密度)
No
仿真时,我们视抽样判决时刻判决器输入(即相关器或匹配滤波器输出)为r=±E+n
r:
判决器输入序列
±E:
信号序列
n:
咼斯白噪声序列
二进制双极性通信系统的蒙特卡罗仿真
蒙特卡罗计算机仿真用于估算数字通信系统的误码率,特别适用于难于对判决器的性能进行分析的情况。
利用蒙特卡罗仿真估算二进制双极性通信系统的误码率具体方法可以用下图表示:
二进制双极性通信系统的蒙特卡罗仿真模型
如图,首先仿真产生判决器的输入随机变量。
使用均匀分布随机数发生器产生来自于二进制数据源的二进制01信息序列,该01序列被映射为土E的序列,E代
表信号能量,且可归一化为1。
使用高斯噪声发生器产生均值为0,方差为的高斯
随机数序列n。
判决器将随机变量和判决电平0相比较。
如果大于0,判决发送比
特是0,否则判决发送比特是1。
该判决输出与所发送的信息比特序列相比较,并计算误比特数和误码率。
进行编码仿真时,该模型应在D和D'处加上相应的编码器和译码器。
下面绘制了蒙特卡罗计算机仿真的基本流程图。
蒙特卡罗计算机仿真的基本流程图
差错计数模块
绘制蒙特卡罗仿真曲线的一般流程图
MATLAB源程序
function[p]=smldPe55(snr_in_dB)
%smldPe55.m二进制双极性通信系统的蒙特卡罗仿真
%snr_in_dB信噪比
%p误码率
E=1;
SNR=exp(snr_in_dB*log(10)/10);%Eb/N0
sgma=E/sqrt(2*SNR);
N=10A5;%仿真序列长度10A5,运行时间约1分钟
temp=0;
dsource=0;
decis=0;
numoferr=0;
p=numoferr/N;
fori=1:
N
temp=rand;
if(temp<0.5)
dsource=0;
else
dsource=1;
end
if(dsource==0)
r=-E+gngauss(sgma);
else
r=E+gngauss(sgma);
end
if(r<0)
decis=0;
else
decis=1;
end
if(decis~=dsource)
numoferr=numoferr+1;
end
end
numoferr,
p=numoferr/N;
%smldPe55.m二进制双极性通信系统的蒙特卡罗仿真
%ce55.m仿真绘图语句
%仿真序列长度10A5,运行时间约15分钟
echoon
SNRindB551=0:
16;
SNRindB552=0:
0.1:
16;
smld_err_prb55=zeros(1,length(SNRindB551));
theo_err_prb55=zeros(1,length(SNRindB552));
fori=1:
length(SNRindB551)
smld_err_prb55(i)=smldPe55(SNRindB551(i));%计算仿真误码率
end
fori=1:
length(SNRindB552)
SNR55=exp(SNRindB552(i)*log(10)/10);
theo_err_prb55(i)=Qfunct(sqrt(2*SNR55));
%Qfuncty=(1/2)*erfc(x/sqrt
(2));理论误码率公式
endfigure;
'r*-');
semilogy(SNRindB551,smld_err_prb55,axis([0,16,1e-5,1]);
xlabel('Eb/N0indB');
holdon
'b:
');
semilogy(SNRindB552,theo_err_prb55,
%ce55.m仿真绘图语句
运行结果
上图(ce55的运行结果)给出了不同信噪比条件下,发送比特的二进制双极性通信系统的蒙特卡罗仿真结果以及理论值曲线。
从仿真结果来看,蒙特卡罗仿真结果与理论值曲线接近程度相当好,用蒙特卡罗仿真模型来模拟实际二进制双极性通信系统,是可以被接受的。
信道编码
信道编码主要用于解决数字通信的可靠性问题,也就是数字信号在交换和传输过程中出现差错的问题。
利用信道编译码,可以显著改善信息在传输过程中的错误概率指标,有效增强系统抗干扰能力,提高数字通信系统的可靠性。
因此,信道编码是数字信号传输中最重要的课题之一。
信道编码
信道编码,就是在待发送的数字信息序列m中人为地按一定规则加进信息数字
序列,从而构成了码字C(信道编码),然后将此码字C作为发送序列。
在编码过程中,每个码字所加进的非信息序列是供在译码器中检出或纠正错误的,常称为监督元。
它们本身不是信息,单纯从信息传输的角度来说是多余的,这种多余度降低了信息传输的效率。
但是从另一角度来说,所增加的冗余度换来的是译码纠错能力,提高了信息传输可靠性。
一般地说,码字中多余度越高,纠错能力越强,可靠性越高。
由此可见,可靠性是以降低效率即有效性为代价换来的。
编码问题就是在一定的抗干扰能力的要求下,合理设计和选择多余度最小的码字问题,也就是如何使可靠性和有效性二者能够得以合理兼顾的问题。
纠错编码理论是建立在代数学重要分支一一近世代数基础上的,它又是信息论的一个重要分支,从五十年代开始至今发展很快,许多内容已经建立起完整的、严密的理论体系。
随着数字技术的迅速发展,大规模、超大规模集成电路的不断出现,
为纠错编码技术的应用开辟了无限广阔的前景;目前,适应不同需要的多种类型的码字的不断出现,使这门学科呈现了无限生机。
信道编码一般分为两类:
分组编码和卷积编码。
在分组编码中,二进制信源输入序列被划分为长度k的码字组。
每个长度k的
码字被映射为长度n的码字,映射关系是相互独立的,编码器的输出仅仅与当前k
个信源输入比特有关,而与以前的序列无关。
从而由长度n的码字组构成分组编码
后的二进制信道输入序列,编码速率为k/n比特/次,记为(n,k)分组码。
在卷积编码中,也是把k个信息比特编成长度为n的信道输入,但该信道输入不但与当前k个信源输入比特有关,而且还与编码器前(L-1)k个输入有关。
本次仿真选用以下几种基本信道编码:
(7,4)HAMMING、(2,1,3)卷积码、
级联码(外编码采用(7,4)HAMMING,交织编码采用(7,4)卷积交织编码,内编码采用(2,1,3)卷积码),分别进行性能测试,另外,还特别对级联码中的两种交织方式:
卷积交织和循环等差交织进行仿真性能测试比较。
在进行信道编码性能仿真测试时,我们仍使用蒙特卡罗仿真估算二进制双极性通信系统的误码率。
在二进制双极性通信系统的蒙特卡罗仿真模型中加入信道编码的编译码器,就得到了信道编码性能测试的蒙特卡罗仿真模型(如下图所示)。
信道编码性能测试的蒙特卡罗仿真模型
差错计数器
在实际进行信道编码性能测试的蒙特卡罗仿真时,我们将仿真数据源序列分成长度为16的码组,把分得的码组数作为循环步长,每一个循环步长依次进行发送接收一个码组的仿真并将差错数进行累加,循环结束后将总误码数除以码序列长度求得仿真误码率。
从理论上讲,这样做不会对信道编码性能测试的蒙特卡罗仿真结果造成偏差。
从实际角度讲,这种方法不仅符合通信应用中编码先要划分数据块的通用性原则,而且可以有效降低仿真的时间复杂度和空间复杂度。
同样,在原来的蒙特卡罗计算机仿真基本流程图中加入编译码模块,并对原来的生成数据模块、叠加噪声模块、接收判决模块、差错计数模块进行改造,将各模块中的数据操作改为对数据块的操作,就可以得到信道编码性能测试的蒙特卡罗仿真流程图(如下图所示)。
信道编码性能测试的蒙特卡罗仿真流程图
线性分组码
线性分组码的线性是指码组中码元间的约束关系为线性;分组是指编码时将每k个信息位一组进行独立处理,变换成长度为
本次仿真采用(7,4)HAMMING码。
性能参数如下:
生成矩阵G:
1
J0
1
I1
校验矩阵H:
n(n>k)的二进制码组。
可纠错误图样:
1
1
1
0
01
00
10
10
0
1
0
0
0
0
1
0
0
0
0
1丿
伴随式
e=(e0
陪集首
e5
e6)
S=(S0,
S1,
S2)
e1
e2
e3
e4
0
0
0
0
0
0
0
0
0
0
1
0
0
1
0
0
0
0
0
0
0
1
0
0
1
0
0
0
0
0
0
0
1
0
0
1
0
0
0
0
1
1
0
0
0
0
1
0
0
0
0
1
1
0
0
0
0
1
0
0
1
1
1
0
0
0
0
0
1
0
1
0
1
0
0
0
0
0
0
1
码长:
n=7
信息位:
k=4
监督位:
n-k=3
最小距离:
d=3
码率:
k/n=4/7
(7,4)HAMMING码能纠正每一种单个随机错误。
MATLAB源程序
function[output_h74]=hamming74(input_h74)
%hamming74.m(7,4)HAMMING码编码器
%input_h74输入序列
%output_h74输岀编码序列
if(rem(length(input_h74),4)~=0)
input_h74=[input_h74,zeros(1,4-rem(length(input_h74),4))];end
n=length(input_h74)/4;
u=zeros(1,n*7);
j=1;
fori=1:
4:
n*4
u(j)=rem((input_h74(i)+input_h74(i+2)+input_h74(i+3)),2);
u(j+1)=rem((input_h74(i)+input_h74(i+1)+input_h74(i+2)),2);
u(j+2)=rem((input_h74(i+1)+input_h74(i+2)+input_h74(i+3)),2);u(j+3)=input_h74(i);
u(j+4)=input_h74(i+1);
u(j+5)=input_h74(i+2);
u(j+6)=input_h74(i+3);
j=j+7;
end
output_h74=u;
%hamming74.m(7,4)HAMMING码编码器
function[h4_output,h7_output]=h47(h74_channel_output)
%h47.m(7,4)HAMMING码译码器
%h74_channel_output信道输入序列
%h4_output译码输出序列
%h7_output纠错后的信道输入序列
if(rem(length(h74_channel_output),7)~=0)
h74_channel_output=[h74_channel_output,zeros(1,7-rem(length(h74_channel_output),7))];
end
n=length(h74_channel_output)/7;
u4=zeros(1,n*4);
u7=zeros(1,n*7);
s=zeros(1,7-4);
e=zeros(1,7);
j=1;
fori=1:
7:
n*7
s(i)=rem((h74_channel_output(i)+h74_channel_output(i+3)+h74_channel_output(i+5)+h74_channel_output(i+6)),2);
s(i+1)=rem((h74_channel_output(i+1)+h74_channel_output(i+3)+h74_channel_output(i+4)+h74_channel_output(i+5)),2);
s(i+2)=rem((h74_channel_output(i+2)+h74_channel_output(i+4)+h74_channel_output(i+5)+h74_channel_output(i+6)),2);
e(i)=s(i)*(1-s(i+1))*(1-s(i+2));
e(i+1)=(1-s(i))*s(i+1)*(1-s(i+2));
e(i+2)=(1-s(i))*(1-s(i+1))*s(i+2);
e(i+3)=s(i)*s(i+1)*(1-s(i+2));
e(i+4)=(1-s(i))*s(i+1)*s(i+2);
e(i+5)=s(i)*s(i+1)*s(i+2);
e(i+6)=s(i)*(1-s(i+1))*s(i+2);
fork7=0:
6u7(i+k7)=rem(h74_channel_output(i+k7)+e(i+k7),2);
end
fork4=0:
3
u4(j+k4)=u7(i+7-4+k4);
end
j=j+4;
end
h4_output=u4;
h7_output=u7;
%h47.m(7,4)HAMMING码译码器
%smldPe55_74.m二进制双极性(7,4)HAMMING码通信系统的蒙特卡罗仿真函数
%snr_in_dB信噪比
%p误码率
E=1;
SNR=exp(snr_in_dB*log(10)/10);%Eb/N0
sgma=E/sqrt(2*SNR);
N=16;
loop=10A5/N;
Ns=N*loop;%仿真序列长度10A5,运行时间约1.5分钟
numoferr_74=0;
temp=0;
dsource=zeros(1,N);
output_h74=hamming74(dsource);
channel_output=zeros(1,length(output_h74));
[h4output,h7output]=h47(output_h74);
forj=1:
loop
fori=1:
N
temp=rand;
if(temp<0.5)
dsource(i)=0;
else
dsource(i)=1;
end
end
output_h74=hamming74(dsource);
fori=1:
length(output_h74)
if(output_h74(i)==0)
r=-E+gngauss(sgma);
else
r=E+gngauss(sgma);
end
if(r<0)
channel_output(i)=0;
else
channel_output(i)=1;
end
end
[h4output,h7output]=h47(channel_output);
fori=1:
N%length(h4output)
if(h4output(i)~=dsource(i))
numoferr_74=numoferr_74+1;
end
end
end
numoferr_74,p=numoferr_74/Ns;
%二进制双极性(7,4)HAMMING码通信系统的蒙特卡罗仿真函数
function
[p_err,gamma_db]=p_e_hd_a(gamma_db_l,gamma_db_h,k,n,d_min)
%p_e_hd_a.m硬判决性能估计函数
%p_err
误码率
%gamma_db信噪比范围
%gamma_db_l>10信噪比下界
%gamma_db_h信噪比上界
%k
信息码长
%n
编码长度
%d_min
最小距离
gamma_db=[gamma_db_l:
(gamma_db_h-gamma_db_l)/20:
gamma_db_h];
gamma_b=10.A(gamma_db/10);
R_c=k/n;
p_b=q(sqrt(2.*R_c.*gamma_b));
p_err=(2Ak-1).*(4*p_b.*(1-p_b)).A(d_min/2);
%p_e_hd_a.m硬判决性能估计函数
function
[p_err,gamma_db]=p_e_sd_a(gamma_db_l,gamma_db_h,k,n,d_min)
%p_e_sd_a.m软判决性能估计函数
%p_err
误码率
%gamma_db信噪比范围
%gamma_db_l>10信噪比下界
%gamma_db_h信噪比上界
%k
%n
信息码长
编码长度
%d_min
最小距离
gamma_db=[gamma_db_l:
(gamma_db_h-gamma_db_l)/20:
gamma_db_h];gamma_b=10.A(gamma_db/10);
R_c=k/n;
P_err=(2Ak-1).*q(sqrt(d_min.*R_c.*gamma_b));
%p_e_sd_a.m软判决性能估计函数
%ce55_74.m仿真绘图语句
%仿真序列长度10A5,运行时间约20分钟echoon
SNRindB55741=0:
16;
SNRindB55742=0:
0.1:
16;
smld_err_prb55=zeros(1,length(SNRindB55741));smld_err_prb74=zeros(1,length(SNRindB55741));
S