python實現偽隨機序列

2021-06-28 08:01:16 字數 1494 閱讀 8914

偽隨機序列又稱為偽雜訊序列。其中二進位製偽隨機序列在訊號同步、擴頻通訊和多址通訊等領域得到了廣泛的應用。例如,在擴頻通訊中,使用偽雜訊序列作為擴頻訊號,可使得擴頻後的訊號具有很寬的頻譜,因此具有頻率譜密度很小的特性。下面重點介紹m序列的實現。

m序列是最長線性移位暫存器序列的簡稱。其最大長度決定於移位暫存器的級數,碼的結構決定於反饋抽頭的位置和數量。不同的抽頭的組合可以產生不同長度和不同結構的碼序列。m序列實現的關鍵是模2加法器。

**實現如下:

# 偽隨機序列

# pseudo_random_state表示從介面上獲取的狀態值,分別對應著7,9,15,16,20,21,23和使用者自定義

# init_value表示初始值,用字串儲存;expression為本原表示式的冪,用列表儲存

# 字典用偽隨機狀態作為鍵,包含初始值和本原表示式的冪的列表作為值,進行一一對應

def generate_prbs(pseudo_random_state, init_value=none, expression=none):

if pseudo_random_state == 'user_define':

pseudo_random_sequence = real_calculate_prbs(init_value, expression)

else:

pseudo_random_dict =

pseudo_random_sequence = real_calculate_prbs(pseudo_random_dict[pseudo_random_state][0],

pseudo_random_dict[pseudo_random_state][1])

return pseudo_random_sequence

# 真正計算偽隨機序列

# 用xrange省空間同時提高效率

def real_calculate_prbs(value, expression):

#將字串轉化為列表

value_list = [int(i) for i in list(value)]

#計算偽隨機序列週期長度

pseudo_random_length = (2 << (len(value) - 1))-1

sequence =

#產生規定長度的偽隨機序列

for i in xrange(pseudo_random_length):

mod_two_add = sum([value_list[t-1] for t in expression])

xor = mod_two_add % 2

#計算並得到偽隨機序列的狀態值

value_list.insert(0, xor)

return sequence

if __name__ == '__main__':

result_data = generate_prbs('user_define', '1111', [4, 1])

print result_data

小m序列產生 簡單易用的偽隨機序列

線性反饋移位暫存器 lfsr 是產生m序列的原型,m序列有強自相關性和低互相關性 體現在雙極性化後,相關運算後的峰均比 其序列長度為 2 n 1,每乙個序列元素都對應乙個暫存器組的狀態。生成m序列的關鍵因素有 階數 同時決定了反饋邏輯 種子 暫存器初始狀態 這裡規定 移位操作是從msb向lsb移位,...

的確是偽隨機

c語言的 裡 rand 函式可以產生 0 rand max 包括 之間的隨機數,通常是經過 srand 函式進行初始化後再使用。rand max 的值預設是 32767 即 2 15 1 在 裡的定義是 define rand max 0x7fff 所以如果需要求 a,b 顯然要有 b rand m...

偽隨機與實驗

眾所周知,計算機產生的是偽隨機數。所謂偽隨機,就是 當知道種子和隨機產生演算法之後,就可以完全確定出隨機數序列了。並且這個隨機數序列是迴圈重複的。不同的隨機產生演算法的迴圈週期不同 好的隨機產生演算法的迴圈週期會很長。有的文章提到,可以通過引入系統以外的變數來達到真隨機的目的,比如 unix 維護了...