打印
[FPGA]

差分曼切斯特编码

[复制链接]
2983|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
694844985| | 2014-6-19 14:41 | 只看该作者
通过数据包的头标志和尾标志判断第一位,通常会发出一系列正常数据不可能出现的电平http://www.sonsivri.to/forum/index.php?topic=42962.0,标志位识别可以参考IEC61158-2:117

使用特权

评论回复
板凳
billbillqaz|  楼主 | 2014-6-30 14:14 | 只看该作者
但是在标致中,如何判断出标致的第一位

使用特权

评论回复
地板
dqharts| | 2014-7-1 14:55 | 只看该作者
差分曼彻斯特编码的编码规则是:
在信号位开始时不改变信号极性,表示辑 1
在信号位开始时改变信号极性,表示逻辑 0
曼切斯特编码的每个比特位在时钟周期内只占一半,当传输“1”时,在时钟周期的前一半为高电平,后一半为低电平;而传输“0”时正相反。这样,每个时钟周期内必有一次跳变,这种跳变就是位同步信号。差分曼切斯特编码是曼切斯特编码的改进。它在每个时钟位的中间都有一次跳变,传输的是“1”还是“0”,是在每个时钟位的开始有无跳变来区分的。
位同步使接收端对每一位数据都要和发送端保持同步。实现位同步的方法可分为外同步法和自同步法两种。在外同步法中,接收端的同步信号事先由发送端送来,而不是自己产生也不是从信号中提取出来。即在发送数据之前,发送端先向接收端发出一串同步时钟脉冲,接收端按照这一时钟脉冲频率和时序锁定接收端的接收频率,以便在接收数据的过程中始终与发送端保持同步。
自同步法是指能从数据信号波形中提取同步信号的方法。典型例子就是曼彻斯特编码,每一位的中间有一跳变,位中间的跳变既作为时钟信号,又作为数据信号。差分曼彻斯特编码,这种编码每位中间的跳变仅提供时钟定时,而用每位开始时有无跳变表示"0"或"1",有跳变表示"0",无跳变表示"1"。

使用特权

评论回复
5
billbillqaz|  楼主 | 2014-7-1 19:47 | 只看该作者
dqharts 发表于 2014-7-1 14:55
差分曼彻斯特编码的编码规则是:
在信号位开始时不改变信号极性,表示辑 1
在信号位开始时改变信号极性, ...

编码规则我完全懂,但是就是无法解码,“能从数据信号波形中提取同步信号的方法”这句话如何从本质上去理解?如何从编程的思想上去理解?

使用特权

评论回复
6
dqharts| | 2014-7-2 08:39 | 只看该作者
这要看你的曼码同步头信号是如何定义的,比如常用的先低后高代表数据同步,而先高后低代表命令同步,同步头站位3个时钟周期。

使用特权

评论回复
7
billbillqaz|  楼主 | 2014-7-3 15:02 | 只看该作者
dqharts 发表于 2014-7-2 08:39
这要看你的曼码同步头信号是如何定义的,比如常用的先低后高代表数据同步,而先高后低代表命令同步,同步头 ...

我不知道同步头信号如何定义,也不知道您说的数据同步和命令同步如何理解?希望您能具体说说,我这边曼码直接信号通过M序列,将1或0,变为一段伪随机码(我变成的是15位),然后解码时,我该如何去解?

使用特权

评论回复
8
dqharts| | 2014-7-3 15:16 | 只看该作者
你可以看一下我做的曼码仿真https://bbs.21ic.com/icview-760546-1-1.html;数据同步就是定义数据同步信号之后跟着的是数据信息(比如你变成的15位,位数与你要传输的频率、数据个数等有关吧),有奇偶校验位的还带有1位奇偶校验位;命令同步就是定义命令同步信号之后跟着的命令信息,一般用于双工或半双工通讯使用,比如下传指令使用。

使用特权

评论回复
9
dqharts| | 2014-7-3 15:21 | 只看该作者
billbillqaz 发表于 2014-7-3 15:02
我不知道同步头信号如何定义,也不知道您说的数据同步和命令同步如何理解?希望您能具体说说,我这边曼码 ...

M序列也就是不存在起始位,可直接利用时钟定位解码就可以了,因为你产生的是随机序列,没有信息头不存在定位起始位的问题,接到数据就可以利用规则解码。

使用特权

评论回复
10
dqharts| | 2014-7-3 15:52 | 只看该作者
dqharts 发表于 2014-7-3 15:16
你可以看一下我做的曼码仿真https://bbs.21ic.com/icview-760546-1-1.html;数据同步就是定义数据同步信号之 ...

解码过程:A[15]代表差分曼码数据;B[8]代表原始数据。
A[0] = 0 & A[1] = 1,则B[0] = 0;A[0] = 1 & A[1] = 0,则B[0] = 1。
从下一位开始每组取3个码元,A的步长为2,B的步长为1,如:
A[1] = 0 & A[2] = 1 & A[3] = 0,则B[1] = 0;
A[1] = 0 & A[2] = 0 & A[3] = 1,则B[1] = 1;

A[1] = 1 & A[2] = 1 & A[3] = 0,则B[1] = 1;
A[1] = 1 & A[2] = 0 & A[3] = 1,则B[1] = 0。
依次类推即可实现解码。

使用特权

评论回复
11
billbillqaz|  楼主 | 2014-7-3 15:55 | 只看该作者
dqharts 发表于 2014-7-3 15:21
M序列也就是不存在起始位,可直接利用时钟定位解码就可以了,因为你产生的是随机序列,没有信息头不存在 ...

我想直接解码,可是我用的是FPGA解码,如无法找到码元的第一位

使用特权

评论回复
12
dqharts| | 2014-7-3 15:58 | 只看该作者
billbillqaz 发表于 2014-7-3 15:55
我想直接解码,可是我用的是FPGA解码,如无法找到码元的第一位

码元的第一位遵循曼码编码规则,01就是0;10就是1。

使用特权

评论回复
13
billbillqaz|  楼主 | 2014-7-3 16:05 | 只看该作者
dqharts 发表于 2014-7-3 15:52
解码过程:A[15]代表差分曼码数据;B[8]代表原始数据。
A[0] = 0 & A[1] = 1,则B[0] = 0;A[0] = 1 & A[ ...

我无法找到第一位即A【0】

jiema.png (21.04 KB )

jiema.png

使用特权

评论回复
14
billbillqaz|  楼主 | 2014-7-3 16:08 | 只看该作者
dqharts 发表于 2014-7-3 15:58
码元的第一位遵循曼码编码规则,01就是0;10就是1。

信号的常态是1,那如果来了10我怎么找到那个1,而且FPGA只能实现对沿的捕获

使用特权

评论回复
15
dqharts| | 2014-7-4 08:12 | 只看该作者
billbillqaz 发表于 2014-7-3 16:08
信号的常态是1,那如果来了10我怎么找到那个1,而且FPGA只能实现对沿的捕获 ...

如果信号是常高电平1,那么捕获下降沿0,就是10得到1。
因为你没有同步头信号设置,可以判断信号高电平1保持时间周期长短是否超过2个曼码时钟周期,这个判断发生在首个下降沿捕获时刻,数据同步开始解码即可。

使用特权

评论回复
16
billbillqaz|  楼主 | 2014-7-14 09:24 | 只看该作者
dqharts 发表于 2014-7-4 08:12
如果信号是常高电平1,那么捕获下降沿0,就是10得到1。
因为你没有同步头信号设置,可以判断信号高电平1 ...

多谢指导,有了基本方向!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

112

主题

191

帖子

2

粉丝