function [decoder_output,survivor_state,cumulated_metric]=viterbi_decoder(G,k,channel_output)
n=size(G,1);
if rem(size(G,2),k)~=0
error('Size of G and k do not agree')
end
if rem(size(channel_output,2),n)~=0
error('Channel out not of the right size')
end
L=size(G,2)/k;
number_of_states=2^((L-1)*k);
for j=0:number_of_states-1
for l=0:2^k-1
[next_state,memory_contents]=nxt_stat(j,l,L,k);
input(j+1,next_state+1)=l;
branch_output=rem(memory_contents*G',2);
nextstate(j+1,l+1)=next_state;
output(j+1,l+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);
%body encoder
for i=1:depth_of_trellis-L+1
flag=zeros(1,number_of_states);
if i<=L
step=2^((L-i)*k);
else
step=1;
end
for j=0:step:number_of_states-1
for l=0:2^k-1
branch_metric=0;
binary_output=deci2bin(output(j+1,l+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,l+1)+1,2)>state_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(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);
end
%tailer encoder
for i=depth_of_trellis-L+2:depth_of_trellis
flag=zeros(1,number_of_states);
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
state_sequence=zeros(1,depth_of_trellis+1);
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
decoder_output_matrix=zeros(k,depth_of_trellis-L+1);
for i=1:depth_of_trellis-L+1
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(:,i)=dec_output_bin(k:-1:1)';
end
decoder_output=reshape(decoder_output_matrix,1,k*(depth_of_trellis-L+1));
cumulated_metric=state_metric(1,1);
没有合适的资源?快使用搜索试试~ 我知道了~
MATLAB中的卷积码M文件
共102个文件
m:101个
txt:1个
4星 · 超过85%的资源 需积分: 9 75 下载量 111 浏览量
2010-05-06
13:05:50
上传
评论 3
收藏 44KB RAR 举报
温馨提示
卷积码的相关仿真程序!!!不下就可惜了!!!!!!!!!!!!!!!
资源推荐
资源详情
资源评论
收起资源包目录
MATLAB中的卷积码M文件 (102个子文件)
viterbi_decoder.m 3KB
viterbi_decoder.m 3KB
viterbi_decoder.m 3KB
viterbi_encoder.m 2KB
viterbi_encoder.m 2KB
TchFsPe_GauBur.m 2KB
ConPe_GauBur.m 2KB
TchFsPe_Gauss.m 1KB
ConPe_Gauss.m 1KB
ConIntPe_GauBur.m 1KB
ConPe_Burst.m 1KB
ConPe214_GauBur.m 1KB
ConIntPe_Burst.m 1KB
ConIntPe_Gauss.m 1KB
ConPe214_Burst.m 1KB
CycPe_GauBur.m 1KB
CycPe_Burst.m 1KB
ConPe214_Gauss.m 1KB
CycPe_Gauss.m 1KB
TchFsTest.m 1KB
viterbi_encoder.m 1006B
ConErr_GauBur.m 847B
Interlace8Test1.m 841B
ConErr_GauBur_Compare.m 837B
ConErr_Gauss.m 824B
ConErr_Gauss_Compare.m 823B
ConErr_Burst_Compare.m 823B
ConErr_Burst.m 759B
ConverTest.m 737B
Con_VS_ConInt_Err_GauBur.m 615B
ConverTest1.m 602B
Con_VS_ConInt_Err_Gauss.m 601B
Con_VS_ConInt_Err_Burst.m 601B
ConverTest2.m 546B
CycErr_GauBur.m 523B
NoiseChannelErr.m 519B
T_FS_EX_DE.m 517B
ConIntErr_GauBur.m 515B
CycErr_Gauss.m 511B
CycErr_Burst.m 510B
T_FS_EX_DE2.m 506B
IntPe_GauBur.m 505B
ConIntErr_Gauss.m 505B
ConIntErr_Burst.m 500B
BurstPe.m 499B
ConverTest3.m 498B
BurstPe.m 497B
BurstPe.m 496B
BurstPe.m 496B
GauBurPe.m 491B
GauBurPe.m 489B
GauBurPe.m 489B
GauBurPe.m 489B
GauBurPe.m 489B
TchFsErr_GauBur.m 487B
TchFsErr_Gauss.m 475B
T_FS_EX_EN.m 469B
T_FS_IN_DE.m 462B
T_FS_EX_EN.m 459B
GaussErr.m 450B
IntErr_GauBur.m 417B
T_FS_EX_DE1.m 415B
IntErr_Burst.m 407B
T_FS_IN_EN.m 395B
BurstNoise.m 376B
BurstNoise.m 376B
BurstNoise.m 376B
BurstNoise.m 376B
BurstNoise.m 376B
IntPe_Burst.m 363B
COUNTER_WEAVE_8.m 328B
COUNTER_WEAVE_8.m 328B
COUNTER_WEAVE_8.m 328B
INTER_WEAVE_8.m 307B
INTER_WEAVE_8.m 307B
INTER_WEAVE_8.m 307B
GaussPe.m 300B
GaussPe.m 300B
GaussPe.m 300B
GaussPe.m 300B
nxt_stat.m 297B
nxt_stat.m 297B
nxt_stat.m 297B
GauBurErr.m 282B
BurstErr.m 266B
T_FS_IN_DE214.m 244B
T_FS_IN_DE214.m 244B
CycTest.m 236B
Interlace8Test2.m 203B
T_FS_IN_EN214.m 190B
T_FS_IN_EN214.m 190B
deci2bin.m 129B
deci2bin.m 129B
deci2bin.m 129B
metric.m 81B
metric.m 81B
metric.m 81B
bin2deci.m 69B
bin2deci.m 69B
bin2deci.m 69B
共 102 条
- 1
- 2
lovefortj
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页