




已阅读5页,还剩54页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
北京邮电大学课程设计任务书 指导单位: 信息工程学院信息论教研室 指导教师: 邵志嘉 专业和班级: 信息工程专业 97601 班 学生姓名: 陈 鹏 设计题目: 信道编码的仿真 主要技术指标: 要求完成项目: 阐明该系统的原理及抗噪声性能 该系统的仿真设计和程序实现 仿真测试该系统的抗噪声性能 主要参考文献: 樊昌信等通信原理(第四版) 国防工业出版社 王立宁等MATLAB 与通信仿真人民邮电出版社 计算机仿真课程教学笔记 吴伟陵信息处理与编码北京邮电大学出版社 要求完成报告的时间:2000 年 7 月 16 日 f61060621c43eff43ccce4800d85a6c5.pdf 信道编码的仿真 97601 班 陈鹏 第 2 页 共 59 页 目目 录录 摘摘 要要2 信信 道道2 信道.2 信道模型信道模型.2 噪声.2 信号.2 二进制双极性通信系统的蒙特卡罗仿真.2 二进制双极性通信系统的蒙特卡罗仿真模型二进制双极性通信系统的蒙特卡罗仿真模型.2 信道编码信道编码2 信道编码.2 信道编码性能测试的蒙特卡罗仿真模型.2 线性分组码.2 卷积码.2 交织码.2 级联码.2 标准级联码系统框图标准级联码系统框图.2 信道编码与扩频通信信道编码与扩频通信2 二进制双极性扩频通信系统的蒙特卡罗仿真.2 级联码对双用户二进制双极性扩频系统误码性能的改善.2 结结 束束 语语2 主要参考文献主要参考文献2 f61060621c43eff43ccce4800d85a6c5.pdf 信道编码的仿真 97601 班 陈鹏 第 3 页 共 59 页 摘摘 要要 本文采用蒙特卡罗计算机仿真方法,使用 MATLAB 软件对二 进制双极性通信系统中的几种基本信道编码进行了仿真性能测试和 讨论,并从实际角度出发,对扩频通信中的信道编码进行了初步仿真。 首先,本文阐述了对二进制双极性通信系统进行蒙特卡罗计算 机仿真的具体方法,给出了二进制双极性通信系统的蒙特卡罗仿真 模型以及仿真流程图。接着,本文对几种基本信道编码:(7,4) HAMMING 码、 (2,1,3)卷积码、级联码 ( 外编码采用(7,4) HAMMING 码,交织编码采用(7,4)卷积交织编码,内编码采用 (2,1,3)卷积码 ) ,分别进行了仿真性能测试,根据仿真结果得出了 三种编码纠错性能依次增强,级联码为最佳编码方案的结论。并且, 还分别对级联码中的两种交织方式:卷积交织和循环等差交织进行仿 真,依照仿真结果对两种具体的交织方式进行了性能比较。最后,从 仿真为实际应用服务的角度出发,仿真测试了级联码 ( 外编码采用 (7,4)HAMMING 码,交织编码采用(7,4)卷积交织编码,内编码采 用(2,1,3)卷积码 ) 对双用户二进制双极性扩频通信系统误码性能 改善情况,得出了在二进制双极性扩频通信系统中采用级联码,能够 实现信道复用和误码性能双赢的结论。 f61060621c43eff43ccce4800d85a6c5.pdf 信道编码的仿真 97601 班 陈鹏 第 4 页 共 59 页 信信 道道 信道是通信系统三大组成部分(信源、信道、信宿)之一,而信道中的噪声 又是不可避免的,因此对信道和噪声的研究乃是研究通信问题的基础。 信道信道 对于广义上的信道,按功能分,可分为调制信道和编码信道,其关系可见下 图 信道模型信道模型 在进行二进制数字基带传输信道编码仿真时,我们通常基于编码信道的概念 分析建模,对于调制信道则仅考虑每一抽样判决时刻判决器输入端情形,这样做 大大简化了仿真模型,使我们把主要精力真正集中于编码仿真本身。 噪声噪声 本次数字基带传输信道编码仿真,研究干扰为加性高斯白噪声的情况。此类 情况称为 AWGN 信道,属于加性干扰。 噪声性能指标: 信噪比 SNR: (dB) p p N S SNRlog10 噪声平均功率: 2 w pN 调 制 器 发 转 换 器 媒 质 收 转 换 器 解 调 器 编码器输出译码器输入 调制信道 编码信道 f61060621c43eff43ccce4800d85a6c5.pdf 信道编码的仿真 97601 班 陈鹏 第 5 页 共 59 页 (其中为功率谱密度,为带宽) 2 w 仿真时,我们视抽样判决时刻判决器输入端噪声为高斯白噪声序列。 产生高斯白噪声序列的方法: 1 利用 MATLAB 提供的函数得到(0,1)上的均匀分布随机数; 2 利用函数变换法: 若 为相互独立的(0,1)区间均匀分布的随机变量,则变量: 21, )2sin(ln2 )2cos(ln2 212 211 为 N(0,1)独立的高斯随机数。之后利用线性变换按要求调整均值方差。 MATLAB 源程序源程序 function gsrv1,gsrv2=gngauss(m,sgma) %gsrv1,gsrv2=gngauss(m,sgma) %gsrv1,gsrv2=gngauss(sgma) %gsrv1,gsrv2=gngauss if nargin=0 m=0;sgma=1; elseif nargin=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 符号分别被映射为两个持续时间相位差为的正弦波,即tT , 0 ( ) ( ) s t E T e s t E T e jf t jf t 1 2 0 2 2 2 0 0 tT , 0 信号性能指标: E:信号功率; T:确知信号周期; 相关系数; 1 f61060621c43eff43ccce4800d85a6c5.pdf 信道编码的仿真 97601 班 陈鹏 第 6 页 共 59 页 归一化信噪比: (N0 为输入信道的噪声功率谱密度) 。D E N 2 0 仿真时,我们视抽样判决时刻判决器输入(即相关器或匹配滤波器输出)为 r = E + n r : 判决器输入序列 E : 信号序列 n : 高斯白噪声序列 二进制双极性通信系统的蒙特卡罗仿真二进制双极性通信系统的蒙特卡罗仿真 蒙特卡罗计算机仿真用于估算数字通信系统的误码率,特别适用于难于对判 决器的性能进行分析的情况。利用蒙特卡罗仿真估算二进制双极性通信系统的误 码率具体方法可以用下图表示: 二进制双极性通信系统的蒙特卡罗仿真模型二进制双极性通信系统的蒙特卡罗仿真模型 n E r 输出数据 D D 如图,首先仿真产生判决器的输入随机变量。使用均匀分布随机数发生器产 生来自于二进制数据源的二进制 01 信息序列,该 01 序列被映射为E 的序列,E 代表信号能量,且可归一化为 1。使用高斯噪声发生器产生均值为 0,方差为的高 斯随机数序列 n。判决器将随机变量和判决电平 0 相比较。如果大于 0,判决发送 比特是 0,否则判决发送比特是 1。该判决输出与所发送的信息比特序列相比较, 并计算误比特数和误码率。 均匀随机数 发生器 二进制数据源 高斯随机数 发生器 判 决器 比 较 差 错 计 数 器 f61060621c43eff43ccce4800d85a6c5.pdf 信道编码的仿真 97601 班 陈鹏 第 7 页 共 59 页 进行编码仿真时,该模型应在 D 和 D 处加上相应的编码器和译码器。 下面绘制了蒙特卡罗计算机仿真的基本流程图。 蒙特卡罗计算机仿真的基本流程图蒙特卡罗计算机仿真的基本流程图 N Y 开始 外部输入:信噪比(dB) 初始化变量:信噪比、发送接收信号变量、噪声变量 仿真序列长度、循环步长、临时变量、 清零: 循环计数器和差错计数器 循环计数器置 1 生成发送比特模块 生成叠加噪声信号模块 接收判决模块 生成接受比特 差错计数模块 循环计数器加 1 循环计数器 次数已满? 显示差错计数器数值,计算误码 率 f61060621c43eff43ccce4800d85a6c5.pdf 信道编码的仿真 97601 班 陈鹏 第 8 页 共 59 页 绘制蒙特卡罗仿真曲线的一般流程图绘制蒙特卡罗仿真曲线的一般流程图 N Y N Y 结束 返回值:误码率 开始 初始化变量:仿真信噪比采样序列、仿真循环步长、 理论计算信噪比采样序列、理论计算循环步长 清零: 仿真循环计数器 i、仿真误码率数组、 理论计算循环计数器 j、理论误码率数组 仿真循环计数器 i 置 1 理论计算循环计数器次数已满? 循环计数器次数已满? 理论计算循环计数器 j 置 1 蒙特卡罗仿真模块: 计算第 i 个仿真信噪比下的对应仿真误码率数组元素值 理论计算模块: 计算第 j 个理论信噪比下的对应理论误码率数组元素值 绘图模块: 设置绘图窗口参数 绘制仿真误码率曲线 理论误码率曲线 i+ j+ f61060621c43eff43ccce4800d85a6c5.pdf 信道编码的仿真 97601 班 陈鹏 第 9 页 共 59 页 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=105;%仿真序列长度105,运行时间约1分钟 temp=0; dsource=0; decis=0; numoferr=0; p=numoferr/N; for i=1:N temp=rand; if (tempk) 的二进制码组。 本次仿真采用(7,4)HAMMING 码。 性能参数如下: 生成矩阵 G: 1 1 0 1 0 0 0 0 1 0 0 1 0 0 1 1 1 0 0 1 0 1 0 1 0 0 0 1 校验矩阵 H: 1 0 0 1 0 1 1 0 1 0 1 1 1 0 0 0 1 0 1 1 1 可纠错误图样: 生成叠加噪声信号模块 判决接收数据块模块 数据块差错计数模块 循环计数器次数已满? 显示差错计数器数值,计算误码 率 结束 返回值:误码率 循环计数器加 1 数据块译码模块 数据块编码模块 f61060621c43eff43ccce4800d85a6c5.pdf 信道编码的仿真 97601 班 陈鹏 第 15 页 共 59 页 伴随式 S=(S0,S1,S2) 陪集首 e = ( e0 e1 e2 e3 e4 e5 e6 ) 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; for i=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 码编码器 f61060621c43eff43ccce4800d85a6c5.pdf 信道编码的仿真 97601 班 陈鹏 第 16 页 共 59 页 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; for i=1:7:n*7 s(i)=rem(h74_channel_output(i)+h74_channel_output(i+3)+h74_channe l_output(i+5)+h74_channel_output(i+6),2); s(i+1)=rem(h74_channel_output(i+1)+h74_channel_output(i+3)+h74_ch annel_output(i+4)+h74_channel_output(i+5),2); s(i+2)=rem(h74_channel_output(i+2)+h74_channel_output(i+4)+h74_ch annel_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); for k7=0:6 u7(i+k7)=rem(h74_channel_output(i+k7)+e(i+k7),2); end for k4=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 码译码器 function p=smldPe55_74(snr_in_dB) f61060621c43eff43ccce4800d85a6c5.pdf 信道编码的仿真 97601 班 陈鹏 第 17 页 共 59 页 %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=105/N; Ns=N*loop; %仿真序列长度105,运行时间约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); for j=1:loop for i=1:N temp=rand; if (temp10 信噪比下界 %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.(gamma_db/10); R_c=k/n; p_b=q(sqrt(2.*R_c.*gamma_b); p_err=(2k-1).*(4*p_b.*(1-p_b).(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.(gamma_db/10); R_c=k/n; p_err=(2k-1).*q(sqrt(d_min.*R_c.*gamma_b); %p_e_sd_a.m 软判决性能估计函数 %ce55_74.m 仿真绘图语句 %仿真序列长度 105,运行时间约 20 分钟 echo on SNRindB55741=0:16; SNRindB55742=0:0.1:16; smld_err_prb55=zeros(1,length(SNRindB55741); smld_err_prb74=zeros(1,length(SNRindB55741); SNR5574=0; f61060621c43eff43ccce4800d85a6c5.pdf 信道编码的仿真 97601 班 陈鹏 第 19 页 共 59 页 theo_err_prb5574=zeros(1,length(SNRindB55742);% for i=1:length(SNRindB55741) smld_err_prb55(i)=smldPe55(SNRindB55741(i); smld_err_prb74(i)=smldPe55_74(SNRindB55741(i); end for i=1:length(SNRindB55742) SNR5574=exp(SNRindB55742(i)*log(10)/10); theo_err_prb5574(i)=(1/2)*erfc(sqrt(2*SNR5574)/sqrt(2); %Qfunct y=(1/2)*erfc(x/sqrt(2); %theo_err_prb(i)=Qfunct(sqrt(2*SNR); end p_err_ha,gamma_db_ha=p_e_hd_a(5,16,4,7,3); %p_e_hd_a.m 硬判决性能估计函数 p_err_sa,gamma_db_sa=p_e_sd_a(5,16,4,7,3); %p_e_sd_a.m 软判决性能估计函数 %绘图语句 figure; semilogy(SNRindB55741,smld_err_prb55,b*-); hold on axis(0,16,1e-5,1); xlabel(Eb/N0 in dB); ylabel(Pe); title((7,4)HAMMING编码系统仿真结果与未编码系统的比较,以及软硬判决解码误 码率界); semilogy(SNRindB55741,smld_err_prb74,ro-); semilogy(SNRindB55742,theo_err_prb5574,b:); semilogy(gamma_db_ha,p_err_ha,g); semilogy(gamma_db_sa,p_err_sa,m); %ce55_74.m 仿真绘图语句 运行结果运行结果 下图(ce55_74 的运行结果)给出了不同信噪比条件下,发送 100000 比特的 二进制双极性(7,4)HAMMING 编码通信系统的蒙特卡罗仿真结果,以及未编 码系统的仿真结果和未编码系统的理论值曲线,还给出了软硬判决解码的误码率 估计函数。但在绘图时发现,绘出的这两个函数曲线居然在未编码的理论值曲线 之上。这不仅是因为仿真信噪比范围不同(蒙特卡罗仿真 0:16;估计函数有效范 围在 16dB 以上) ,还因为,在大于 10dB 以上的信噪比下,理论误码率低于 10 的- 5 次方,由于仿真的时间复杂度限制,无法得出误码率低于 10 的-5 次方的蒙特卡 罗仿真结果。从仿真角度讲,图中绘出这两个软硬判决解码的误码率估计函数曲 线已失去了意义,仅做参考。 从下图的仿真结果可见, (7,4)HAMMING 编码可以降低二进制双极性通信 系统的误码率,从而提高通信的有效性。 f61060621c43eff43ccce4800d85a6c5.pdf 信道编码的仿真 97601 班 陈鹏 第 20 页 共 59 页 卷积码卷积码 卷积码是一种有记忆的编码,在任意给定的时间单元处,编码器的 n 个输出 不仅与此时间单元的 k 个输入有关,而且也与前 m 个输入有关。卷积码通常表示 为:(n,k,m) 本次仿真采用(2,1,3)卷积码。 性能参数如下: 生成矩阵 G: 1 0 1 1 1 1 1 1 编码个数: n=2 信息码个数: k=1 约束长度: N=m+1=4 卷积码的码率:=1/2nkRc/ MATLAB 源程序源程序 function output=cnv_encd(g,k0,input) %output=cnv_encd(g,k0,input) 卷积码编码函数 f61060621c43eff43ccce4800d85a6c5.pdf 信道编码的仿真 97601 班 陈鹏 第 21 页 共 59 页 %g 生成矩阵 %k0 输入码长 %input 输入信源序列 %output 输出卷积编码序列 %+ 00 if rem(length(input),k0)0 input=input,zeros(size(1:k0-rem(length(input),k0); end n=length(input)/k0; %g size if rem(size(g,2),k0)0 error(Error,g is not of the right size.) end %li L,n0 li=size(g,2)/k0; n0=size(g,1); %+ 00 u=zeros(size(1:(li-1)*k0),input,zeros(size(1:(li-1)*k0); %uu lie i*T,i=1,2. u1=u(li*k0:-1:1); for i=1:n+li-2 u1=u1,u(i+li)*k0:-1:i*k0+1); end uu=reshape(u1,li*k0,n+li-1); %output reshape output=reshape(rem(g*uu,2),1,n0*(n+li-1); %output=cnv_encd(g,k0,input)卷积码编码函数 %卷积码的维特比译码函数 function decoder_output,survivor_state,cumulated_metric=viterbi(G,k,channel_output) %VITERBI卷积码的维特比解码器 %decoder_ouput,survivor_state,cumulated_metric=viterbi(G,k,channel_output) %G是一个n*Lk矩阵,该矩阵的每一行确 %定了从移位记错器到第n个输出间的连接, %是码速率。 %survivor_state是表示通过网络的最佳路径的矩阵。 %量度在另一个函数metric(x,y)中给出,而且可根据 %硬判决和软判决来指定。 %该算法最小化了量度而不是最大化似然 n=size(G,1); %取出矩阵G的一维大小,即得出输出端口 %检查大小 f61060621c43eff43ccce4800d85a6c5.pdf 信道编码的仿真 97601 班 陈鹏 第 22 页 共 59 页 if rem(size(G,2),k)=0%当G列数不是k的整数倍时 error(Size of G and k do not agree)%发出出错信息 end if rem(size(channel_output,2),n)=0%当输出量元素个数不是输出端口的整 数倍时 error(Channel output not of the right size)%发出出错信息 end L=size(G,2)/k;%得出移位数,即寄存器的个数 %由于L-1个寄存器的状态即可表示出输出状态, %所以总的状态数number_of_states可由前L-1个 %寄存器的状态组合来确定 number_of_states=2(L-1)*k); %产生状态转移矩阵、输出矩阵和输入矩阵 for j=0:number_of_states-1%j表示当前寄存器组的状态因为状态是从零 %开始的,所以循环从0到number_of_states-1 for l=0:2k-1%l为从k个输入端的信号组成的状态,总的状 %态数为2k,所以循环从0到2k-11 % nxt_stat完成从当前的状态和输入的矢量得出下寄存器组的一个状态 next_state,memory_contents=nxt_stat(j,l,L,k); %input数组值是用于记录当前状态到下一个状态所要的输入信号矢量 % input数组的维数:一维坐标x=j+1指当前状态的值 % 二维坐标y=next_state+1指下一个状态的值 % 由于Matlab中数组的下标是从1开始的,而状态值 % 是从0开始的,所以以上坐标值为:状态值+1 input(j+1,next_state+1)=l; % branch_output用于记录在状态j下输入l时的输出 branch_output=rem(memory_contents*G,2); % nextstate数组记录了当前状态j下输入l时的下一个状态 nextstate(j+1,l+1)=next_state; % output数组记录了当前状态j下输入l时的输出(十进制) output(j+1,l+1)=bin2deci(branch_output); end end %state_metric数组用于记录译码过程在每状态时的汉明距离 %state_metric大小为number_of_states2,(:,1)当前 %状态位置的汉明距离,为确定值,而(:,2)为当前状态加输入 %得到的下一个状态汉明距离,为临时值 state_metric=zeros(number_of_states,2); %depth_of_trellis用于记录网格图的深度 depth_of_trellis=length(channel_output)/n; %输出矩阵,每一列为一个输出状态 channel_output_matrix=reshape(channel_output,n,depth_of_trellis); f61060621c43eff43ccce4800d85a6c5.pdf 信道编码的仿真 97601 班 陈鹏 第 23 页 共 59 页 %survivor_state描述译码过程中在网格图中的路径 survivor_state=zeros(number_of_states,depth_of_trellis+1); %开始无尾信道输出的解码 for i=1:depth_of_trellis-L+1 %i指示网格图的深度 %flag矩阵用于记录网格图中的某一列是否被访问过 flag=zeros(1,number_of_states); if istate_metric(j+1,1). +branch_metric)|flag(nextstate(j+1,l+1)+1)=0) %下一个状态的汉明距离(临时值)=当前状态的汉明距离(确定值)+ 码间距离 state_metric(nextstate(j+1,l+1)+1,2)=state_metric(j+1,1)+branch_metric; %survivor_state数组的一维坐标为下一个状态值,二维坐标为此状态 %在网格图中的列位置,记录的数值为当前状态,这样就可以从网格图中 %某位置的某个状态得出其对应上一个列位置的状态,从而能很方便的完 %成译码过程。 survivor_state(nextstate(j+1,l+1)+1,i+1)=j; flag(nextstate(j+1,l+1)+1)=1;%指示该状态已被访问过 end end end state_metric=state_metric(:,2:-1:1);%移动state_metric,将临时值移为确 定值 f61060621c43eff43ccce4800d85a6c5.pdf 信道编码的仿真 97601 班 陈鹏 第 24 页 共 59 页 end %开始尾部信道输出解码 for i=depth_of_trellis-L+2:depth_of_trellis flag=zeros(1,number_of_states); % 状态数从number_of_statesnumber_of_states/2.21 %程序说明同上,只不过输入矢量只为0 last_stop=number_of_states/(2(i-depth_of_trellis+L-2)*k); for j=0:last_stop-1 branch_metric=0; binary_output=deci2bin(output(j+1,1),n); for ll=1:n branch_metric=branch_metric+metric(channel_output_matrix(ll,i),binary_output(ll) ; end if(state_metric(nextstate(j+1,1)+1,2)state_metric(j+1,1). +branch_metric)|flag(nextstate(j+1,1)+1)=0) state_metric(nextstate(j+1,1)+1,2)=state_metric(j+1,1)+branch_metric; survivor_state(nextstate(j+1,1)+1,i+1)=j; flag(nextstate(j+1,1)+1)=1; end end state_metric=state_metric(:,2:-1:1); end %从最佳路径中产生解码 %译码过程可从数组survivor_state的最后一个位置向前逐级译码 state_sequence=zeros(1,depth_of_trellis+1); %survivor_state数组的最后的输出状态肯定是“0” state_sequence(1,depth_of_trellis)=survivor_state(1,depth_of_trellis+1); %逐级译码过程 for i=1:depth_of_trellis state_sequence(1,depth_of_trellis- i+1)=survivor_state(state_sequence(1,depth_of_trellis+2-i). +1),depth_of_trellis-i+2); end decorder_output_matrix=zeros(k,depth_of_trellis-L+1); for i=1:depth_of_trellis-L+1 %根据数组input的定义来得出从当前状态到下一个状态的输入信号矢量 dec_output_deci=input(state_sequence(1,i)+1,state_sequence(1,i+1)+1); %转成二进制信号 dec_output_bin=deci2bin(dec_output_deci,k); %将一次译码存入译码输出矩阵decoder_output_matrix相应的位置 decoder_output_matrix(:,i)=dec_output_bin(k:-1:1); end f61060621c43eff43ccce4800d85a6c5.pdf 信道编码的仿真 97601 班 陈鹏 第 25 页 共 59 页 %按照一维序列形式重新组织输出 decoder_output=reshape(decoder_output_matrix,1,k*(depth_of_trellis-L+1); %state_metric为网格图最后一个列位置中“0”状态位置的汉明距 %离,这个值就是整个译码过程中的汉明距离。 cumulated_metric=state_metric(1,1); %卷积码的维特比译码函数 %nxt_stat.m 记录状态函数 %next_state用于记录下一个状态的值 %memory_contents用于记录 function next_state,memory_contents=nxt_stat(current_state,input,L,k) %将当前状态值(十进制)转成位数为k*(L-1)的二进制 binary_state=deci2bin(current_state,k*(L-1); %将输入状态值(十进制)转成位数为k的二进制序列 binary_input=deci2bin(input,k); %寄存器组的下一个状态值(二进制) next_state_binary=binary_input,binary_state(1:(L-2)*k); %将寄存器组的下一个状态值(二进制)转成十进制 next_state=bin2deci(next_state_binary); %用memory_contents来记录各个寄存器在下一个状态下的信息(二进制) %以便与生成矩阵相乘得出输出 memory_contents=binary_input,binary_state; %nxt_stat.m 记录状态函数 function y=bin2deci(x) %bin2dec.m 二进制序列转换十进制数值函数 %x 二进制序列 %y 十进制数值 li=length(x); y=(li-1:-1:0); y=2.y; y=x*y; %bin2dec.m 二进制序列转换十进制数值函数 function y=deci2bin(x,li) %dec2bin.m 十进制数值转换二进制序列函数 y=zeros(1,li); i=1; while x=0 %ce55_cnv_jznocnv_74.m 二进制双极性级联码(循环等差交织)通信系统的蒙特卡罗 仿真绘图 运行结果运行结果 为便于分析,下图将(2,1,3)卷积编码系统的仿真结果、 (7,4) HAMMING 编码系统的仿真结果、级联码两种交织方式各自的仿真结果,以及未 编码系统的仿真结果和未编码系统的理论值曲线绘制在一起(即 ce55_74 的运行结 果和 ce55_cnv_jznocnv_74 的运行结果) 。 1 卷积交织和循环等差交织两种交织编码的比较: 由图可见,以仅内码时的曲线(即(2,1,3)卷积编码系统仿真结果) 为基准,循环等差交织对应的曲线始终位于仅内码时的曲线下方;而卷积交 织对应的曲线在信噪比低于 2dB 时位于仅内码时的曲线下方,在信噪比等于 2dB 时与仅内码时的曲线交叉,在信噪比高于 2dB 时才位于仅内码时的曲线 下方和循环等差交织对应的曲线上方之间,在信噪比为 3dB 到 4dB 的范围时, 卷积交织对应的曲线和循环等差交织对应的曲线重合,在信噪比高于 3dB 时 卷积交织对应的曲线才位于循环等差交织对应的曲线下方。因此,我们只能 初步推论,卷积交织和循环等差交织性能接近,在信噪比为 4dB 到 5dB 的范 围时,卷积交织性能稍优于循环等差交织,在信噪比高于 5dB 时因为受仿真 序列长度限制,测不到误码率有效值,无法作出判断(受仿真设备和时间复 杂度限制,无法增加仿真序列长度的数量级) 。 2 HAMMING 码、卷积码、级联码(两种交织方式)性能比较 f61060621c43eff43ccce4800d85a6c5.pdf 信道编码的仿真 97601 班 陈鹏 第 40 页 共 59 页 如图所示,相同信噪比条件下,按照仿真结果误码率从高到低顺序依次 为:未编码系统、 (7,4)HAMMING 编码系统、 (2,1,3)卷积编码系统、 级联码编码系统,从而可以得出编码纠错能力从大到小的排序为:级联码 ( 外编码采用(7,4)HAMMING 码,交织编码采用(7,4)卷积交织编码, 内编码采用(2,1,3)卷积码 ) 、 (2,1,3)卷积码、 (7,4)HAMMING 码。 信道编码与扩频通信信道编码与扩频通信 直接扩频技术是二十一世纪通信的主要潮流之一。特别是在移动通信领域, 码分多址已经成为公认的二十一世纪蜂窝式移动通信基本特征。故而通过仿真手 段讨论扩频通信与信道编码的关系,具有相当重要的现实意义。从某种意义上说, 直接扩频技术也可以看作一种信道编码的分组编码形式,编译码都是通过码序列 分组和同一个 PN 码的乘运算实现。应用这一思想,可以进行二进制双极性扩频通 信系统的蒙特卡罗仿真。 二进制双极性扩频通信系统的蒙特卡罗仿真二进制双极性扩频通信系统的蒙特卡罗仿真 双用户二进制双极性扩频通信系统的蒙特卡罗仿真模型双用户二进制双极性扩频通信系统的蒙特卡罗仿真模型 均匀随机数 发生器 f61060621c43eff43ccce4800d85a6c5.pdf 信道编码的仿真 97601 班 陈鹏 第 41 页 共 59 页 输出数据1 E r n A sin(wn) E r 输出数据 2 双用户二进制双极性扩频通信系统的蒙特卡罗仿真流程图双用户二进制双极性扩频通信系统的蒙特卡罗仿真流程图 累加判决器 差 错 计 数 器 2 差 错 计 数 器 1 均匀随机数 发生器 比较 二进制 数据源 二进制 数据源 比较 高斯随机数 发生器 PN 码 2(gold 码)同步序列发 生器 PN 码 1(gold 码)同步序列发 生器 累加判决器 正弦干扰 序列发生器 开始 外部输入:信噪比(dB) 初始化变量:信噪比、双用户发送接收信号变量数组、噪声变量数组、 仿真序列长度、循环步长、数据块长、临时变量 清零: 循环计数器和差错计数器、数据块长计数器 循环计数器置 1 生成发送用户 1 数据块模块生成发送用户 2 数据块模块 f61060621c43eff43ccce4800d85a6c5.pdf 信道编码的仿真 97601 班 陈鹏 第 42 页 共 59 页 N Y 为了简化二进制双极性扩频通信系统的蒙特卡罗仿真模型,使我们把主要精 力真正集中于编码仿真本身,本次仿真用户数为 2,PN 码采用长度为 30 的 gold 码。如上图所示,双用户二进制双极性扩频通信系统的蒙特卡罗仿真模型中还加 入了正弦干扰序列发生器,以用来测试扩频技术对人为正弦干扰的抑制作用。在 双用户二进制双极性扩频通信系统的蒙特卡罗仿真流程图中,正弦干扰被视做噪 声的一部分置于叠加噪声模块。 MATLAB 源程序源程序 function p1,p2=ss_Pe94_2105(snr_in_dB,A,w) %ss_Pe94_2105.m 双用户二进制双极性扩频通信系统的蒙特卡罗仿真 %snr_in_dB 信噪比 %p 误码率 %A 正弦干扰幅度 %w 正弦干扰角频率 %PN码采用长度Lc为30的gold码,Lc=length(gold)=30 snr=10(snr_in_dB/10); 生成叠加噪声与人为正弦干扰信号模块 接收用户 1 数据块差错计数模块 循环计数器次数已满? 显示:接收用户 1 差错计数器数值、接收用户 2 差错计数器数值, 计算:接收用户 1 误码率、接收用户 2 误码率 结束 返回值:接收用户 1 误码率、 接收用户 2 误码率 循环计数器加 1 发送用户 1 数据块扩频模块发送用户 2 数据块扩频模块 接收用户 2 数据块差错计数模块 解扩判决接收用户 1 数据块模块解扩判决接收用户 2 数据块模块 f61060621c43eff43ccce4800d85a6c5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 辽宁省朝阳市建平县2024-2025学年初三下学期实战考试数学试题含解析
- 敬老院卧床专业护理培训
- 宁夏医科大学《文学与动画编剧》2023-2024学年第二学期期末试卷
- 怀化职业技术学院《电机学与电力拖动基础》2023-2024学年第二学期期末试卷
- 无锡科技职业学院《中医统计学》2023-2024学年第一学期期末试卷
- 深圳职业技术大学《建筑概论人居环境科学》2023-2024学年第二学期期末试卷
- 山东省桓台第一中学2025年高考适应性测试试卷(生物试题理)试题含解析
- 天津市红桥区2025届高三冲刺模考物理试题含解析
- 四川省德阳市什邡中学2024-2025学年高三第一次月考物理试题文试题含解析
- 宁夏警官职业学院《西班牙语》2023-2024学年第一学期期末试卷
- 飞机知识科普儿童课件
- 信息化运维服务服务质量保障方案
- 外科学教学课件:颈、腰椎退行性疾病
- 2024年03月湖南省韶山思政教育实践中心2024年招考5名合同聘用制教师笔试近6年高频考题难、易错点荟萃答案带详解附后
- 2023年鲁迅美术学院附属中学(鲁美附中)中考招生语文数学英语试卷
- 天耀中华合唱简谱大剧院版
- 强制执行股东分红申请书
- 酒店前厅部沟通技巧
- 车队事故分析报告总结
- 药品追溯系统培训课件模板
- 工业园区的消防安全管理课件
评论
0/150
提交评论