天津理工大学通信原理 实验1. 数字基带信号(模拟信号输出波形)

此篇博客介绍了通信原理中单极性非归零码、差分码、AMI码和HDB3码的编码与解码过程,通过C++编程实现并展示了波形。实验包括随机数生成、编码展示、译码恢复及结果对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

了解通信原理数据传输过程中码型的基本概念,基带传输的特点,常用的信道编码方法。C或C++编程方法、MATLAB、Python或其他语言格式,调试编好实验程序。
学时:10(5次课)
实验要求:正确地设计有关的数据结构与各个功能模块,画出程序的流程图,编写程序,程序执行结果应正确

实验内容
1. 本实验是模拟通信原理中信道编码及译码过程.
2. 编程实现单极性非归零码、差分码、AMI码、HDB3码的编码算法显示波形并译码。
3. 随机产生二进制0、1序列,根据不同的编码算法,产生对应的码型、并在屏幕上输出相应的波形。
4. 对产生的结果进行相应的译码操作,恢复原来产生的二进制序列。
5. 对比各种算法的编码及译码结果。

单极性非归零码

"""
单极性非归零码及解码
"""

import turtle
import numpy as np
myarray= np.random.randint(0,2,10)
print("Random number group:",myarray)
print("Unipolar non-return to zero code:")
turtle.setup(width=0.6,height=0.6)
turtle.forward(50)
flag = 0
decoderesult = [0]
for i in range(1,10):
    if myarray[i-1]==myarray[i]:
        turtle.forward(50)
        decoderesult.append(flag)
    if myarray[i-1]==0 and myarray[i]==1:      
        turtle.left(90)
        turtle.forward(50)
        turtle.right(90)
        turtle.forward(50)
        flag = 1
        decoderesult.append(flag)
    if myarray[i-1]==1 and myarray[i]==0:
        turtle.right(90)
        turtle.forward(50)
        turtle.left(90)
        turtle.forward(50)
        flag = -1
        decoderesult.append(flag)
for i in range(0,10):
    if decoderesult[i] != 0:
        break
#print(i)    
flag2 = 0   
if decoderesult[i] == 1:
    flag2 = -1
if decoderesult[i] == -1:
    flag2 = 1
for k in range(0,i):
    decoderesult[k]=flag2 
for i in range(0,10):
    if decoderesult[i]==-1:
        decoderesult[i]=0
print("decoderesult:",decoderesult)
turtle.exitonclick()



差分码

"""
差分码
"""
import turtle
import numpy as np
myarray = np.random.randint(0,2,10)
flag = 0
decoderesult = []
def LevelJump():
    global flag
    if flag ==0:
        turtle.left(90)
        turtle.forward(50)
        turtle.right(90)
        turtle.forward(50)
        flag = 1
        decoderesult.append(1)
        return 0
    if flag ==1:
        turtle.right(90)
        turtle.forward(50)
        turtle.left(90)
        turtle.forward(50)
        flag = 0
        decoderesult.append(1)
        return 0
print("Random number set (initial value is zero):",myarray)
print("differential code:")
turtle.setup(width=1.0,height=0.4)
turtle.forward(50)
for i in range(10):
    if myarray[i] == 1:
        LevelJump()
    if myarray[i] == 0:
        turtle.forward(50)
        decoderesult.append(-1)
for i in range(0,10):
    if decoderesult[i]==-1:
        decoderesult[i]=0
print(decoderesult)
turtle.exitonclick() 

AMI码

"""
AMI
"""


import turtle
import numpy as np
myarray= np.random.randint(0,2,10)
print("随机数组:",myarray)
print("AMI:")
turtle.setup(width=0.6,height=0.6)
flag = 0       #表示波形图电平
flag2 = False  #表示高低电平
decoderesult = []
def Level1():
    global flag
    global flag2
    if flag == 0 and not flag2:
        turtle.left(90)
        turtle.forward(50)
        turtle.right(90)
        turtle.forward(50)
        flag = 1
        flag2 = True
        return 0
    if flag == 0 and flag2:
        turtle.right(90)
        turtle.forward(50)
        turtle.left(90)
        turtle.forward(50)
        flag = -1
        flag2 = False
        return 0
    if flag == 1:
        turtle.right(90)
        turtle.forward(100)
        turtle.left(90)
        turtle.forward(50)
        flag = -1
        flag2 = False
        return 0
    if flag == -1:
        turtle.left(90)
        turtle.forward(100)
        turtle.right(90)
        turtle.forward(50)
        flag2 = True
        flag =1
        return 0
def Level0():
    global flag
    if flag == 0:
        turtle.forward(50)
        return 0
    if flag == 1:
        turtle.right(90)
        turtle.forward(50)
        turtle.left(90)
        turtle.forward(50)
        return 0
    if flag == -1:
        turtle.left(90)
        turtle.forward(50)
        turtle.right(90)
        turtle.forward(50)
        return 0
turtle.forward(50)
decoderesult.append(myarray[0])
flag = myarray[0]
if myarray[0]==1:
    flag2 = True
for i in range(1,10):
    if myarray[i] == 1:
        Level1()
        decoderesult.append(1)
    if myarray[i] == 0:
        Level0()
        decoderesult.append(0)
        flag = 0
print("decoderesult",decoderesult)
turtle.exitonclick()

HDB3

"""
HDB3
"""

import turtle
import numpy as np
#myarray= np.array([1,0,0,0,1,0,1,1,1,0,0,0,0,1,0,0,1,1,1,1])#测验使用
myarray= np.random.randint(0,2,20)#产生随机数
print("随机数组:",myarray)
print("HDB3:")
turtle.setup(width=0.6,height=0.6)
flag = 0  #电平
flag2 = False #传输比特1时,目前的电平高低,true==+1,false=-1
flag3 = False #记录转换之间的比特1个数,false==偶数个,true==奇数个
decoderesult=[]
def LevelHigh():
    global flag
    global flag2
    if flag == 0 and not flag2:
        turtle.left(90)
        turtle.forward(10)
        turtle.right(90)
        turtle.forward(10)
        flag = 1
        flag2 = True
        return 0
    if flag == 0 and flag2: #传输比特1时,目前的电平高低,true==+1
        turtle.right(90)
        turtle.forward(10)
        turtle.left(90)
        turtle.forward(10)
        flag = -1
        flag2 = False#传输比特1时,目前的电平高低,false=-1
        return 0
    if flag == 1:
        turtle.right(90)
        turtle.forward(20)
        turtle.left(90)
        turtle.forward(10)
        flag = -1
        flag2 = False
        return 0
    if flag == -1:
        turtle.left(90)
        turtle.forward(20)
        turtle.right(90)
        turtle.forward(10)
        flag2 = True
        flag =1
        return 0
def LevelLower():
    global flag
    if flag == 0:
        turtle.forward(10)
        flag = 0
        return 0
    if flag == 1:
        turtle.right(90)
        turtle.forward(10)
        turtle.left(90)
        turtle.forward(10)
        flag = 0 
        return 0
    if flag == -1:
        turtle.left(90)
        turtle.forward(10)
        turtle.right(90)
        turtle.forward(10)
        flag = 0
        return 0
def HDB3():
    global flag,flag3
    if  flag3 == True:
        if flag == 1:
            LevelLower()
            LevelLower()
            LevelLower()
            turtle.left(90)
            turtle.forward(10)
            turtle.right(90)
            turtle.forward(10)
            flag =1
            flag2 = True
            flag3 = False
            return 0
        if flag == -1:
            LevelLower()
            LevelLower()
            LevelLower()
            turtle.right(90)
            turtle.forward(10)
            turtle.left(90)
            turtle.forward(10)
            flag = -1
            flag2 = False
            flag3 = False
            return 0
    if  flag3 == False:
        if flag == 1:
            turtle.right(90)
            turtle.forward(20)
            turtle.left(90)
            turtle.forward(10)
            flag = -1
            flag2 = False
            flag3 = False
            LevelLower()
            LevelLower()
            turtle.right(90)
            turtle.forward(10)
            turtle.left(90)
            turtle.forward(10)
            flag = -1
            flag2 = False
            flag3 = False
            return 0
        if flag == -1:
            turtle.left(90)
            turtle.forward(20)
            turtle.right(90)
            turtle.forward(10)
            flag =1
            flag2 = True
            LevelLower()
            LevelLower()
            turtle.left(90)
            turtle.forward(10)
            turtle.right(90)
            turtle.forward(10)
            flag =1
            flag2 = True
            flag3 = False
            return 0
i=0                             
while i<20:
    if i>=20:
        break
    if myarray[i] == 1:
        LevelHigh() 
        i+=1
        flag3 = not flag3
        decoderesult.append(1)
    if i<17 and myarray[i]==0 and myarray[i+1]==0 and myarray[i+2]==0 and myarray[i+3]==0:
#消除索引溢出的问题,可根据具体情况修改,默认长度20
        HDB3()
        i+=4
        decoderesult.append(0)
        decoderesult.append(0)
        decoderesult.append(0)
        decoderesult.append(0)
        continue
    try:
        if myarray[i] == 0:
            LevelLower() 
            i+=1  
            decoderesult.append(0)
    except IndexError:
        pass
print(decoderesult)
turtle.exitonclick()
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值