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()
Другие вопросы по тегам