LFSR計算器 - 線性回饋移位暫存器
使用可自訂種子與回饋抽頭的線性回饋移位暫存器產生偽隨機二進位序列。
輸入暫存器長度、初始種子、回饋抽頭位置、LFSR 類型與迭代次數,然後點擊產生序列。
LFSR計算器 - 線性回饋移位暫存器
使用可自訂種子與回饋抽頭的線性回饋移位暫存器產生偽隨機二進位序列。
表示初始狀態的二進位字串(僅限 0 和 1)
以逗號分隔的抽頭位置,從 1 開始
要執行的移位操作次數
產生的序列
輸出位元:
000100110101111序列週期: 15
最大長度: 是
暫存器狀態:
0: 1000
1: 0100
2: 0010
3: 1001
4: 1100
5: 0110
6: 1011
7: 0101
8: 1010
9: 1101
10: 1110
11: 1111
12: 0111
13: 0011
14: 0001
15: 1000
關於 LFSR 計算器
線性回饋移位暫存器(LFSR)是一種移位暫存器,它的輸入位元是其部分歷史狀態位元經過線性函數(XOR)計算而得。每個時鐘週期,暫存器都會整體移位一位,新輸入位元由稱為回饋抽頭的特定位置位進行 XOR 計算,輸出則是被移出的那一位。得到的二進位序列看起來隨機,但完全是確定性的,其重複週期取決於暫存器長度和抽頭選擇。
LFSR 廣泛用於數位通訊、密碼學、內建自我測試(BIST)電路、擴頻系統以及偽隨機數產生。對於 n 級 LFSR,最多可以在重複前產生 2ⁿ − 1 位序列(全零狀態不包含在內);透過精心選擇原始多項式抽頭,可以實現這種最大長度序列,因此 LFSR 是一種高效的硬體偽隨機實作方式。
常見的 LFSR 架構有兩種。在 Fibonacci(外部回饋)LFSR 中,回饋位元由固定的一組抽頭位置計算得出,然後送入最左側級,其餘各級向右移位。輸出取自最右側級。在 Galois(內部回饋)LFSR 中,回饋位元不是只回送到輸入端,而是直接 XOR 到多個中間級。由於所有 XOR 運算平行完成而不是串列完成,Galois LFSR 的硬體速度更快。
最大長度 LFSR——也就是在重複前遍歷所有 2ⁿ − 1 個非零狀態的 LFSR——需要使用原始多項式作為回饋多項式。抽頭位置對應於該多項式的非零係數。對於一個抽頭位於 4 和 3 的 4 位元 LFSR,其原始多項式為 x⁴ + x³ + 1,LFSR 會循環遍歷全部 15 個非零狀態。
這個計算器可以讓你探索暫存器長度、種子、抽頭位置和 LFSR 類型的任意組合。你可以透過結果中的週期來驗證所選抽頭是否產生最大長度序列——如果週期等於 2ⁿ − 1,這些抽頭就構成了原始多項式。使用提供的範例,可以查看一些常見的最大長度配置。
LFSR 的應用遍及多個領域。在 Wi‑Fi 和 Bluetooth 中,LFSR 提供頻率跳變和直接序列擴頻所需的擴頻碼。在儲存和通訊中,CRC(循環冗餘檢查)電路通常用 LFSR 實作。在密碼串流密碼中,LFSR 構成核心原語(不過現代密碼會將多個 LFSR 與非線性元件結合,以抵抗線性密碼分析)。在晶片測試中,基於 LFSR 的特徵分析會把測試回應資料壓縮成緊湊的簽章。
LFSR 範例
展示最大長度序列與不同暫存器規模的常見 LFSR 配置。
| 配置 | 週期 | 說明 |
|---|---|---|
| 4-bit, seed=1000, taps=[4,3], Fibonacci | 15(最大長度) | 原始多項式 x⁴+x³+1。遍歷全部 15 個非零 4 位元狀態。 |
| 8-bit, seed=10110001, taps=[8,6,5,4], Fibonacci | 255(最大長度) | 密碼學應用中常見的標準 8 位元 Fibonacci LFSR。 |
| 5-bit, seed=10101, taps=[5,3], Galois | 31(最大長度) | 內部回饋的 Galois LFSR,支援更快的平行 XOR 運算。 |
| 3-bit, seed=110, taps=[3,2], Fibonacci | 7(最大長度) | 簡單的 3 位元 LFSR,非常適合用來理解概念。 |
如何使用 LFSR 計算器
- 將暫存器長度設定為所需的位元數(例如,4 代表 4 位元 LFSR)。
- 輸入初始種子,格式為與暫存器長度相同的二進位字串(例如 1000)。不要使用全零狀態——它會讓 LFSR 卡住。
- 輸入回饋抽頭,使用逗號分隔的位置(例如 4, 3)。抽頭位置從最左側級開始計數,起始值為 1。
- 選擇 LFSR 類型:Fibonacci(外部回饋)或 Galois(內部回饋)。
- 設定迭代次數,然後點擊產生序列,即可查看每一步的輸出位元流與暫存器狀態。
LFSR 計算器常見問題
什麼是最大長度 LFSR?
最大長度 LFSR 會在重複前遍歷所有 2ⁿ − 1 個可能的非零狀態。這要求回饋多項式(由抽頭位置定義)在 GF(2) 上是原始多項式。對於 4 位元 LFSR,最大週期是 15;對於 8 位元 LFSR,最大週期是 255。最大長度序列(稱為 m 序列)具有很好的偽隨機特性。
為什麼要排除全零狀態?
如果暫存器所有位元都為 0,XOR 回饋永遠只會得到 0,暫存器就會一直卡在全零狀態。因此初始種子不能是全零。出於同樣的原因,最大週期是 2ⁿ − 1,而不是 2ⁿ。
Fibonacci 和 Galois LFSR 有什麼差別?
在 Fibonacci LFSR 中,回饋位元由所有抽頭位置 XOR 得到,並送入第一級;其餘級只做單純移位。在 Galois LFSR 中,回饋位元會直接平行 XOR 到多個中間級。兩者(在對應多項式相同的情況下)會產生相同的序列,但 Galois 在硬體中更快,因為 XOR 運算是平行的。
如何選擇合適的抽頭位置?
要得到最大長度序列,抽頭位置必須對應 GF(2) 上的原始多項式。常見暫存器長度的原始多項式表已廣泛公開。例如,n=4 時,原始多項式 x⁴+x³+1 對應抽頭 [4,3];n=8 時,多項式 x⁸+x⁶+x⁵+x⁴+1 對應抽頭 [8,6,5,4]。
LFSR 序列真的是隨機的嗎?
不是——LFSR 序列是確定性的,只要知道種子與抽頭位置就能完全預測。它們之所以稱為偽隨機,是因為它們能通過許多統計隨機性測試,而且對不了解配置的人來說看起來像隨機數。用於密碼學時,LFSR 必須與非線性元件結合,以抵抗線性密碼分析。
什麼是 CRC,它與 LFSR 有什麼關係?
循環冗餘檢查(CRC)是一種錯誤偵測碼:它把訊息多項式除以 GF(2) 上的生成多項式,並附加餘數。這個除法過程等同於讓訊息位元通過由生成多項式定義的 LFSR。標準 CRC-32 使用特定的 32 位元原始多項式,其硬體實作就是一個 32 級 LFSR。