卷积码编译码程序.docx

上传人:b****3 文档编号:13284243 上传时间:2023-06-12 格式:DOCX 页数:7 大小:15.72KB
下载 相关 举报
卷积码编译码程序.docx_第1页
第1页 / 共7页
卷积码编译码程序.docx_第2页
第2页 / 共7页
卷积码编译码程序.docx_第3页
第3页 / 共7页
卷积码编译码程序.docx_第4页
第4页 / 共7页
卷积码编译码程序.docx_第5页
第5页 / 共7页
卷积码编译码程序.docx_第6页
第6页 / 共7页
卷积码编译码程序.docx_第7页
第7页 / 共7页
亲,该文档总共7页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

卷积码编译码程序.docx

《卷积码编译码程序.docx》由会员分享,可在线阅读,更多相关《卷积码编译码程序.docx(7页珍藏版)》请在冰点文库上搜索。

卷积码编译码程序.docx

卷积码编译码程序

这是我搜集整理的一个关于卷积编码和Viterbi译码的Matlab程序,现在把它们放在这里,希望对需要的人有些帮助。

  卷积编码程序:

function[output,len_tal]=cnv_encd(secrettext,encodetext)

g=[00100100;00000001;10000001;01001101];

k0=1;

%读入文本文件并计算文件长度

frr=fopen(secrettext,'r');

[msg,len]=fread(frr,'ubit1');

msg=msg';

%checktoseeifextrazeropaddingisnecessary

ifrem(length(msg),k0)>0

   msg=[msg,zeros(size(1:

k0-rem(length(msg),k0)))];

end

n=length(msg)/k0;         %把输入比特按k0分组,n为所得的组数。

%checkthesizeofmatrixg

ifrem(size(g,2),k0)>0

   error('Error,gisnotoftherightsize.');

end

%determineLandn0

L=size(g,2)/k0;

n0=size(g,1);

%addextrazeros,以保证编码器是从全0开始,并回到全0状态。

u=[zeros(size(1:

(L-1)*k0)),msg,zeros(size(1:

(L-1)*k0))];

%generateuu,amatrixwhosecolumnsarethecontentsofconv.encoderat

%variousclockcycles.

u1=u(L*k0:

-1:

1);

fori=1:

n+L-2

   u1=[u1,u((i+L)*k0:

-1:

i*k0+1)];

end

uu=reshape(u1,L*k0,n+L-1);

%determinetheoutput

output=reshape(rem(g*uu,2),1,n0*(L+n-1));

len_tal=n0*(L+n-1);

%writetheoutputtotheencodetext

result=fopen(encodetext,'w');

fori=1:

n0*(L+n-1)

   fwrite(result,output(i),'bit1');

end

fclose(result);

  Viterbi译码程序:

function[decoder_output,survivor_state,cumulated_metric]=viterbi(channel_output,decodetext)

tic

G=[00100100;00000001;10000001;01001101];

k=1;

frr=fopen(channel_output,'r');

[msg,len]=fread(frr,'ubit1');

channel_output=msg';

n=size(G,1);

%checkthesizes

ifrem(size(G,2),k)~=0

   error('channel_outputnotoftherightsize');

end

L=size(G,2)/k;

number_of_states=2^((L-1)*k);

%generatestatetransitionmatrix,outputmatrix,andinputmatrix

forj=0:

number_of_states-1

   fori=0:

2^k-1

       [next_state,memory_contents]=nxt_stat(j,i,L,k);

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

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

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

       output(j+1,i+1)=bin2deci(branch_output);

   end

end

%addtheextrazero,ensurethelengthofchannel_outputisintegral

%timeston.

ifrem(len,n)>0

   channel_output=[channel_output,zeros(size(n-rem(len,n):

-1:

1))];

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);

%startdecodingofnon-tailchanneloutputs

fori=1:

depth_of_trellis-L+1

   flag=zeros(1,number_of_states);

   ifi<=L

       step=2^((L-i)*k);

   else

       step=1;

   end

   forj=0:

step:

number_of_states-1

       forl=0:

2^k-1

           branch_metric=0;

           binary_output=deci2bin(output(j+1,l+1),n);

           forr=1:

n

               branch_metric=branch_metric+metric(channel_output_matrix(r,i),binary_output(r));

           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;

               suvivor_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

%startdecodingofthetailchannel-outputs

fori=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));

   forj=0:

last_stop-1

       branch_metric=0;

       binary_output=deci2bin(output(j+1,1),n);

       forr=1:

n

               branch_metric=branch_metric+metric(channel_output_matrix(r,i),binary_output(r));

       end

       if((state_metric(nextstate(j+1,l+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;

               suvivor_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

%generatethedecodeoutputfromtheoptimalpath

state_sequence=zeros(1,depth_of_trellis+1);

state_sequence(1,depth_of_trellis)=survivor_state(1,depth_of_trellis+1);

fori=1:

depth_of_trellis

   state_sequence(1,depth_of_trellis-i+1)=suvivor_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);

fori=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);

%writetheoutputtotheencodetext

result=fopen(decodetext,'w');

fori=1:

k*(depth_of_trellis-L+1)

   fwrite(result,decoder_output(i),'bit1');

end

fclose(result);

toc

%*************************************************************************%

functiondistance=metric(x,y)

ifx==y

   distance=0;

else

   distance=1;

end

%************************************************************************%

function[next_state,memory_contents]=nxt_stat(current_state,input,L,k)

binary_state=deci2bin(current_state,k*(L-1));

binary_input=deci2bin(input,k);

next_state_binary=[binary_input,binary_state(1:

(L-2)*k)];

next_state=bin2deci(next_state_binary);

memory_contents=[binary_input,binary_state];

%************************************************************************%

functiony=bin2deci(x)

l=length(x);

y=(l-1:

-1:

0);

y=2.^y;

y=x*y';

%************************************************************************%

functiony=deci2bin(x,L)

y=zeros(1,L);

i=1;

whilex>=0&i<=L

   y(i)=rem(x,2);

   x=(x-y(i))/2;

   i=i+1;

end

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 唐诗宋词

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2