外设天下 - 电脑外设发烧友聚集地

12下一页
我的人缘0

[资料] [转][技术贴]Heagle对鼠标的一点见解

16 14620
楼主
跳转到指定楼层
发表于 2010-9-12 01:58 只看该作者 倒序浏览 阅读模式
本帖最后由 xmiangui 于 2010-9-12 10:04 编辑

转自Heagle的外设世界:http://blog.sina.com.cn/harrisheagle

很早以前看到的帖子了,我看坛子里似乎没有人发过,就转一下吧。顺带一提……此文曾被无良转载冠以非常装逼的标题,如果觉得眼熟请不要奇怪。

作者的Blog虽然早已不更新了,不过其中内容还是不错滴。

这里仅转载技术部分,稍微附带了我添加的吐槽(部分括号中的内容),如果觉得看着碍眼请自动无视或者访问原帖。


以下为正文:


鼠标虽小,但里面涉及的东西还是蛮多的,而且有很多概念都比较抽象,理解起来比较困难,特别对于有兴趣了解鼠标的新人。闲来无事,把以前的笔记整理了一下,发觉有点东西还是值得看一下的……………

关于鼠标性能的好坏

说到性能,这里不得不提及到一些技术性的问题,那大家先来了解一下决定鼠标各个性能的参数吧:


DPI(CPI):

这是一个表示精度的硬件指标。个人的理解,在光学鼠标中,这个量表示的是为了能被人观察到的屏幕上的变化,鼠标必须移动的最小的距离。这里所说的能被人观察到的屏幕上的变化,可以是光标移动1个(或N个)像素,也可以是在FPS游戏里转身10度。

这个变化可以由鼠标驱动或软件(游戏)的设定来改变,但其中最基本、最细微的变化只能是光标移动1个像素。我们下面就讨论1个像素变化的情况。

而鼠标必须移动的最小的距离,是DPI的倒数。假设某鼠标是400DPI,那么这个鼠标A必须移动1/400英寸,屏幕上光标移动1个像素。而另一个800DPI的鼠标B,只须移动1/800英寸,光标就能移动1个像素。

这是第一层意义上的精度差别,就是鼠标对微小移动的响应能力。当鼠标B移动了1/400英寸时,屏幕上光标可以移动2个像素。其表现出的结果就是鼠标B的光标移动速度是比鼠标A快2倍(这时候鼠标本身的移动速度是一样的)。

但是屏幕上的位移则更快了,直观的好处是在相较DPI较低的时代,大屏幕上可以拥有比较理想的移动速度,例如Razer早期的包装上经常有这样的宣传图示,我想是针对外国用户的吧。

那么在同样的鼠标移动距离下,DPI值低的鼠标A能不能获得较高的光标的移动速度呢(注意,是光标的速度)?当然没问题,驱动里来个加速就行了。一次不是移动1个像素,而是2个像素,那么它就能和鼠标B的光标移动速度一样了。

但是新的问题又产生了,鼠标A本身快速移动的也许还看不出,当鼠标慢速移动时,就会发现鼠标在屏幕上的光标总是只能在2的倍数的像素上停留,鼠标光标在跳动着移动。这是第二层意义上的精度差别,就是鼠标对屏幕像素的操纵能力。所以高DPI鼠标,可以由小幅操作获得高响应,并同时保持高度的像素的操纵能力。


光学鼠标的DPI值决定方法

DPI(CPI)是一个硬件指标,就应该由鼠标的硬件来决定。光学鼠标的DPI值主要取决于光学引擎中的CMOS矩阵和配套的透镜。

以上面的400DPI的鼠标A为例,它能对1/400英寸的移动做出反应,也就是说每移动1/400英寸CMOS矩阵上的成像至少产生1个像素的平移。这一个像素也就对应了1/400=0.0025英寸。而这个像素本身有多大呢?以一个10*10的矩阵为例,它的一边长度为0.1英寸,那它的一个像素的边长就是0.01英寸。

为了能让一个像素对0.0025英寸的移动产生反映,就需要用一个4倍的透镜来放大使之一一对应。公式为:像素边长=透镜倍率/DPI值。

如何提高DPI值呢?有2个办法。

A、提高COMS矩阵的像素密度。设边长0.1英寸不变,提高像素密度为20*20,则一个像素的边长就是0.005英寸,同时透镜比率4倍不变,这样就可以对0.005/4=1/800英寸的移动产生反应,也就是提高到了800DPI。

B、换用高放大倍率的透镜。COMS矩阵不变,像素的边长就是0.01英寸,透镜比率提高到8倍,也可对0.01/8=1/800英寸的移动产生反应,也提高到了800DPI。

方法A、B可以单独或同时使用。能采用方法A的只能是光学引擎的生产商,而换透镜普通鼠标生产商也有可能做到。鼠标中采用的塑料透镜本身精度很低,安装公差也不是很高,随意提高倍率会造成很大的成像失真,可能得不偿失。

光学引擎的成像原理其实就是显微照像,其CPI水平就相当于照相细节的放大清晰度。显然这个放大清晰度和照片的尺寸是没有关系的,它只取决于光学组件的放大率,也就是说即便你把COMS换成原来的一半大小,也只会使采样的影象变得更小,但是细节和清晰度不会改变。

分辨率通常使用dpi(每英吋点数,dotsper inch)来表示,可以测量出鼠标的精准度。实际上采用Agilent Technologies(安捷伦,现在叫Avago)原本的cpi(每英吋测量次数,count perinch)说法可能正确的多。现在大部份市面上的光学鼠都是800 cpi的,也就是说它们每移动一英吋就传回800次坐标。

但是有一点必须提醒大家注意的提高透镜的曲光率可以提高鼠标的CPI数值,但是这种方法的提升是有限的,因为在CMOS尺寸不变的情况下,CPI越高,能够成像的范围就会越小,这样对我们下面将要提到的各项参数要求也就越高。

同时由于光学引擎的成像是单镜头近距离成像,所以它的图象实际为鱼眼图象,在透镜曲率提升的同时其图象变形和像差也就越严重,最终变为废图。所以说除非对光学鼠标的光学结构作出较大的调整,否则很难期望光学鼠标的CPI可以达到高端光机鼠标的水平。


采样率(FPS):这是光学鼠标独有的技术参数,它代表CMOS每秒种对采样表面“拍照”的次数和DSP每秒相应的处理能力。

早期的光学鼠标在高速运动的时候,存在着严重的丢帧问题。出现这种情况其道理很简单,就是因为当鼠标高速移动的时候,很可能会出现CMOS相邻两次拍摄的图象中没有任何相同采样点的情况,没有共同的采样点,当然也就无从比较移动方向,这样造成DSP无法正常处理,从而产生大量错误信号。

解决这个问题一个主要的方法就是提升“拍照”的频率,“连拍”的频率越快,,没有共同的采样点的情况发生几率也就越低。微软的第二代Intellieye引擎就一举将采样频率从1500次/秒提升到6000次/秒,彻底解决了丢帧问题。而9月份即将要重返江湖的IE3.0也把采样频率提升到9000次/秒……………..

虽然说提升采样率可以解决丢帧的问题,但是单单只谈这一点显然是不科学的。这也是为什么光学引擎的原始设计者安捷伦已经不使用这个参数的原因,而道理就在于下面的“CMOS像素”。


CMOS像素数:罗技的MX光学引擎在采样率上并不及微软的第二代Intellieye引擎(MX光学引擎大约在5300次/秒左右),但在最大承受位移速度上却比微软鼠标更快,为什么呢?因为要保证在高速移动鼠标时,不出现相邻两次采样无共同采样点的情况。

除了加快扫描频率以外,还可以增加CMOS的尺寸,只要一次能够得到足够大的范围特征点,那么少“扫”几张,也不会影响定位准确性。

MX光学引擎是依靠比微软的第二代Intellieye引擎更大的CMOS像素数取得的精确定位效果。

DSP系统之所以能够对前后两张图片做出准确的判断,除了DSP本身的模糊运算能力以外,更主要的还是依赖“特征点”的取样,能够取得更多准确的特征点,就更加能够做出准确的判断。

提高特征点的数量有两种方法,一种就是提升引擎的CPI,CPI越高,对采样表面的细节分析就越透彻,但是单一提高CPI也会带来一些副作用,会影响鼠标对细密的重复性表面的识别能力。相比较起来令一种增加CMOS像素数的方法显然比较完美,CMOS的像素数增加了,可采用的特征点当然也就越多。

像素处理能力:正是因为传统的采样频率已经不能充分说明光学引擎的实际性能,所以罗技和安捷伦已经慢慢在淡化这些概念,将其与CMOS尺寸和DSP处理能力结合起来整合为“像素处理能力”。这个指标代表光学引擎综合采样的运算性能,而且非常科学。

最大速度和最大加速度:像素处理能力虽然十分科学,但是毕竟不够直观,所以将其与CPI参数相结合,可以派生出最大速度和最大加速度两个参数。

根据实验,人手在使用鼠标的时候,最高的移动速度约为30英寸/秒,但是早期的光学鼠标能够承受的最大位移只有15英寸/秒,这也是造成丢帧的根本。而第二代Intellieye引擎依靠6000次/秒的扫描频率一举将鼠标的最大位移提高到37英寸/秒(官方提供数据),MX引擎更加是达到了夸张的40英寸/秒(官方提供数据)。

鼠标的最大加速度其实和我们在物理课上学习到的概念没有什么差别,也就是通过DSP运算使鼠标在保证精确性的前提下能够达到的最大加速度。

接口速率:在这个指标上,光学鼠标和传统的鼠标并无不同,之所以这里还要强调主要是为了阐述为什么第二代Intellieye引擎依然只有400CPI的问题。

按照微软的看法,要做到400CPI以上而又不影响移动的精确性,只能通过在高速运动时求丢弃一些采样数据才能做到,换句话说,也就是当鼠标高速移动的时候实际CPI并不会达到标称数值。

评分

参与人数 1 +16 收起 理由
zach9999 + 16

查看全部评分

0
已赞
微信分享 收藏
回复

使用道具 举报

我的人缘0
2
发表于 2010-9-12 02:01 只看该作者
本帖最后由 xmiangui 于 2010-9-17 00:03 编辑

关于CPI的运算:

USB接口的报告率为125 count/report(125Hz),这是一个固定的数值,用户无法进行改动。而每次报告可以传达127个移动信号,即127count/次。400CPI意味着鼠标鼠标移动1英寸便发送400个移动信号,即1inch/400count。所以我们很容易得出下面的公式:

127count/report*125report/s*1inch/400count=39.69inch/s

由上面的公式可以算出,400Cpi的IntelliEye技术的最高追踪速度上限是39.69英寸/秒。而且,这已经是USB接口的极限数据。(如今看来,提高USB 125Hz的报告率对于提升ips还是有意义的,特别是诸如9500等高参数的鼠标,其需要上报的数据量可能是非常夸张的)


关于扫描频率的运算:

最后有一点必须强调的是,以上的计算全部是在足够的扫描频率下才有意义,也就是说扫描频率的指标必须达到保证DSP精确取样的前提下,当然这个频率和CMOS的大小也有很大关系。
当扫描频率超过最大位移需要的时候,它将变得没有意义,而且还会增加DSP的运算负担。所以说即便微软推出9000次/秒扫描频率的产品消息属实的话,那对于用户来说也没有什么大意义。

我们在前面曾经提到的,摄像头捕捉到的图像将会传回感应器做处理,这个感应器就和一般摄像头一样能够处理固定数目的像素。当然随着可处理像素的上升,图像也会更加精确。先前我们都没注意到感应器的“尺寸”,因此MX引擎采用加大感应器的方式,以获得更精确的图像。

这样一来,当处理芯片比较两幅图像时,也会有更多信息可供分析,进而使鼠标移动更加精确。所以他们提到的“每秒470万像素/秒”处理能力,事实上就等于“每秒捕捉图像数”乘上“每幅图像像素”。这样在我们得知MX引擎实际为30*30以后几乎可以自己演算出MX引擎的“每秒捕捉图像数”,也就是扫描频率。

4700000/(30*30)=5222.22次/秒

由于我们没有得到微软官方关于第二代Intellieye引擎的像素处理能力相关数据,所以我们还可以再进行一次计算。

22*22*6000=290.4万像素/秒

综合上面几点分析,我们不难看出CMOS为22*22的第二代Intellieye引擎显然需要更大的扫描频率才可以和CMOS为30*30的MX引擎抗衡。





自己再吐槽两句:这篇文章是我玩外设没多久以后第一次看到的,也算是启蒙了吧。文中的产品举的很早,对现在参数早已大大增强的鼠标传感器可能意义不大,但可以类比着看,我就转载了自认为比较有价值的技术部分。

作者在当时(06年)感叹鼠标的发展已经陷入瓶颈,很多参数的提高带不到实际的效果。但从06到09年这三年中,鼠标性能的发展可谓是飞速前进,光看数据上完全不亚于以往。而且游戏外设Fans被好鼠标口味“养起来”以后,对原先并不太敏感的参数——比如以前有人认为20的ips足够了,10g的加速度已经用不着了,现在看来这只能算入门级的参数——也有了一定的要求。

而且如今游戏鼠标和办公鼠标的性能差异也相比拉大了很多:原文作者曾举过当时有的办公鼠快速拉动已经不会指针丢失的例子,现在看来“指针丢失”这个要求未免也太低,办公鼠毕竟还是不能胜任比较高的要求。

但这篇文章技术部分的意义在于:决定鼠标传感性能的核心参数仍然是原来那么几个。处理能力上去了,ips、最大加速度自然也高上去。比如9500的传感能力够强、DSP够强,自然参数也夸张得离谱。并且能放到用户眼前的DPI、刷新率、回报率,并不是孤立的,这也是技术贴解惑的一部分(这样的帖子,我是写不出啦),所以想来转载还是有意义的。话说里面提到了透镜,我发的时间是不是有点微妙了……

之前以为这么老的帖子应该有人发过了吧,网上毕竟有很多被人改名换姓的“转载”,再加上也是多年前看的了,也一直没想起来发,现在也正好温故而知新一下。

回复 支持 反对

使用道具 举报

我的人缘0
3
发表于 2010-9-12 08:45 只看该作者
这个猛!要顶
回复 支持 反对

使用道具 举报

我的人缘0
4
发表于 2010-9-12 08:59 只看该作者
这个非常重要,涵盖性很强啊
回复 支持 反对

使用道具 举报

我的人缘0
5
发表于 2010-9-12 09:47 只看该作者
测试
好贴  学习了!!!
回复 支持 反对

使用道具 举报

我的人缘1
6
发表于 2010-9-15 09:49 只看该作者
顶技术贴。
回复 支持 反对

使用道具 举报

我的人缘0
7
发表于 2010-9-15 10:45 只看该作者
技术
回复 支持 反对

使用道具 举报

我的人缘0
8
发表于 2010-9-15 10:59 只看该作者
测试
技术贴,学习了。
回复 支持 反对

使用道具 举报

我的人缘0
9
发表于 2010-9-15 11:06 只看该作者
技术帖~学习中~
回复 支持 反对

使用道具 举报

我的人缘1
10
发表于 2010-9-15 11:19 只看该作者
测试
像素处理能力 这一概念,实在NB,像素处理能力=CMOS面积×扫描率,微软就是扫描率高,罗技早先就是面积大……后来微软还是那么大,罗技就开始NB了。
回复 支持 反对

使用道具 举报

12下一页
高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则