曼彻斯特编码信号的解码
先决条件
曼彻斯特代码
曼彻斯特编码的优势
该代码最重要的优点之一是没有单独的时钟信号。通过在数据信号中编码时钟,通信所需的信道数量减少到一个,使得该代码在发射机和接收机之间需要电隔离的应用中,或在无线通信(如IR、RFID和NFC应用)中成为最佳。
另一个优点是,这种编码方案确保生成的信号不会停留在逻辑上高的或者低的电平持续时间较长,因此信号可以交流耦合,这意味着可以消除信号的直流分量。这种类型的滤波在未编码数字信号的情况下不可用,因为一个长的、不间断的1或0序列将在去耦电容器之后产生相同的电压电平。交流耦合对电路中循环的故障电流提供某种保护,在某些情况下可以解决共模范围不兼容问题。
下面介绍了AC耦合的AC耦合模拟。每次时,可以观察到模糊的电压电平(0V),当更长的一系列高的或者低的位出现。
曼彻斯特编码的弊端
这种编码方案最重要的缺点是数据速率只占带宽的一半,换句话说,为了发送一个信息比特,必须发送两个逻辑状态,因此输出信号的频率必须是每秒输入信息比特数的两倍。(受我们设备的时钟频率限制),数据速率仅为未编码数据信号的一半。
生成要解码的信号
为了展示曼彻斯特解码器在逻辑分析仪中的使用,我们需要解码信号。为此,我们将使用从波形和所选测试和测量设备的数字I / O线路中的模式生成器仪器,在简单的环回配置中(相同的数字线路都使用为输入和输出 - 不需要外部连接).由于模式生成器仪器默认情况下无法生成曼彻斯特代码,将使用Python脚本来创建二进制数据并将其保存到CSV文件,该文件可以稍后以波形导入。您可以从此处下载该脚本:code_generator.zip.,也可以按照以下步骤编写自己的脚本。
首先,定义信号的参数:使用哪种标准(高的=下降沿,或高的=上升沿)、端度和数据位数。然后导入必要的包:在这个脚本中,我们将使用NumPy生成数组,并使用Pandas将结果导出到csv文件。
获取输入字符串。
#定义参数落下一个=真的LSB_优先=真的nr_位=8.#导入必要的模块进口努比进口熊猫#获取输入数据输入数据=输入(“输入消息:”)
将输入字符串转换为二进制文件,然后,如有必要,反转八位字节的顺序。
将每一位加倍(这样可以使数据信号“慢”两倍),然后生成一个时钟信号:一个包含交替“1”-s和“0”-s且与数据信号长度相同的阵列。
#将字符串转换为二进制文件二进制格式=“0{}b”.格式(nr_位)原始二进制="".加入(格式(作战需求(指数),二进制格式)对于指数在输入数据)#反转字符串如有必要如果lsb_first:时间=raw_binary raw_binary.=""对于指数在范围(0,伦恩(输入数据)):当前字节=世俗的[指数 *8.:(索引+1.)*8.]原始二进制=raw_binary + clust_byte.[::-1.]#每一位双倍二进制数据="".加入(索引+索引对于指数在原始二进制)#为时钟创建数组二进制时钟="".加入(“1”+“0”对于指数在原始二进制)
将字符串转换为整数数组,然后通过对两个数组(逐元素)应用逐位异或(异或)运算符,从两个数组中获取曼彻斯特码。如果要更改标准,请将“1”-s更改为“0”,将“0”-s更改为1。
#从字符获取数字数据=[]对于指数在二进制数据:数据=numpy。连接((数据,作战需求(指数)-48),轴=没有任何)数据=数据A型(“int”)时钟=[]对于指数在二进制时钟:时钟=numpy。连接((时钟,作战需求(指数)-48),轴=没有任何)时钟=时钟A型(“int”)#生成代码曼彻斯特=数据^时钟如果第一名:曼彻斯特=1.- 曼彻斯特
最后,从生成的代码创建数据帧并将其导出为CSV文件。
#导出代码曼彻斯特={“数据”:曼彻斯特}编码数据=熊猫。dataframe.(曼彻斯特)编码数据。到(“曼彻斯特代码.csv”,指数=错误的)
打开波形,将其连接到您的设备,然后打开图案生成器仪器。添加新信号并选择DIO 0.设置输出到聚丙烯(推挽),即类型到风俗,然后导入CSV文件,默认离开每个其他设置。
设定等待到10ms的时间和跑通过检查相应的框来自动模式。启动模式生成器。
注:有关更多信息检查:使用模式生成器
逻辑分析仪解码
要解码曼彻斯特编码的信号,请在波形中打开逻辑分析仪和添加曼彻斯特在添加频道时。将频率设置为生成信号频率的一半(500赫兹在这种情况下)。在相应下拉列表的帮助下,将编码参数设置为与Python代码中相同的参数。将格式设置为ASCII码,使消息可读。