Gray Code & One_hot encoding

1.  Gray Code (格雷码)

 

說明

 

 

Gray Code是一個數列集合,每個數使用二進位來表示,假設使用n位元來表示每個數好了,任兩個數之間只有一個位元值不同,例如以下為3位元的Gray Code:

 

000 001 011 010 110 111 101 100

 

 


由定義可以知道,Gray Code的順序並不是唯一的,例如將上面的數列反過來寫,也是一組Gray Code:

 

100 101 111 110 010 011 001 000

 

 


Gray Code是由貝爾實驗室的Frank Gray在1940年代提出的,用來在使用PCM(Pusle Code Modulation)方法傳送訊號時避免出錯,並於1953年三月十七日取得美國專利。

 

解法

 

 

由於Gray Code相鄰兩數之間只改變一個位元,所以可觀 察Gray Code從1變0或從0變1時的位置,假設有4位元的Gray Code如下:

 

0000 0001 0011 0010 0110 0111 0101 0100
1100 1101 1111 1110 1010 1011 1001 1000

 

 

 


觀察奇數項的變化時,我們發現無論它是第幾個Gray Code,永遠只改變最右邊的位元,如果是1就改為0,如果是0就改為1。

觀察偶數項的變化時,我們發現所改變的位元,是由右邊算來第一個1的左邊位元。

以上兩個變化規則是固定的,無論位元數為何;所以只要判斷位元的位置是奇數還是偶數,就可以決定要改變哪一個位元的值,為了程式撰寫方便,將陣列索引 0當作最右邊的值,而在列印結果時,是由索引數字大的開始反向列印。

將2位元的Gray Code當作平面座標來看,可以構成一個四邊形,您可以發現從任一頂點出發,繞四邊形周長繞一圈,所經過的頂點座標就是一組Gray Code,所以您可以得到四組Gray Code。

同樣的將3位元的Gray Code當作平面座標來看的話,可以構成一個正立方體,如果您可以從任一頂點出發,將所有的邊長走過,並不重複經過頂點的話,所經過的頂點座標順序之組合也就是一組Gray Code。

 

 

 

  

 

 

 

2.  One-hot Encoding (独热编码)

 

独热码是指对任意给定的状态,状态向量中只有1位为1,其余各位为0。N状态的状态机需要N个触发器,这种状态机的速度与状态的数量无关,只取决于某特定状态的转移数量,速度很快。当状态机的状态增加时,如果使用二编码,那么速度会明显下降,但如果采用独热码,虽然多用了触发器,但由于状态译码简单,节省和简化了组合逻辑电路。

 

 

 

 

In One-Hot coding, the encoding should be:

 

 

 

 

 

 State:        A    |     B    |      C    |     D

 

 

 

assignment:    0001  |  0010  |   0100  |   1000

 

increase the number of flip-flops you use, but has the advantage that needs less logic for the excitation equations.

 

 

举另外一个例子,比如:

 

十进制:       0       |        1       |         2      |         3        |         4        |       5        |       6       |        7       |       8         |       9 
独热码:000000000 | 000000001 | 000000010  |  000000100  |  000001000  | 000010000 | 000100000 | 001000000 | 010000000  | 100000000 

 

 

 

 

http://www.vlsibank.com/sessionspage.asp?titl_id=4867

 

Design artical:

 http://www.trilobyte.com/pdf/golson_pldcon93.pdf

 

 

 

 

对于寄存器数量多,而门逻辑相对缺乏的FPGA器件,采用独热码可以有效提高电路的速度和可靠性,也有利于提高器件资源的利用率。 

转载于:https://www.cnblogs.com/agllero/p/4428162.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在% 读取测试图片 test_img = imread('C:\Users\你的用户名\Desktop\新建文件夹\1.jpg'); % 灰度化处理 test_gray = rgb2gray(test_img); % 二值化处理 test_bw = imbinarize(test_gray, graythresh(test_gray)); % 腐蚀处理 se = strel('disk', 5); test_erode = imerode(test_bw, se); % 边缘检测 test_edge = edge(test_erode, 'Canny'); % 形状分析 stats = regionprops(test_edge, 'Area', 'Perimeter', 'Circularity'); area = stats.Area; perimeter = stats.Perimeter; circularity = 4 * pi * area / (perimeter^2); % 色度分析 red = test_img(:,:,1); green = test_img(:,:,2); blue = test_img(:,:,3); red_mean = mean(red(:)); green_mean = mean(green(:)); blue_mean = mean(blue(:)); % 进行分类 if area > 10000 && circularity > 0.7 && red_mean > 100 && green_mean < 150 && blue_mean < 150 fruit_type = '苹果'; elseif area > 5000 && circularity > 0.6 && red_mean < 100 && green_mean > 150 && blue_mean < 150 fruit_type = '香蕉'; elseif area > 15000 && circularity > 0.5 && red_mean > 150 && green_mean > 100 && blue_mean > 100 fruit_type = '芒果'; else error('无法识别该水果'); end % 输出结果 fprintf('该水果为:%s\n', fruit_type);在这个代码中我输入matlab后出现了错误使用 regionprops>getPropsFromInput (line 1279) 第 3 个输入, PROPERTIES, 应与以下字符串之一相匹配: 'Area', 'Centroid', 'BoundingBox', 'SubarrayIdx', 'MajorAxisLength', 'MinorAxisLength', 'Eccentricity', 'Orientation', 'ConvexHull', 'ConvexImage', 'ConvexArea', 'Image', 'FilledImage', 'FilledArea', 'EulerNumber', 'Extrema', 'EquivDiameter', 'Solidity', 'Extent', 'PixelIdxList', 'PixelList', 'Perimeter', 'PerimeterOld', 'PixelValues', 'WeightedCentroid', 'MeanIntensity', 'MinIntensity', 'MaxIntensity' 'Circularity' 输入与任何有效字符串均不匹配。 出错 regionprops>ParseInputs (line 1244) reqStats = getPropsFromInput(startIdxForProp, ... 出错 regionprops (line 205) [I,requestedStats,officialStats] = ParseInputs(imageSize, argOffset, varargin{:});这个错误,请将改正后的代码给我
06-09

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值