软Viterbi译码实现

÷

÷

Guest
嗨,
大家能否请上传一些软执行Viterbi译码器的好材料?
我需要非常喜欢。Olease帮助。

谢谢

 
我认为本文可以帮助你。
最佳运气!
很抱歉,您还没有登录查看此附件

 
这两个函数的兑换。编码器和Viterbi译码器的软
%------------------------------------------------- --------------------------

功能encoder_out = cnv_encd(七,钾,encoder_in)
%cnv_encd(七,钾,encoder_in)
%决定了二进制卷积编码器输出序列
%G是的卷积码生成矩阵
%与N0期行和L *亩列。其行G1,G2的,...,肾炎。
%k是位进入编码器在每个时钟周期数。
%encoder_in的二进制输入以下。

%检查是否额外的零填充是必要的
如果物权(长度(encoder_in),k)的“0
encoder_in = [encoder_in,零(大小(1:的k -物(长度(encoder_in),钾)))];
末端
ñ =长度(encoder_in)/亩;
%检查矩阵大小,G
如果物权(大小(G,2名),k)的“0
错误('错误,g是不是正确的大小。)
末端
%确定升和N0
1 =密度(g,2)/亩;
N0期=密度(g,1);
%,添加额外的零
ü = [零(大小(1

<img src="http://www.edaboard.com/images/smiles/icon_sad.gif" alt="悲哀的" border="0" />

L - 1时)* k)段),encoder_in,零(大小(1

<img src="http://www.edaboard.com/images/smiles/icon_sad.gif" alt="悲哀的" border="0" />

L - 1时)* k)条)];
%产生支原体,矩阵的列的内容
%转换。编码器在不同的时钟周期。
U1的= u(下升*亩:-1:1);
对于i = 1:无十l - 2
U1的= [U1的,u(下(1 1)*亩:-1:我*亩1)];
末端
支原体=重塑(U1的,升*钾
> 氮
> 十l - 1);
%确定输出
encoder_out =重塑(雷姆(七*支原体,2),1,N0期*(1 的N - 1));%------------------------------------------------- --------------------------------

函数[decoder_out,survivor_state,cumulated_metric] = viterbi_soft(七,钾,decoder_in)
%维特比卷积码的Viterbi译码器
%[decoder_out,survivor_state,cumulated_metric] =维特(七,钾,decoder_in)
%G是anx路加福音矩阵
, 其中每一行
%确定从移位寄存器的连接
%的n次输出的代码,钾/ n是代码的速度。
%survivor_state是矩阵显示最优路径通过
%的网格。度量在一个单独的函数度量(的x,y提供)
%,并可以指定
, 以适应软
, 硬的决定。
%,该算法最大限度地度量
, 而不是最大化
%的可能性。

ñ =密度(g,1);
%检查的大小
如果物权(大小(G,2名),k)的〜= 0
错误('G和K的大小不同意')
末端
如果物权(大小(decoder_in,2),n)的〜= 0
错误('没有合适的大小')声道输出
末端
1 =密度(g,2)/亩;
number_of_states = 2 ^((L - 1时)* k)款;
%生成状态转移矩阵,输出矩阵和输入矩阵
办理J = 0:number_of_states - 1
为1 = 0时02 ^的K - 1
[next_state,memory_contents] = nxt_stat(十,L区,k)的;
输入(十1,next_state 1)= 1;
branch_output =物(memory_contents *摹',2);
nextstate(十1,升1)= next_state;
输出(十1,升1)= bin2deci(branch_output);
末端
末端
state_metric =零(number_of_states,2);
depth_of_trellis =长度(decoder_in)/ n的;
decoder_in_matrix =重塑(decoder_in,氮,depth_of_trellis);
survivor_state =零(number_of_states,depth_of_trellis 1);
%启动非解码尾通道输出
对于i = 1:depth_of_trellis - 1 1
旗=零(1,number_of_states);
如果我“=蜇
步= 2 ^((李)* k)款;
其他的
步= 1;
末端
J = 0时为:第一步:number_of_states - 1
为1 = 0时02 ^的K - 1
branch_metric = 0;
%binary_output =(的(1,n)的-2 * deci2bin(输出(十1,升1),n)段);
binary_output = deci2bin(输出(十1,升1),n)的;
为LL = 1:无
branch_metric = branch_metric 绝对值(decoder_in_matrix(当地雇员,1)- binary_output(1.1));
末端
如果((state_metric(nextstate(十一报一) 1,2)“state_metric(十 1,1)...
branch_metric)|标志(nextstate(十1,升1) 1)== 0)
state_metric(nextstate(十一报一) 1,2)= state_metric(十 1,1) branch_metric;
survivor_state(nextstate(十一报一)一,我 1)=焦耳;
旗(nextstate(十1,升1) 1)= 1;
末端
末端
末端
state_metric = state_metric(:,2:-1:1);
末端
%开始尾部通道解码输出
对于i = depth_of_trellis - 1 2:depth_of_trellis
旗=零(1,number_of_states);
last_stop = number_of_states /(2 ^((一depth_of_trellis十L - 2)* k)段);
办理J = 0:last_stop - 1
branch_metric = 0;
%binary_output =(的(1,n)的-2 * deci2bin(输出(十 1,1),n)段);
binary_output = deci2bin(输出(十 1,1),n)的;
为LL = 1:无
branch_metric = branch_metric 绝对值(decoder_in_matrix(当地雇员,1)- binary_output(1.1));
末端
如果((state_metric(nextstate(十 1,1) 1,2)“state_metric(十 1,1)...
branch_metric)|标志(nextstate(十 1,1) 1)== 0)
state_metric(nextstate(十 1,1) 1,2)= state_metric(十 1,1) branch_metric;
survivor_state(nextstate(十 1,1)1,我 1)=焦耳;
旗(nextstate(十 1,1) 1)= 1;
末端
末端
state_metric = state_metric(:,2:-1:1);
末端
%生成的最优路径解码器的输出
state_sequence =零(1,depth_of_trellis 1);
state_sequence(1,depth_of_trellis)= survivor_state(1,depth_of_trellis 1);
对于i = 1:depth_of_trellis
state_sequence(1,depth_of_trellis - 1 1)= survivor_state((state_sequence(1,depth_of_trellis 2一)...
1),depth_of_trellis - 1 2);
末端
decodeder_output_matrix =零(金,depth_of_trellis - 1 1);
对于i = 1:depth_of_trellis - 1 1
dec_output_deci =输入(state_sequence(1,1)1,state_sequence(1,我 1) 1);
dec_output_bin = deci2bin(dec_output_deci,k)的;
decoder_out_matrix(:,1)= dec_output_bin(金:-1:1)';
末端
decoder_out =重塑(decoder_out_matrix,1,钾*(depth_of_trellis - 1 1));
cumulated_metric = state_metric(1,1);

 
您好ahmedseu,
非常感谢u给我软Viterbi译码器的代码。

u能请给我一份文件,让我可以很容易理解。

谢谢

 
亲爱的全部,
任何一个可以提供者在VHDL或拱次eviterbi解码器的主文件的执行情况我

 
亲爱的,
如果有可能
, 我们可以通过电子邮件联系
, 如果u want.I写了4state K二2 rate1代码/ 2艰难的决定在维特比第一份文件中提到的例子Viterbi译码器。
我现在开始尝试另之一
, 但软的决定,所以我们可以交流在这一领域的知识。
最好的问候

 
plz我需要用C语言plz Viterbi译码器的执行情况
, 如果有布比能提供任何形式的帮助
, 以实现它的DSP处理器

 

Welcome to EDABoard.com

Sponsor

Back
Top