曼彻斯特编码

曼彻斯特编码(Manchester Encoding),也叫做相位编码(PE),是一个同步时钟编码技术,被物理层使用来编码一个同步位流的时钟和数据。曼彻斯特编码被用在以太网媒介系统中。曼彻斯特编码提供一个简单的方式给编码简单的二进制序列而没有长的周期没有转换级别,因而防止时钟同步的丢失,或来自低频率位移在贫乏补偿的模拟链接位错误。在这个技术下,实际上的二进制数据被传输通过这个电缆,不是作为一个序列的逻辑1或0来发送的。相反地,这些位被转换为一个稍微不同的格式,它通过使用直接的二进制编码有很多的优点。
曼彻斯特编码(Manchester Encoding),也叫做相位编码(PE),是一个同步时钟编码技术,被物理层使用来编码一个同步位流的时钟和数据。曼彻斯特编码被用在以太网媒介系统中。曼彻斯特编码提供一个简单的方式给编码简单的二进制序列而没有长的周期没有转换级别,因而防止时钟同步的丢失,或来自低频率位移在贫乏补偿的模拟链接位错误。在这个技术下,实际上的二进制数据被传输通过这个电缆,不是作为一个序列的逻辑1或0来发送的(技术上叫做反向不归零制(NRZ))。

  相反地,这些位被转换为一个稍微不同的格式,它通过使用直接的二进制编码有很多的优点。曼彻斯特编码,常用于局域网传输。在曼彻斯特编码中,每一位的中间有一跳变,位中间的跳变既作 时钟信号 ,又作数据信号;从低到高跳变表示"0",从高到低跳变表示"1"。还有一种是 差分曼彻斯特编码 ,每位中间的跳变仅提供时钟定时,而用每位开始时有无跳变表示"0"或"1",有跳变为"0",无跳变为"1"。

一.曼彻斯特编码:

0:低——高

1:高——低

二.差分曼彻斯特编码:

0表示有跳变

1表示无跳变 
100110用曼彻斯特编码怎么表示

如果定义1->10,0->01则曼彻斯特码为:100101101001如果定义0->10,1->01则曼彻斯特码为:011010010110


曼彻斯特编码,也叫做相位编码(PE),是一个同步时钟编码技术,在以太网媒介系统中,被物理层使用来编码一个同步位流的时钟和数据。它的每一个数据比特都是由至少一次电压转换的形式所表示的。曼彻斯特编码因此被认为是一种自定时码。自定时意味着数据流的精确同步是可行的。每一个比特都准确的在一个预先定义时间时期的时间中被传送。这样的编码方式可以在长时间没有电平跳变的情况下,仍然对任意的二进制数据进行编码,并且防止在这种情况下同步时钟信号的丢失以及防止低通模拟电路中低频直流飘移所引起的比特错误。同时,如果保证传送的编码交流信号的直流分量为零并且能够防止中继信号的基线漂移,那么就很容易实现信号的恢复和防止能量的浪费。另外,曼彻斯特码还具有丰富的位定时信息。

    原理:曼彻斯特码是通过电平的跳变来对二进制数据“0”和“1”进行编码的,对于何种电平跳变对应何种数据,实际上有两种不同的数据约定:第一种约定是由G. E. Thomas,Andrew S. Tanenbaum等人在1949年提出的,它规定“0”是由低到高的电平跳变表示,“1”是由高到低的电平跳变;第二种约定则是在IEEE 802.4(令牌总线)以及IEEE 802.3 (以太网)中规定,按照这样的说法,由低到高的电平跳变表示“1”,由高到低的电平跳变表示“0”。在实际工程上,这两种约定在一定范围内均有应用。为了便于描述,若无特殊说明,曼彻斯特码的编码规则均采用第二种约定,即从低电平跳变到高电平表示“1”,从高电平跳变到低电平表示“0”。

    普通数字信号与曼彻斯特编码对比如图。

 曼彻斯特码编解码原理

      优点:数据和同步时钟统一编码,曼码中含有丰富的时钟信号,直流分量基本为零,接收器能够较容易恢复同步时钟,并同步解调出数据,具有很好的抗干扰性能,这使它更适合于信道传输。

       

        曼彻斯特编码器的设计

        对比普通二进制码的波形和曼彻斯特码的波形可知,曼彻斯特码在一个码元的开始时刻要对普通信号进行一次采样,并且有可能会发生一次跳变,在码元的中间位置一定发生跳变,因此编码信号的频率是数据时钟频率的两倍。

        曼彻斯特码是用“01”和“10”来表示普通二进制数据中的“1”和“0”的,因此在实际电路设计中,我们可以用采一个2选1数字选择器来完成此项功能。

        曼彻斯特码编解码原理

      曼彻斯特解码器的设计

     

        曼彻斯特解码电路设计的关键是如何准确地从曼彻斯特码的数据流中提取出“10”和“01”信号,并且把它们转换成普通二进制编码中的“0”和“1”。例如对于曼彻斯特码“01010101”,如果从第一位开始解码,得到的二进制编码就是“1111”,而若从第二位开始解码,得到的二进制编码就是“000”和头尾两个曼彻斯特码。由此可见,如果曼彻斯特码数据流中只有“1”或“0”是不能得到正确的译码结果的,如果曼彻斯特编码数据流中出现“00”,则“00”前后的码元必定是“1”;如果曼彻斯特编码数据流中出现“11”,则“00”前后的码元必定是“0”,因此,我们可以将“00”与“11”作为曼彻斯特码译码的标志位。

        为了更准确得解码曼彻斯特码,我们需要一个频率不小于奈奎斯特频率的采样时钟,即采样时钟的频率至少是曼彻斯特码频率的两倍,曼彻斯特码的频率是普通二进制编码信号频率的两倍,因此采样频率至少是数据频率的4倍。
        在实际设计电路时,我们可以采用一个缓存器,储存上一个时钟采集到的信号和当前时钟采集到的信号,当缓存器的内容是“01”时,输出“1”;当缓存器的内容是“10”时,输出“0”;当缓存器的内容是“00”或“11”时,输出维持不变。

曼彻斯特码编解码原理


  • 7
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
曼彻斯特编码是一种数字数据传输编码方式,它通过在信号的每个时钟周期中改变信号的电平来表示数据位的变化。在曼彻斯特编码中,一个比特由两个时钟周期组成,每个时钟周期中信号的电平改变代表1或0的变化。 在Verilog中实现曼彻斯特编码需要使用状态机和时钟控制信号。首先,我们需要定义两个状态:数据位0和数据位1。接下来,我们需要根据输入的数据位和当前状态生成输出信号。 下面是一个简单的Verilog代码实现曼彻斯特编码: ``` module manchester_encoding ( input clk, input data_in, output reg encoded_data ); reg [1:0] state; always @(posedge clk) begin case(state) 2'b00: begin if (data_in) encoded_data <= 1'b0; state <= 2'b01; end 2'b01: begin if (data_in) encoded_data <= 1'b1; state <= 2'b10; end 2'b10: begin if (data_in) encoded_data <= 1'b1; state <= 2'b00; end endcase end endmodule ``` 在这个代码中,我们使用了一个状态寄存器(state)表示当前状态。在时钟(posedge clk)的上升沿触发时,根据当前的状态和输入数据(data_in),我们生成相应的输出信号(encoded_data)。 该代码中使用了一个case语句来根据信号的电平和当前状态生成输出结果。具体来说,当状态为00时,如果输入数据为1,则输出信号为0,并将状态变为01;当状态为01时,如果输入数据为1,则输出信号为1,并将状态变为10;当状态为10时,如果输入数据为1,则输出信号为1,并将状态变为00。 通过这种方式,我们可以将输入的数字数据进行曼彻斯特编码,并将生成的编码信号输出到encoded_data信号上。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值