C语言卷积码(附注释)

主函数 main.m clear;clc; msg = randint(1,20,[0,1]) word = encode_conv213(msg) word(1) =~word(1); %信道中存在污染,人为的模拟传输过 word(10) =~word(10); 程中的出错码字 word(15) =~word(15); word1=word msg_1 = decode_conv213(word1) msg-msg_1 状态积 state_machine.m function [output,nextState] = state_machine(input,current_state) output(1) = mod(current_state(1)+current_state(3),2); output(2) = mod(input+current_state(2)+current_state(1),2); nextState(1) = current_state(2); nextState(2) = current_state(3); nextState(3) = input; 汉明距离 hamming_distance.m function distance = hamming_distance(a,b) temp = a+b; temp = mod(temp,2); distance = sum(temp);

编码程序 encode_conv213.m function word = encode_conv213(msg) word = zeros(1,length(msg)*2); current = [0 0 0]; for i = 1:length(msg) [out,next] = state_machine(msg(i),current); current = next; word(2*i-1) = out(1); word(2*i) = out(2); end 维比特译码 decode_conv213.m function msg = decode_conv213(word)
1

chip = 10; %初始状态选十个信息 for i = 1:2^chip M(i,:) = de2bi(i-1,chip); %把所有可能性按二进制输出 W(i,:) = encode_conv213(M(i,:)); %得到相应的二进制编译后的码字 D(i) = hamming_distance(W(i,:),word(1:chip*2)); %与出错码字 对比得到汉明距 end [val,index] = sort(D); %val 中存汉明距从小到大排列,index 中存对应 val 数据所在位置 ret_msg = zeros(1,length(word)/2); %开辟译出码字的存放空间 for i = 1:6 %1024 种选择 6 种最小距离,并输出在 ret_msg 中,最小汉明距 存于 ret_dis ret_msg(i,1:chip) = M(index(i),:); ret_dis(i) = D(index(i)); end iter = (length(word)-chip*2)/2; %剩余要译出的码字个数 for i=1:iter %迭代过程 for j=1:6 msg_temp1 = [ret_msg(j,1:chip+i-1) 0]; %下一状态出“0” msg_temp2 = [ret_msg(j,1:chip+i-1) 1]; %下一状态出“1” word_temp1 = encode_conv213(msg_temp1); %下一状态为“0”时的 编码 word_temp2 = encode_conv213(msg_temp2); %下一状态为“1”时 的编码 dis_temp1 = hamming_distance(word_temp1,word(1:chip*2+2*i)); dis_temp2 = hamming_distance(word_temp2,word(1:c hip*2+2*i)); %算两种汉明距 if (dis_temp1<dis_temp2) ret_msg(j,1:chip+i) = msg_temp1; ret_dis(j) = dis_temp1; else ret_msg(j,1:chip+i) = msg_temp2; ret_dis(j) = dis_temp2; %选择较小汉明距的状态储存并输 出在 ret_msg 中,最小汉明距存 于 ret_dis end end end [val,index] = sort(ret_dis); %把最终选择的 6 种最小汉明距按从小 到大排列 msg =ret_msg(index(1),:); %选出维特比译码最小的距离所译出的信息

2


相关文档

C语言线性分组码(附注释)
(2,1,3)卷积码C语言
C语言线性分组码附注释
C语言编写规范之注释
删除C程序的注释 (C 语言)
卷积码编码程序的c语言实现
去掉C语言程序中的注释附源代码(转)
C语言程序实例(编译通过含注释)
C语言算术编解码(附注释)
C语言程序解释—注释
学霸百科
65322876文学网 653228761php网站 653228762jsp网站 653228763小说站 653228764算命网 653228765占卜网 653228766星座网 电脑版 | 学霸百科