簡體   English   中英

將 CRC 初始移位寄存器值設置為全 1 的數學等效

[英]Mathematical equivalent of setting the CRC initial shift register value to all ones

我已經讀過,最初將 CRC 余數移位寄存器設置為全 1 在數學上等效於對消息的前n位進行補碼(非二進制),其中n是移位寄存器長度。 我發現這個聲明https://en.wikipedia.org/wiki/Computation_of_cyclic_redundancy_checks#Preset_to_%E2%88%921 ,並在部分21.3.7 IEEE 802.11ad標准規范,如呈現在這里

但是,我嘗試在 MATLAB 中驗證這一點,但沒有成功。 是我做錯了什么,還是這個陳述實際上是錯誤的? 對我來說似乎是假的。

x = [0 1 0 1 0 1 1 1];
div = [1 0 0 0 0 0 1 1 1];
n = length(div)-1;

% CRC with bit shift strategy
% Set REM shift register initial state to all '1'
x0 = [x zeros(1,n)];
rem0 = ones(1,n);
for k = 1:length(x0)
    rem0 = bitxor([rem0(2:n) x0(k)], rem0(1)*div(2:n+1));
end
disp(rem0)

% CRC with bit shift strategy
% Complement initial n bits
x0 = [bitxor(x, ones(1,8)) zeros(1,8)]; 
rem0 = zeros(1,n);
for k = 1:length(x0)
    rem0 = bitxor([rem0(2:n) x0(k)], rem0(1)*div(2:n+1));
end
disp(rem0)

% CRC Division strategy
% complement initial n 
x0 = bitxor(x, ones(1,n)); 
rem0 = [x0 zeros(1,n)];
for k = 1:length(x0)
    if rem0(k)==1
        rem0(k:k+n)=bitxor(rem0(k:k+n), div);
    end
end
disp(rem0(end-n+1:end))

這導致0111_0101用於移位寄存器的初始狀態設置為1和在的情況下0101_0001為其他兩種情況我補充輸入字的初始n位。

他們談論的初始移位寄存器值不是您的初始rem0

請注意,如果您不想反轉任何內容,例如:

% CRC with bit shift strategy
x0 = [x zeros(1,n)];
rem0 = zeros(1,n);
for k = 1:length(x0)
    rem0 = bitxor([rem0(2:n) x0(k)], rem0(1)*div(2:n+1));
end
disp(rem0)

您正在執行循環的 16 次迭代,其中前八次僅將x移入rem0 所以我們可以改為將rem設置為x ,然后進行最后八次迭代:

% CRC with fewer bit shifts strategy
rem0 = x;
for k = 1:length(x)
    rem0 = bitxor([rem0(2:n) 0], rem0(1)*div(2:n+1));
end
disp(rem0)

這更接近於通常的實現,現在我們有了他們談論的初始rem0 它最終看起來像這樣:

% CRC with fewer bit shifts strategy
rem0 = zeros(1,n);
rem0 = bitxor(rem0, x);
for k = 1:length(x)
    rem0 = bitxor([rem0(2:n) 0], rem0(1)*div(2:n+1));
end
disp(rem0)

其中rem0的初始化發生一次,其余的重復多個字節( x )。

現在你可以看到當你想用一個初始化時,第一個x

rem0 = ones(1,n);
rem0 = bitxor(rem0, x);

實際上等同於:

rem0 = zeros(1,n);
rem0 = bitxor(rem0, bitxor(x, ones(1,n)));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM