MATLAB实现卷积码编译码(6)

2019-04-21 14:34

聊城大学本科毕业论文(设计)

图3-2 (2,1,3)卷积码编码

3.3 信道传输过程仿真

为了方便起见,我们采用了二相相移键控(BPSK),也就是用二进制基带信号(0、1)对载波进行二相调制。BPSK是最简单的PSK形式,相移大小为 180°,又可称为2-PSK。当基带信号为1时对应相位为π,而当基带信号为0时,对应的相位为-π。根据这个理论,我们对BPSK的调制过程作了模拟仿真,用一个简短的程序对BPSK的全过程进行了观察。程序代码如下: function [bpsk_output]=bpsk_1(g);

g=[1 1 0 1 0 1 0 0 1 0 1 1]; %卷积码编码输出信号 cp=[];bit=[]; for n=1:length(g); if g(n)==0;

die=-ones(1,100); %使得信号在坐标为0到100皆为-1,生成图线 se=zeros(1,100); else g(n)==1; die=ones(1,100); se=ones(1,100);

21

聊城大学本科毕业论文(设计)

end

cp=[cp die]; bit=[bit se]; end

snr_db=35; %可以调整变化的信噪比同时考虑信道中可能存在的噪声

noise=randn(1,length(bpsk)); %随机噪声 sigma=sqrt(5)*10^(-(snr_db)/20);

recv=bpsk+3*sigma*noise; %产生的噪声叠加在bpsk上

仿真结果如图3-3所示。在matlab运行时,我们对信道高斯白噪声进行模拟,通过调节信噪比,我们可以清晰地观察到噪声对BPSK调制的影响,信噪比越大,传输的信号所受干扰越小,传输越准确。

图3-3 模拟信道传输

3.4维特比译码程序及仿真

信号通过bpsk调制后在信道中传输,到达接收端时,先要进行解调,判决代码为

for j=1:length(recv); if recv(j)>0; recv(j)=1;

22

聊城大学本科毕业论文(设计)

else recv(j)=0; end end

3.4.1 维特比译码算法解析

Viterbi算法是通过加-比较-选择来实现的,状态量度的计算方法如下:将前两个状态点上的状态量度和相应分支量度相加,得到的两个可能路径量度作为新的状态量度的候选项,送入逻辑单元中进行比较,将其中似然性最大(距离最小)的一个作为状态的新状态量度存储,同时存储的还有状态新的路径记录,主要算法步骤为:

(1)将接收到的序列分成每段长为n0的m组子序列。

(2)对所研究的码画出深度为m级的网格图。对该网格图的最后(L-1)级仅画出对应于全0输入序列的路径。

(3)置s=1,并置初始全0状态的度量等于0。

(4)对网格图中全部连接第s级状态到(s+1)级状态的支路求出该接收序列中的第s个子序列的距离。

(5)将这些距离加到第s级各状态的度量上去,得到对第(s+1)级状态的度量候选者。对于第(s+1)级的每一状态,有2k0错误!未找到引用源。个候选度量,其中每一个都对应终止在那个状态的一条支路。

(6)对在第(s+1)级的每一状态,挑选出最小的候选度量,并将对应于这个最小值的支路标以留存支路,同时指定之歌候选度量的最小值作为第(s+1)级状态的度量值。

(7)若s=m,转到下一步;否则将s增加1并转到第4步。

(8)在第(m+1)级以全0状态开始,沿着留存支路通过网格图往会到达初始全0状态,这条路径就是最佳路径,并且对应于这条路径的输入比特序列是最大似然解码序列。为了得到有关这个输入比特序列最好的推测,将最后(L-1)k0个0从该序列中除掉。

根据算法绘出程序流程图如图3-4示:

23

聊城大学本科毕业论文(设计)

程序初始化,将路径信息和当前累计度量值清零,统计码长 对前两步进行汉明距度量并保存路径信息 是否解码完成 否 计算能到达当前状态的两条路径 是 将两条路径a,b输出与输入比较汉明距,并累加到路径度量 否 a路径累计度量是否小于b 是 选a为当前点的最优到达路径 选b为当前点的最优到达路径 选取度量值最小路径输出

图3-4 Viterbi译码流程图

从Viterbi算法中可以看到,对于一个长信息序列解码时,解码延时和所需要的存储量都是无法接受的。直到整个序列全被接收,解码才能开始,而且还不得不将总的留存路径存储起来。实际上,不会引起这些问题的次优解倒是很希望的。一种称为路径存储截断的办法是:在每一级编码器在网格图中仅往会搜索w级,而不回到网格图的出发点。用这种办法在第(w+1)级解码器对相应于网格图第1级的输入比特作出判决,并且未来的接收比特不改变这个判决。这意味着解码

24

聊城大学本科毕业论文(设计)

延时是k0w比特,需要保存的路径只相应于最后W级的路径。计算机仿真已经表明,如果W>5n,由于路径 存储截断造成的性能下降可忽略不计。

3.4.2 Viterbi译码程序 Viterbi译码主要程序如下: for j=0:number_of_states-1 for m=0:M-1

[next_state,memory_contents]=nxt_stat(j,m,N,k);%调用nxt_stat函数

input(j+1,next_state+1)=m;

branch_output=rem(memory_contents*G',2); %

nextstate数组记录了当前状态j下输入l时的下一个状态

nextstate(j+1,m+1)=next_state;

% output数组记录了当前状态j下输入l时的输出(十进制) output(j+1,m+1)=bin2deci(branch_output); end end

state_metric=zeros(number_of_states,2); depth_of_trellis=length(channel_output)/n;

channel_output_matrix=reshape(channel_output,n,depth_of_trellis); survivor_state=zeros(number_of_states,depth_of_trellis+1); for i=1:depth_of_trellis-N+1 flag=zeros(1,number_of_states); if(i<=N)

step=2^(k*(N-i)); else step=1; end

for j=0:step:number_of_states-1 for m=0:M-1

branch_metric=0;

25


MATLAB实现卷积码编译码(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《培养小学生数学阅读能力的实践与研究》总报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: