如何通过Python制作伪随机二进制序列(prbs)信号?
答案 0 :(得分:1)
请参见以下代码。这有点粗糙,但是您可以了解如何使用NumPy创建 随机信号 和 PRBS 。
import numpy as np
import matplotlib.pyplot as plt
nstep = 3000
# random signal generation
a = np.random.randint(-5, 5, nstep) # range for amplitude
b = np.random.randint(10, 100, nstep) # range for freuency
b[0] = 0
for i in range(1,np.size(b)):
b[i] = b[i-1]+b[i]
# Random Signal
i=0
random_signal = np.zeros(nstep)
while b[i]<np.size(random_signal):
k = b[i]
random_signal[k:] = a[i]
i=i+1
# PRBS
a = np.zeros(nstep)
j = 0
while j < nstep:
a[j] = 5
a[j+1] = -5
j = j+2
i=0
prbs = np.zeros(nstep)
while b[i]<np.size(prbs):
k = b[i]
prbs[k:] = a[i]
i=i+1
plt.figure(0)
plt.subplot(2,1,1)
plt.plot(random_signal, label='Random Signal')
plt.legend()
plt.subplot(2,1,2)
plt.plot(prbs, label='PRBS')
plt.legend()
plt.show()
答案 1 :(得分:0)
>>> from random import choice
>>> def prbs():
... while True:
... yield choice([False, True])
答案 2 :(得分:0)
这是带有单项多项式的prbs31的基本实现: x 31 + x 28 +1
def prbs31(code):
for i in range(32):
next_bit = ~((code>>30) ^ (code>>27))&0x01
code = ((code<<1) | next_bit) & 0xFFFFFFFF
return code
给出一个整数,该函数将一次生成一个PRBS序列,并返回一个包含序列的后32位的整数。请注意,输入整数的x 31 以上的位与输出无关。
XOR和取反用于执行按位(模2)加法。这可能不会提高上述代码的性能,但是您可以一次使用位运算来计算代码,以提高性能。例如:
def prbs31_fast(code):
next_code = (~((code<<1)^(code<<4)) & 0xFFFFFFF0)
next_code |= (~(( (code<<1 & 0x0E) | (next_code>>31 & 0x01)) ^ (next_code>>28)) & 0x0000000F)
return next_code