CSD(Canonic signed digit)正则有符号数
来源:互联网 发布:车辆数据 编辑:程序博客网 时间:2024/06/07 01:51
CSD的全称是Canonic signed digit,这是一种很有意思的数,下面我先举一个CSD数的例子让大家有个直观的印象
例如我们想用12位二进制数表示(-1,1)范围内的数,比如0.9985这个数,如果用12位的二进制数表示是:011111111101(第一是符号位,小数点在第一位到第二位之间)
那么0.9985的CSD数是100000000(-1)01
好了,0.9985的二进制表示大家都懂,就不用多说了,但是100000000(-1)01是个什么gui呢?算一下就知道了
100000000(-1)01 = 1-2^(-9)+2^(-11),这样就清楚了,第一位带表1,第九位是-1,带表-2^(-9),第十一位是1带表+2^(-11)
------------------------------------------------------------------------------------------------------------------------------------------------------------------
问:CSD这种表示引入了-1这种比较另类的值,有什么作用呢?
这里引用一段话 “In 1961, Avizienis described the signed digit number system (used since the 1950s in order to improve speed in arithmetic computation. The Canonical Signed Digit (CSD) number system is a signed digit number system that minimize the number of non-zero digits and thus can reduce the number of partial product additions in a hardware multiplier.”--《CANONICAL SIGNED DIGIT REPRESENTATION FOR FIR DIGITAL FILTERS 》
大概意思就是CSD码可以降低非0数的个数,对比上面的一个例子,同样表示0.9985,用二进制表示一共需要10个1,尔使用CSD码只需要2个非0数。 更据理论计算,使用二进制表示的数大约有1/2的非零值,使用CSD表示的数大约有1/3的非零值。
问:非零值少有什么好处呢?
在FPGA的设计中,乘法器的设计往往非常重要,如果乘数是确知的一组数的话,那么可以不使用全规模的乘法器转而设计专用乘法器,这里举一个例子
B=A乘01100001(有符号的补码数)
B=A左移6位+A左移5位+A
可以看出非零值越少,需要做的操作也相应的变少。
问:既然怎么好,那怎么求CSD数呢?
引用eetop论坛的网友“skytang007”的回答
正则数编码,很简单
从低位到高位, 如果发现"11"(两个连续的"1"),就用10(-1)表示。因为11 = 100 -001。
这样,你就把“11”用0(-1)来替换,10(-1)中的最高位“1”就进位到高位去,后面以此类推。
例如 001010101101110
=0010101011100(-1)0
=0010101100(-1)00(-1)0
=0010110(-1)00(-1)00(-1)0
= 00110(-1)0(-1)00(-1)00(-1)0
= 010(-1)0(-1)0(-1)00(-1)00(-1)0
- CSD(Canonic signed digit)正则有符号数
- FPGA使用有符号数signed
- signed 与 unsigned 有符号和无符号数
- [signed][input]Verilog的有符号数输入测试
- 深刻理解unsigned char, signed char. 有符号数,无符号数.
- 有符号和无符号 unsigned signed
- 不带signed或unsigned关键字的char型 无符号数? 有符号数? C标准规定为 Implementation Defined !!!
- 不带signed或unsigned关键字的char型 无符号数? 有符号数? C标准规定为 Implementation Defined !!!
- 有符号数转无符号数
- 有符号数表示
- 有符号数
- 有符号数
- verilog 有符号数
- 有符号数和无符号数
- 有符号数和无符号数
- 有符号数和无符号数
- 有符号数和无符号数
- 有符号数和无符号数
- PostgreSQL学习手册(数据库维护)
- Ubuntu 配置 opencv , CodeBlocks 开发环境
- Erlang OTP学习(2):gen_event
- jsp中的JSTL与EL表达式用法
- android 按钮背景颜色以及按下颜色设置
- CSD(Canonic signed digit)正则有符号数
- keepalived 详解
- python,学校成员类的例子,老师和学生(python class父类与子类之间的联系与逻辑)
- PostgreSQL学习手册(系统表)
- 606第九周周三赛 E - What day is it今天星期几
- [kuangbin带你飞]专题一 简单搜索 E - Find The Multiple poj 1426
- PostgreSQL学习手册(系统视图)
- OFFICE2016仅安装需要的组件
- 万万不要自己发明语法