GNURadio PSK бит восстановления
Я следовал замечательной учебной демодуляции PSUR по GNURadio: https://wiki.gnuradio.org/index.php/Guided_Tutorial_PSK_Demodulation
Я создал очень простой модулятор DBPSK
Я кормлю серией битов, которые скользят. Таким образом, первый байт, который я передаю, равен 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. Кажется, что восстановление времени выключено.
Кто-нибудь еще видел что-то подобное?
1 ответ
Хорошо, я понял это. Ниже моя модуляция DBPSK.
Если вы позволите этому запустить, BER будет продолжать падать. Некоторые вещи, которые нужно иметь в виду. PSK Mod принимает 8-битное значение (или, возможно, short или int). Он захватывает биты и модулирует их. Затем PSK Demod делает то же самое. Если вы сохраните это в файл, вы не получите точные биты. Вам нужно будет сдвинуть биты, чтобы выровнять их. Я добавил блок Векторной вставки, чтобы сгенерировать преамбулу.
Затем я написал 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()