CRC二進位制除法的一些總結

2021-10-24 13:29:57 字數 1889 閱讀 8966

使用matlab生成乙個 60位的隨機數,用2048個12位的多項式對其做除法運算,檢視其餘數的重複情況。

用足夠多的隨機數60位隨機數做第一問的除法運算,觀察總體的重複的概率分布。

第一次用matlab程式設計。

查詢了crc迴圈冗餘的資料,就跟著crc求餘數的思路。

crc方法:把12位多項式當做除數,把多項式係數變成二進位制01編碼,最高次1, 於是12位多項式相

然後,把生成的隨機數也變成二進位制,在其後面補r=(多項式長度-1)個0,

再除以多項式,二進位制除法就相當於異或計算,不進製。餘數的取最後的r位。(做到這裡就達到題目的要求了)再將隨機數的後r位用餘數替換,除以二進位制多項式,若餘數為0,則正確,不為0,錯誤。

1.十進位制轉二進位制dec2bin

轉化後的二進位制格式,要轉變成向量矩陣,才能進行矩陣合併,進而補0

oba=dec2bin(a) ;

d=;for l=1:length(oba)

d=[d str2num(oba(l))];

endd;

2.設定乙個空矩陣x,最後填充時,格式要對,還要把向量轉成十進位制

r=num2str(r)

r=bin2dec (r

1*********xx共2048個12位多項式,十進位制時2048到4095

後一位確定為1,所以都不能被2整除所以可以作為判斷條件。

[q,v]=deconv()相當於多項式除法,結果可能為負數

mod2,模2取餘法,求得餘數。

5.用二進位制計算要注意之前各種資料格式的轉化!!格式不對,會報錯。而且有時回報2^53的錯

這是crc,執行100次的概率圖

這是用十進位制直接除100次的概率圖

十進位制執行1w次的概率。

用crc演算法,matlab執行太慢,裡面有太多的for迴圈。其核心是多項式除法,即異或除法,所以和10進製除法不一樣。

附加crc**:

x=;i=0;

a=unidrnd(2^60-1)

oba=dec2bin(a) ;

d=;for l=1:length(oba)

d=[d str2num(oba(l))];

endd;

for m=2048:4095

obj=dec2bin(m) ;

c=;for j=1:length(obj)

c=[c str2num(obj(j))];

endc;

r=length(c)-1;

[q,r] = deconv([d zeros(1,r)],c);

r=mod(r(end-r+1:end),2);

r=num2str(r);

r=bin2dec®;

i=i+1;

x(i)=r;

endend

fprintf(『x=%dx』)

第二問假設用2000個隨機數分別求第乙個多項式…第2048個多項式,看哪個餘數的重複最少。即驗證2048個crc多項式哪個最優。

只用把除數的迴圈提前,再加乙個2000次迴圈就可以了。

把資料匯入excel中操作比較方便,篩選出餘數個數最多的多項式。111001010011

關於二進位制的一些總結

5 00000000 00000000 00000000 00000101 原碼 乙個整數,按照絕對值大小轉換成的二進位制數 反碼 將二進位制數按位取反,所得的新二進位制數稱為原二進位制數的反碼 補碼 反碼加1稱為補碼 5 原碼 00000000 00000000 00000000 00000101...

二進位制的一些操作

1 二進位制與十進位制互轉 十進位制轉二進位制 例子 13 1101 13 2 6餘1 6 2 3餘0 3 2 1餘1 1 2 0餘1 那麼13用二進位制表示為 1101 倒序排列餘數 不足的用0補齊 00001101 二進位制轉十進位制 例子 1101 13 可以在c 裡面宣告為 int num ...

二進位制補碼的一些思考

最近都一直在看幾本關於計算機組成原理方面的大作 code the hidden language of computer hardware and software computer system a programer perspective introduction to computer sy...