维特比译码算法
‘壹’ 求维特比译码程序matlab仿真
%一个是硬判决,一个是软判决的函数,各自存了,然后再调用,注意是两个函数,别弄混了 function decoder_output=viterbi_hard(y,L) global G; n=size(G,1); K=size(G,2); number_of_states=2^(K-1); %------------------------------------------------ %-------------生成各分支的输出-------------------- %------------------------------------------------ for j=0:number_of_states-1 for t=0:1 [next_state,memory_contents]=next_state_fun(j,t,K); input(j+1,next_state+1)=t; branch_output=rem(memory_contents*G',2); nextstate(j+1,t+1)=next_state; output(j+1,t+1)=bin2deci(branch_output); end end %------------------------------------------------ metric_of_states=zeros(1,number_of_states); %各状态的度量metric metric_of_states_c=zeros(number_of_states,2); %各状态两个输入的度量 length_seq=length(y)/n; %符号个数 decoder_output=zeros(1,length_seq-K+1); %解码输出 channel_output_matrix=reshape(y,n,length_seq); %将解调输出的比特按符号排列 survivor_state=zeros(number_of_states,length_seq+1); %留存路径 input_of_state=zeros(number_of_states,length_seq+1,2); %汇聚到各状态的分支对应的输入 state_sequence=zeros(1,length_seq+1); count=zeros(1,number_of_states); for i=1:length_seq-K+1 %------------------------------------------------ for j=0:number_of_states-1 for t=0:1 binary_output=deci2bin(output(j+1,t+1),n); %将各分支的输出转换为2进制 branch_metric=Hamming_dis(channel_output_matrix(:,i)',binary_output); %计算分支度量 count(nextstate(j+1,t+1)+1)=count(nextstate(j+1,t+1)+1)+1; metric_of_states_c(nextstate(j+1,t+1)+1,count(nextstate(j+1,t+1)+1))=metric_of_states(j+1)+branch_metric; %计算累积度量(加) input_of_state(nextstate(j+1,t+1)+1,:,count(nextstate(j+1,t+1)+1))=survivor_state(j+1,:); %该分支所在路径的对应的输入 input_of_state(nextstate(j+1,t+1)+1,i,count(nextstate(j+1,t+1)+1))=t; end; end; %----------------比较汇聚到同一状态的两条路径,选取距离较小的----------------- for j=0:number_of_states-1 if metric_of_states_c(j+1,1)>=metric_of_states_c(j+1,2) metric_of_states(j+1)=metric_of_states_c(j+1,2); survivor_state(j+1,:)=input_of_state(j+1,:,2); else metric_of_states(j+1)=metric_of_states_c(j+1,1); survivor_state(j+1,:)=input_of_state(j+1,:,1); end; end; count=zeros(1,number_of_states); %--------------------------截短输出------------------------------------ if i>L [min_metric,location]=min(metric_of_states); decoder_output(i-L)=survivor_state(location,i-L); end; end %---------------------最后L个比特译码输出-------------------------------- [min_metric,location]=min(metric_of_states); decoder_output(length_seq-K+1-L+1:length_seq-K+1)=survivor_state(location,length_seq-K+1-L+1:length_seq-K+1); ========================华丽的分割线================================= %以上为硬判决,一下为软判决 function decoder_output=viterbi_soft(y,L) global G; n=size(G,1); K=size(G,2); number_of_states=2^(K-1); for j=0:number_of_states-1 for t=0:1 [next_state,memory_contents]=next_state_fun(j,t,K); input(j+1,next_state+1)=t; branch_output=rem(memory_contents*G',2); nextstate(j+1,t+1)=next_state; output(j+1,t+1)=bin2deci(branch_output); end end metric_of_states=zeros(1,number_of_states); metric_of_states_c=zeros(number_of_states,2); length_seq=length(y)/n; decoder_output=zeros(1,length_seq-K+1); channel_output_matrix=reshape(y,n,length_seq); survivor_state=zeros(number_of_states,length_seq+1); input_of_state=zeros(number_of_states,length_seq+1,2); state_sequence=zeros(1,length_seq+1); count=zeros(1,number_of_states); for i=1:length_seq-K+1 flag=zeros(1,number_of_states); for j=0:number_of_states-1 for t=0:1 binary_output=deci2bin(output(j+1,t+1),n); branch_metric=cor_dis(channel_output_matrix(:,i)',binary_output); count(nextstate(j+1,t+1)+1)=count(nextstate(j+1,t+1)+1)+1; metric_of_states_c(nextstate(j+1,t+1)+1,count(nextstate(j+1,t+1)+1))=metric_of_states(j+1)+branch_metric; input_of_state(nextstate(j+1,t+1)+1,:,count(nextstate(j+1,t+1)+1))=survivor_state(j+1,:); input_of_state(nextstate(j+1,t+1)+1,i,count(nextstate(j+1,t+1)+1))=t; end; end; for j=0:number_of_states-1 if metric_of_states_c(j+1,1)<=metric_of_states_c(j+1,2) metric_of_states(j+1)=metric_of_states_c(j+1,2); survivor_state(j+1,:)=input_of_state(j+1,:,2); else metric_of_states(j+1)=metric_of_states_c(j+1,1); survivor_state(j+1,:)=input_of_state(j+1,:,1); end; end; count=zeros(1,number_of_states); if i>L [max_metric,location]=max(metric_of_states); decoder_output(i-L)=survivor_state(location,i-L); end; end [max_metric,location]=max(metric_of_states); decoder_output(length_seq-K+1-L+1:length_seq-K+1)=survivor_state(location,length_seq-K+1-L+1:length_seq-K+1);
‘贰’ 跪求(2,1,8)维特比译码程序,抽头是八进制的247和371,最好是matlab语言编写的!
对不起,阿帮助不了你,我为我连题目都没看懂而感到害羞。
‘叁’ 谁能通俗的讲解下viterbi算法吗
Viterbi 算法是一种动态规划算法,一般用于序列的译码。简单地说,序列中每一个点有一个状态,Viterbi 算法的目的是要找到每一个点的状态,使得这个序列的译码结果全局较优。一般的路径规划算法的搜索空间大
‘肆’ 求助,卷积码的软判决维特比译码的matlab仿真
区间大小是根据喜好确定的吧,越大量化就越准确
如果要进行软译码,那么解调器输出也应该是软的,
即概率信息,可能需要使用软解调算法
‘伍’ 基于单片机的卷积码编码与维特比译码的设计
VHDL实现也可以,编码器我会做,主要是译码器的设计,采用回溯算法 通过打孔方法可以获得1/2编码速度的编码。递归系统编码器的实现比较直接,然而基于,qmVCCV
‘陆’ 求助,有谁做过is95的matlab仿真啊,维特比译码程序看不懂,能不能帮我解释一下啊
YY频道7450欢迎您 已经给你发邮箱了,1107979838的那个QQ邮箱发的,给分吧
‘柒’ 基于matlab 卷积码及其维特比译码算法研究
哥们你现在做完这个毕设了吧?求分享。。。愿把财富值全部奉上!
‘捌’ 如何用R实现Viterbi算法
Viterbi译码算法是由Viterbi于1967年提出的一种最大似然译码办法,译码器根据接收序列R按最大似然准则力图找出正确的原始码序列。随着大规模集成电路技术的发展,采用Viterbi算法的卷积编码技术已成为广泛应用的纠错方案。Viterbi译码过程可用状态表示。Sj,t和Sj N/2,t表示t时刻的两个状态。在t1时刻,这两个状态值根据路径为0或者1,转移到状态S2j,t1和S2j1,t1。每一种可能的状态转移都根据接收到的有噪声的序列R计算路径度量,然后选择出各个状态的最小度量路径(幸存路径)。Viterbi算法就是通过在状态中寻找最小量路径向前回溯L步,最后得到的即为译码输出。
在卷积码(n,k,m)表示法中,参数k表示每次输入信息码位数,n表示编码的输出卷积码位数,m称为约束长度(一些书中采用k=m1为约束长度,也可称(2,1,2)码网格图,r=k/n称为信息率,即编码效率。本文运用的是(2,1,3)码,约速长度为2,状态数为22=-4。
TMS320C6000系列DSPs(数字信号处理器)是TI公司推出的一种并行处理的数字信号处理器,是基于TI的VLIW技术的。本文采用的是TMS320C6211。该处理器的工作频率经过倍频可达到150MHz,每个时钟周期最多可并行执行8条指令,从而可以实现1200MIPS定点运算能力。
‘玖’ 维特比编码和turbo编码的区别
编码与调制是各自独立设计DMT和卷积编码结合后的编码增益比传统编码的编码在这里维特比译码算法的核心是回退的观点,采用动态规划法存储数据
‘拾’ 维特比译码
纠错编码与调制是各自独立设计DMT和卷积编码结合后的编码增益比传统编码的编码在这里维特比译码算法的核心是回退的观点,采用动态规划法存储数据,如果对