佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 3245|回复: 37

数码杂讯处理技术

[复制链接]
发表于 8-11-2009 05:56 PM | 显示全部楼层 |阅读模式
相信很多工程师都会面对一些杂讯的问题,而杂讯可分为analog noise(amplitude) 和 digital noise (time domain noise, eg synchronization),此帖主要是讨论digital communication 的杂讯处理。

简单的数码通讯资料包含了
1)开始(pre-amble, start bit):告诉reciever 所收的资料data stream 的开始
2)主数据(encrypt data / data):要输出的数据
3)CRC / check sum: 确认接收的数据是正确的。

我就拿wire digital communication 为例子吧, 当测试 NoiseKen coupling 和 EFT coupling 时讯号会严重的被这些杂讯所影响, 解决方法有两个,一是从硬件下手,也就是提高 signal line 对杂讯的 impedence 以防止杂讯被灌入导体,或者用电容来bypass杂讯以防止杂讯到达处理器,二就是用数位方式来提升处理器对杂讯的免疫能力(条件是处理器不因为杂讯而出现不寻常的反应,always reset, or 死机)

问题:
如何通过程式使通讯可靠性到达95% (transmit 100x, successful receive >95x), 设定如下。
signal frequency 1Mhz, 5 V signal with Manchester coding
EFT pulse width 5 nS, coupling efficiency 2KV to signal line
noiseKen pulse width 100nS, coupling efficiency 2 KV to signal line
MCU receiving pin, schimitt trigger with clamp diode, ext int.
data length 64 bits
MCU frequency 48Mhz

[ 本帖最后由 chtan36 于 8-11-2009 08:47 PM 编辑 ]

评分

参与人数 1积分 +50 收起 理由
pic + 50 原创内容

查看全部评分

回复

使用道具 举报


ADVERTISEMENT

发表于 9-11-2009 12:32 AM | 显示全部楼层
谢谢分享, 可以再详细一点的, 更深入的说明?
回复

使用道具 举报

 楼主| 发表于 9-11-2009 09:03 PM | 显示全部楼层
我想请问一下版主是否是Microchip 的 FAE?
回复

使用道具 举报

 楼主| 发表于 9-11-2009 09:53 PM | 显示全部楼层

回复 2# pic 的帖子

我相信很多工程师都有这种经验,当进行UL, CE 的 pre-compliance test 时发现电板的表象并不如想象中的理想,硬件工程师们忙着在电板上“割线”和“飞线”,加电容,加电感,加 ferrite (bead, core, sheet, casing...).以便在compliance test 时顺顺利利。

由于这些EMC test 的杂讯极强(因为要测试硬件安全性可可靠性),很多时候都会把通讯讯号搞得面目全非,虽然说通讯的可靠性并不被列入CE 和 UL 的规格内,但是身为工程师的我们肯定不希望看到硬件之间的通讯因为杂讯而失效。

正如我之前所说的解决通讯杂讯可用 twister pair wire, shielded wire, fiber optic, 加电感,加电阻等,但是你们是否想过透过软件也可以提升通讯的可靠性,如 Reed solomen code (VCD DVD), Turbo code (CDMA, HSDPA, OFCDMA), RS-vitabi(NASA 的火星探测器)等, 在讯号严重被干扰的情况下依旧能还原讯号。

本贴的目的是 探讨和分享如何用数码科技的优势--记忆--来克服资讯在传送过程中损毁的问题。
回复

使用道具 举报

发表于 11-11-2009 09:23 AM | 显示全部楼层
原帖由 chtan36 于 9-11-2009 09:03 PM 发表
我想请问一下版主是否是Microchip 的 FAE?

不是。

原帖由 chtan36 于 9-11-2009 09:53 PM 发表
我相信很多工程师都有这种经验,当进行UL, CE 的 pre-compliance test时发现电板的表象并不如想象中的理想,硬件工程师们忙着在电板上“割线”和“飞线”,加电容,加电感,加 ferrite (bead, core,sheet, casing...).以便在compliance test 时顺顺利利。

由于这些EMC test 的杂讯极强(因为要测试硬件安全性可可靠性),很多时候都会把通讯讯号搞得面目全非,虽然说通讯的可靠性并不被列入CE 和 UL 的规格内,但是身为工程师的我们肯定不希望看到硬件之间的通讯因为杂讯而失效。

正如我之前所说的解决通讯杂讯可用 twister pair wire, shielded wire, fiber optic,加电感,加电阻等,但是你们是否想过透过软件也可以提升通讯的可靠性,如 Reed solomen code (VCD DVD), Turbocode (CDMA, HSDPA, OFCDMA), RS-vitabi(NASA 的火星探测器)等,在讯号严重被干扰的情况下依旧能还原讯号。

本贴的目的是 探讨和分享如何用数码科技的优势--记忆--来克服资讯在传送过程中损毁的问题。

我还没到上面的程度, 目前做的东西是比较简单小样的东西。
软件的, 只是稍懂CAN bus (皮毛) 而已, 但他没有自我还原的功能。
还请楼主慢慢写出完整的, 我再升精华。
回复

使用道具 举报

发表于 11-11-2009 08:39 PM | 显示全部楼层
很幸运在这儿可以有 communication 的贴。
可是对于你#1的问题我不会回答
回复

使用道具 举报

Follow Us
 楼主| 发表于 11-11-2009 09:08 PM | 显示全部楼层
好吧,我就和大家分享一下我这位“老百姓”的愚见,认识资料修复的故事,希望大家能从故事中得到灵感,如有错误请纠正我这位“老百姓”吧。

小明是一位软体工程师,有一天老板面对了一个问题,他对小明说

老板:“小明,客户老是投诉我们的接收器不明感”
小明:“那么找到原因了吗?”
老板:“根据硬件工程师的报告,是因为资料在传送的过程中被杂讯干扰”
小明:“既然是杂讯为何不让硬件工程师解决呢?”
老板:“如果更改硬件,那么我们就必须从新测试,费用很高。”
小明:“那么老板是要我从软件下手咯?”
老板:“是的,我希望你能利用软件来解决这问题”
/******************************************************************
发送器:
data format:: start bit + 1024 bits data + CRC
当用户“执行”时,传送1次讯号

接收器规格:
当CRC正确时才处理接收的资料。
接收器在同一个端口要应付255个发送器。
从发送器1 到 发送器1 费时1秒

客户投诉:
发送t 100x 收到 10x..
/*****************************************************************
如果你是小明你会选择那一种方式,为什么
a)更改发送器的软件,曾加发送次数。
b) 修改通讯协议。
c) 其他。
回复

使用道具 举报

发表于 12-11-2009 12:39 AM | 显示全部楼层
我会尝试分小块一点(比如512bits data),然后再看有没有改善, 然后在换其他更小的数值作比较。
如果接受crc 有问题, 就告诉发送那里,再来一个
然后发送都是orthogonal,就能预防他们通串。一个人走路比一班人一起走时安静多了。
回复

使用道具 举报


ADVERTISEMENT

发表于 12-11-2009 09:59 AM | 显示全部楼层
原帖由 chtan36 于 11-11-2009 09:08 PM 发表
如果你是小明你会选择那一种方式,为什么
a)更改发送器的软件,曾加发送次数。
b) 修改通讯协议。
c) 其他。.


我会尝试:
硬体方面, 在开始设计前, 就会问操作环境, 应用, 要求等等。
1. 用RS485 bus, 本身已经是抗干扰的了。
2. 按距离, 决定baud rate, 可能低直4800bps, 虽然慢 (0.2秒), 但可靠多了 。
3. RS485 , 很多人用MAX485, 或SN75176, 应该改用MAX483, 会减少错误。
4. 用CAN controller, 有错误会自动重发, 硬体控制, 比软体控制快和可靠。

软体方面,
1. 如果真的干扰到很厉害, 考虑用Manchestor Code 的方式
2. 把资料分段
3. 我只是用简单的Modular 256 Sum
4. 我还不会用资料还原的方法, 因为复杂的运算会占用很多的MCU 资源。
回复

使用道具 举报

 楼主| 发表于 12-11-2009 08:30 PM | 显示全部楼层

回复 8# chan1314 的帖子

当然chan1314的方法的确不错,但不是最好的方法。

将资料切成小块的确能降低资料被杂讯影响的机率,但是也必须兼顾data capacity, 试想想在多clients 的 network 里,每个packet 都包含了 PID, device/unit ID 和 CRC 等, 这些都是“无用(对用户而言)”的资料,当你将packet 的 data bits减少,意味着那些“无用”的资料增加,同时也意味着data capacity降低。

重新发送,不断的发送直到接收器接到正确的资料为止?如果你按了键,要等数秒(因为头几次失败)接收器才反应你能接受吗?
回复

使用道具 举报

 楼主| 发表于 12-11-2009 08:49 PM | 显示全部楼层

回复 9# pic 的帖子

1)选择良好的coding 的确有助于提升资料的抗杂讯对比,我相信大部分人都会用interrupt 方式来接受资料吧,当杂讯“来袭”是interrupt 也会无端端的被trigger,要如何用软件来克服这一点?

2)如果我有一串资料,假设checksum不受杂讯影响,你能指出出错的bit的位置吗?

[ 本帖最后由 chtan36 于 12-11-2009 08:52 PM 编辑 ]
回复

使用道具 举报

发表于 12-11-2009 10:04 PM | 显示全部楼层

回复 10# chtan36 的帖子

这需要看什么需求先。 可能可以用 FEC, 所以控制器就不用回应:over over 收到了. 对于某些要求速度的用途会比较好。

1。 对于比较短的pulse, 有可能是spike.在不改硬体下, 可能可以检查start of frame 是不是正确的?
2。 没什么头绪。 指出, 和hamming distance 有一腿吗?
回复

使用道具 举报

发表于 12-11-2009 11:19 PM | 显示全部楼层
原帖由 chtan36 于 12-11-2009 08:49 PM 发表
1)选择良好的coding 的确有助于提升资料的抗杂讯对比,我相信大部分人都会用interrupt 方式来接受资料吧,当杂讯“来袭”是interrupt 也会无端端的被trigger,要如何用软件来克服这一点?

我不太明白杂讯“来袭”。。。可能我想的使用环境或应用会有偏差, 或请楼主先设定一种环境应用, 才能有效交流讨论,

或我这里预设的环境是工业用途, 有一个master, 很多slave, master 不断的做pooling, multidrop, RS485 bus, baud rate 9600bps, 有简单handshaking, ACK / NAK, 如果子机不回应, 会time out。
收发硬体是用简单的8bit PIC MCU 如16F628A, 利用Hardware USART。

在这种通讯里, data是可能一直不断的stream, interrupt 已经是不断的被trigger的。
在这里, 只有Start Of bit 会Trigger Interrupt, 但是如果是noise, 就是Frame Error, 不然就是Overrun, 硬体都解决Filter 掉了。。软体只是检查是否是要的ID, 收到的Data 都是放在Ring buffer 理, MCU 在过后才处理。


2)如果我有一串资料,假设checksum不受杂讯影响,你能指出出错的bit的位置吗?

我知道有这种修正法的Algorithm, 但先声明我不会。

他的编码很特别, 就是可以利用前,后的码, 来修正错误的码, 好像有无数的checksum 在里头那样, 这是我在很久以前读过的, 详情我不记得了, 而且我也可能记错。

但这些是有一些条件的, 就是你要先假设checksum不受杂讯影响, 但是如果Checksum 那块是错的呢?
而且, 这种修正法, 只适合用在数码影像, 或数码声音吧。。
我认为它也不是100%的,或是有一些条件的(不能连续错太多) ,不然你看VCD 时,就不会看到那些四方格子了。


如果不要real time 的修复, 利用CRC32 , 在如果只是一个bit 的error, 可以把资料的bit 慢慢rotate 转变, 直到你match, 但这是很笨, 也不实际的做法。

比如电脑的压缩档RAR file , 也能被修复, 但不是100%, 修复后, 不一定100%能用。
这种Algorithm修正法, 用软件做是要付出代价的, 占用MCU resource, 一般利用硬体高速运算去做。

比如是计算CRC32,对8bit MCU 来说都是很吃力的, 很多时候是用对表(table)的方式。
回复

使用道具 举报

 楼主| 发表于 13-11-2009 09:43 PM | 显示全部楼层

回复 13# pic 的帖子

其实要处理通讯杂讯的第一个步骤就是“接收”,如果连‘接收’都有问题就更不用谈修复了。如果你是用MCU的UART, LIN, SPI, I2C等功能,那么你就不能修改data link layer来增强接收(有的可以微调其input hysteresis characteristic,或pulse width rejection),唯有希望MCU制造商的接收方式良好。

言何谓良好的接收方式?我就bi-level(let say 5V and 0V) 为例子吧 。
1)你如何判断1,0 和 X(forbidden zone )?
-sampling 几次,然后判断他是1 或 0 或 X
-sampling 一次,就下定论。
-其他

2)你要如何syncronize 接收器和发送器的clock,因为clock有快又慢,到某个阶段会造成‘X’。
-透过data 的 falling edge 和程式计算来微调
-其他

3)当你接收到 ‘X’ 时你会。
-不理睬,接收到资料完成为止。
-马上终止接收。
回复

使用道具 举报

发表于 15-11-2009 09:17 AM | 显示全部楼层
原帖由 chtan36 于 13-11-2009 09:43 PM 发表
其实要处理通讯杂讯的第一个步骤就是“接收”,如果连‘接收’都有问题就更不用谈修复了。如果你是用MCU的UART, LIN, SPI, I2C等功能,那么你就不能修改data link layer来增强接收(有的可以微调其input hysteresis characteristic,或pulse width rejection),唯有希望MCU制造商的接收方式良好。

其实还是一样不知道你要的环境, 不同的环境有不同的做法, 所以你的问题可以有很多答案。
如果是长距离, 接收方面是RS485 differential mode, + MAX483 Slew rate limit.
如果是电板上的干扰, 在PCB 的设计时就下手减少干扰。
如是SPI 之类的, 用Schemitt trigger。

言何谓良好的接收方式?我就bi-level(let say 5V and 0V) 为例子吧 。
1)你如何判断1,0 和 X(forbidden zone )?
-sampling 几次,然后判断他是1 或 0 或 X
-sampling 一次,就下定论。
-其他

你是指电板上的那种短距离的干扰还是什么?
如果是TTL level, 就按TTL 的方式。
1 或 0 是 按MCU datasheet 的 TTL 或Schmitt  为标准

如果是没有干扰的问题, sampling + debounce ,就已经足够我用。
也有试过长距离的Keypad 连线, 把logic 换去 0-24V,>18V 为'1', 6V< 以下为'0', 中间的不理会。


2)你要如何syncronize 接收器和发送器的clock,因为clock有快又慢,到某个阶段会造成‘X’。
-透过data 的 falling edge 和程式计算来微调
-其他

一样, 我不知道你设定的是什么环境, 我的做法不一定是你要的标准答案。

“-透过data 的 falling edge 和程式计算来微调”, 对我来说是一定不可能的。

“syncronize 接收器和发送器的clock”, 你是指 USART? SPI, I2C, 还是什么?
如果你是指USART, 那么你就要有准确的时钟啊。。

"因为clock有快又慢,到某个阶段会造成‘X’"
我猜想, 如果你的时钟真的很不准的话, 你用2 个Stop bit 或更多, 就能解决你硬体的问题。


3)当你接收到 ‘X’ 时你会。
-不理睬,接收到资料完成为止。
-马上终止接收。

‘X’ 其实是什么?没有遇到过这种问题。。
所以应该是: “不理睬,接收到资料完成为止。”

你上面讲的问题, 我都没有遇到过, 或请你详细的把个案讲出来, 还有如何解决。
回复

使用道具 举报

发表于 22-11-2009 04:16 PM | 显示全部楼层
问一下楼主,对于DIGITAL AUDIO或DIGITAL VIDEO的ERROR CORRECTION有何看法??
回复

使用道具 举报


ADVERTISEMENT

发表于 17-12-2009 12:21 PM | 显示全部楼层
既然楼主提到关于杂讯的问题,
那么我有样问题想请教,
比如说汽车FM Modulator的问题,
通常FM Modulator会出现很多杂讯,
通过种种的原因,
比如说电波干扰,车辆的电流高低,引擎转动的干扰等等...
有什么办法可以改进吗?
就比如你有提到的加电容,或改线圈(coil)...

谢谢
回复

使用道具 举报

 楼主| 发表于 19-12-2009 09:25 PM | 显示全部楼层
回复 17# tung_h_w

恕在下不才,你所谓的问题可以分为
1)modulator 电源问题影响讯号。
2)讯号被干扰。
3)接收器的电源被干扰。

建议你先确认问题的根源,才对症下药。
回复

使用道具 举报

发表于 20-12-2009 10:21 PM | 显示全部楼层
其实要处理通讯杂讯的第一个步骤就是“接收”,如果连‘接收’都有问题就更不用谈修复了。如果你是用MCU的UART, LIN, SPI,I2C等功能,那么你就不能修改data link layer来增强接收(有的可以微调其input hysteresischaracteristic,或pulse width rejection),唯有希望MCU制造商的接收方式良好。

言何谓良好的接收方式?我就bi-level(let say 5V and 0V) 为例子吧 。
1)你如何判断1,0 和 X(forbidden zone )?
-sampling 几次,然后判断他是1 或 0 或 X
-sampling 一次,就下定论。
-其他

2)你要如何syncronize 接收器和发送器的clock,因为clock有快又慢,到某个阶段会造成‘X’。
-透过data 的 falling edge 和程式计算来微调
-其他

3)当你接收到 ‘X’ 时你会。
-不理睬,接收到资料完成为止。
-马上终止接收。
chtan36 发表于 13-11-2009 09:43 PM


一般上我都用mcu. 所以硬件接受器唯有希望MCU制造商的接收方式良好。。。。。。
我本身没有试过design类似楼主讲的data link layer得咚咚。
不过也可以来猜猜。

1)你如何判断1,0 和 X(forbidden zone )?
-sampling 几次,然后判断他是1 或 0 或 X

2)你要如何syncronize 接收器和发送器的clock,因为clock有快又慢,到某个阶段会造成‘X’。
-透过clock 的 falling edge/rising edge 来synchronize data receive

3)当你接收到 ‘X’ 时你会。
-不理睬,接收到资料完成为止。
回复

使用道具 举报

发表于 20-12-2009 10:30 PM | 显示全部楼层
1)选择良好的coding 的确有助于提升资料的抗杂讯对比,我相信大部分人都会用interrupt 方式来接受资料吧,当杂讯“来袭”是interrupt 也会无端端的被trigger,要如何用软件来克服这一点?

2)如果我有一串资料,假设checksum不受杂讯影响,你能指出出错的bit的位置吗?
chtan36 发表于 12-11-2009 08:49 PM



1)选择良好的coding 的确有助于提升资料的抗杂讯对比,我相信大部分人都会用interrupt 方式来接受资料吧,当杂讯“来袭”是interrupt 也会无端端的被trigger,要如何用软件来克服这一点?
-通讯协议

2)如果我有一串资料,假设checksum不受杂讯影响,你能指出出错的bit的位置吗?
hamming code.不过multiple bits出问题就很难。 没想到。或许你一串资料里面有很多checksum?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 31-1-2025 01:25 AM , Processed in 0.168502 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表