我遵循了精彩的GNURadio Guided Tutorial PSK解调: https://wiki.gnuradio.org/index.php/Guided_Tutorial_PSK_Demodulation
我输入一系列滑动的位。因此,我输入的第一个字节是0x01,下一个字节是0x02,0x04,0x08,依此类推。这是hd:
的输出00000000 00 00 ac 0e d0 f0 20 40 81 02 04 08 10 00 20 40 |...... @...... @|
00000010 81 02 04 08 10 00 20 40 81 02 04 08 10 00 20 40 |...... @...... @|
*
00015000
前几个字节是垃圾,但是你可以看到模式。看看你看到的第二行: 0x81,0x02,0x04,0x08,0x10,0x00,0x20,0x40,0x81
走路的那些存在,但是在0x10之后,PSK解调器接收到0x00,然后几个字节后接收到0x81。几乎看起来时机恢复都没有了。
还有其他人见过这样的东西吗?
答案 0 :(得分:0)
如果你让它运行,BER将继续下降。要记住一些事情。 PSK Mod采用8位值(或者也可以是short或int)。它抓住位并调制它们。然后PSK Demod做同样的事情。如果将其保存到文件中,则无法获得确切的位。您需要移动位以对齐它们。我添加了Vector Insert块以生成各种前导码。
然后我写了一些Python来找到我的序言:
import numpy as np
import matplotlib.pyplot as plt
def findPreamble(preamble, x):
for i in range(0, len(x) - len(preamble)):
check = 0
for j in range(0, len(preamble)):
check += x[i + j] - preamble[j]
if (check == 0):
print("Found a preamble at {0}".format(i))
x = x[i + len(preamble)::]
break
return check == 0, x
def shiftBits(x):
for i in range (0, len(x) - 1):
a = x[i]
a = a << 1
if x[i + 1] & 0x80:
a = a | 1
x[i] = (a & 0xFF)
return x
f = open('test.bits', 'rb')
x = f.read();
f.close()
preamble = [0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08]
searchForBit = True
x = np.frombuffer(x, dtype='uint8')
x = x.astype('int')
print(x)
while searchForBit:
x = shiftBits(x)
print(x)
found, y = findPreamble(preamble, x)
if found:
searchForBit = False
y = y.astype('uint8')
f = open('test.bits', 'wb')
f.write(y)
f.close()