加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

《信息论与编码》卷积码的212编码,213编码  212维特比译码

(2011-10-01 21:31:28)
标签:

卷积码

212编码

213编码

212维特比译码

it

分类: 编程天空

'VB实现 form1  代码
'实现卷积码的212编码和译码,213编码
'译码采用德鲁·维特比(Andrew J. Viterbi)译码法

'**********************************程序源码********************************
Dim message, codeout As String
Dim codein() As String
Dim codelen As Integer
Dim error1 As Integer

Private Sub Form_Load()
Text3.Text = ""
Text2.Text = ""
Text1.Text = ""
End Sub

Private Sub Command2_Click()              '212 译码**************************
Dim n, k, L As Integer
message = Text1.Text
k = Len(message)
L = 2: n = 2
codein1 = Text2.Text
codelen = Len(codein1) / 2
ReDim Preserve codein(Len(codein1) - 1) As String
For a = 0 To Len(codein1) - 1
codein(a) = Mid(codein1, a + 1, 1)
Next a
accepterror = 2
error1 = accepterror + 1
codeout = ""
Call turnnext(0, 0, "", 0)
Text3.Text = codeout
End Sub

Public Sub turnnext(step%, statu%, now$, err%)
If step >= codelen Then
       If err < error1 Then
       codeout = now: error1 = err
       End If
 Else
       If err > error1 Then Exit Sub
 Dim tempr%
 tempr = Val((codein(step * 2))) * 2 + Val((codein(step * 2 + 1)))
    If statu = 0 Or statu = 1 Then  '处在状态00和01 时可能的变化
           If tempr = 1 Or tempr = 2 Then
              Call turnnext(step + 1, 0, now + "0", err + 1)
              Call turnnext(step + 1, 2, now + "1", err + 1)
           ElseIf (tempr = 0 And statu = 0) Or (tempr = 3 And statu = 1) Then
              Call turnnext(step + 1, 0, now + "0", err)
              Call turnnext(step + 1, 2, now + "1", err + 2)
           Else
              Call turnnext(step + 1, 0, now + "0", err + 2)
              Call turnnext(step + 1, 2, now + "1", err)
           End If
    Else  '处在状态10和11 时可能的变化
          If tempr = 0 Or tempr = 3 Then
             Call turnnext(step + 1, 1, now + "0", err + 1)
             Call turnnext(step + 1, 3, now + "1", err + 1)
          ElseIf (tempr = 1 And statu = 2) Or (tempr = 2 And statu = 3) Then
             Call turnnext(step + 1, 1, now + "0", err + 2)
             Call turnnext(step + 1, 3, now + "1", err)
          Else
             Call turnnext(step + 1, 1, now + "0", err)
             Call turnnext(step + 1, 3, now + "1", err + 2)
          End If
     End If
End If
End Sub

Private Sub Command1_Click()         '212 编码**************************
Text2.Text = ""
Dim C() As Integer
Dim i As Integer
i = Len(Text1.Text)
Dim s() As String
ReDim Preserve s(i - 1) As String
Dim U() As Integer
ReDim Preserve U(i - 1) As Integer
Dim G() As Integer
ReDim Preserve G(i - 1, 5 + 2 * (i - 1)) As Integer
For k = 1 To i
U(k - 1) = Mid(Text1.Text, k, 1)
Next k
'生成矩阵G行值
For p = 0 To i - 1
aa1 = ""
bb1 = ""
   For aa = 1 To p
    aa1 = aa1 & "00"
     Next aa
   For bb = 1 To i - 1 - p
  bb1 = bb1 & "00"
   Next bb
s(p) = aa1 & "111011" & bb1
Next p
'编码产生输出码字
ReDim Preserve C(5 + 2 * (i - 1)) As Integer
For a = 0 To 5 + 2 * (i - 1)
  For b = 0 To i - 1
      k1 = C(a)
      k2 = U(b) * Mid(s(b), a + 1, 1)
      C(a) = k1 * (1 - k2) + k2 * (1 - k1)
Next b
Next a
'输出编码
For t = 0 To 5 + 2 * (i - 1)
Text2.Text = Text2.Text + Trim(Str(C(t)))
Next t
End Sub

Private Sub Command3_Click()      '213 编码**********************************
Text2.Text = ""
Dim C() As Integer
Dim i As Integer
i = Len(Text1.Text)
Dim s() As String
ReDim Preserve s(i - 1) As String
Dim U() As Integer
ReDim Preserve U(i - 1) As Integer

Dim G() As Integer
ReDim Preserve G(i - 1, 7 + 2 * (i - 1)) As Integer

For k = 1 To i
U(k - 1) = Mid(Text1.Text, k, 1)
Next k
'生成矩阵G行值
For p = 0 To i - 1
aa1 = ""
bb1 = ""
   For aa = 1 To p
     aa1 = aa1 & "00"
     Next aa
    For bb = 1 To i - 1 - p
    bb1 = bb1 & "00"
    Next bb
s(p) = aa1 & "11011111" & bb1
Next p
'编码产生输出码字
ReDim Preserve C(7 + 2 * (i - 1)) As Integer
For a = 0 To 7 + 2 * (i - 1)
    For b = 0 To i - 1
        k1 = C(a)
        k2 = U(b) * Mid(s(b), a + 1, 1)
        C(a) = k1 * (1 - k2) + k2 * (1 - k1)
Next b
Next a
'输出编码
For t = 0 To 7 + 2 * (i - 1)
Text2.Text = Text2.Text + Trim(Str(C(t)))
Next t
End Sub

Private Sub Command4_Click()  '清空
Text3.Text = ""
Text2.Text = ""
Text1.Text = ""
Text1.SetFocus
End Sub

Private Sub Command5_Click()   '退出
End
End Sub

 

'设计及运行结果图

http://s8/middle/909778eanae3cd7cc44a7&690 212维特比译码" TITLE="《信息论与编码》卷积码的212编码,213编码  212维特比译码" />

http://s16/middle/909778eanae3cd734dc9f&690 212维特比译码" TITLE="《信息论与编码》卷积码的212编码,213编码  212维特比译码" />

http://s5/middle/909778eanae3cd80259d4&690 212维特比译码" TITLE="《信息论与编码》卷积码的212编码,213编码  212维特比译码" />

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有