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