求教二进制数如何转换成CSD数?
比如二进制码: 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楼的解释。
楼上都是高手,学习学习
