微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 求教二进制数如何转换成CSD数?

求教二进制数如何转换成CSD数?

时间:10-02 整理:3721RD 点击:
如题
比如二进制码: x=0011111011000101
其CSD编码为: csd=0100000-10-1000101
这个转换过程是怎么样的呢?

LZ,CSD编码是什么?

same question

前阵子搞过,不过代码没找到了
在google里面可以搜到相关CSD的

CSD编码是一种三元数值编码系统,即将符号数用(-1,0,1)来表示。

CSD全称为Canonic signed digit

正则数编码,很简单
从低位到高位,  如果发现"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

在什么情况下使用?

常数乘法器
因为经这种编码方式可以减少整个数中的非零值的个数.  配合加法树什么的,可以减少乘法器面积,提高运算速度.

谢谢 很有用 正需要

http://www.eetop.cn/bbs/viewthre ... mp;highlight=CSD%2B

请问你找到了吗?



    “11”用0(-1)来替换,10(-1)中的最高位“1”就进位到高位去,后面以此类推   这句最经典。



       方法: 把11用101代替,最高位的1再与原数结合再代替就行。
       eg:  x=0011111011000101
        第一步:0011111 101 000101
        第二步:100001 01 000101

matlab 里面做FIR 时会有选项的让你选择系数采用CSD

多谢了,这个真的很经典,最简洁有效。

大侠这里是不是笔误了,11用10(-1)代替。

e....看不懂,能提供点资料吗?

7楼说的很到位,最后把负号去掉就行了

感谢7楼的解释。

楼上都是高手,学习学习

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top