modem.oqpskmod -> modem.oqpskdemod не тот же результат - PullRequest
0 голосов
/ 19 февраля 2010

Я пытаюсь смоделировать IEEE 802.15.4 / ZigBEE PHY, ...

   chip_values = [
   1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,0;
   1,1,1,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,0,1,0;
   0,0,1,0,1,1,1,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,0;
   0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,1,0,1,0,1;
   0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,1,1;
   0,0,1,1,0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,0,0,1,1,1,0,0;
   1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1,1,0,0,1;
   1,0,0,1,1,1,0,0,0,0,1,1,0,1,0,1,0,0,1,0,0,0,1,0,1,1,1,0,1,1,0,1;
   1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1;
   1,0,1,1,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1;
   0,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0,1,1,1;
   0,1,1,1,0,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0;
   0,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,1,0,0,1,0,1,1,0;
   0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0,1,0,0,1;
   1,0,0,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0,0,1,1,0,0;
   1,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0,0];

   tx = [];
   values = randsrc(1,1,[0:15]);
   for k=1:length(values)
    sym = values(k);
    tx = [tx chip_values((sym+1),1:end)];
   end;

   tx = tx.';
   h = modem.oqpskmod;
   y = modulate(h, tx);
   g = modem.oqpskdemod(h);
   z = demodulate(g, y);
   length(z)
   for k=1:length(tx)
    if(tx(k)~=z(k))
     fprintf('%d %d\n',tx(k),z(k)); 
    end;
   end;

Мой вопрос в этом простом случае, почему мои tx и z не содержат одинаковые значения, хотя я и сделалне вводите шум еще?спасибо!

значения tx имеют следующий вид:

Столбцы с 1 по 13

 0     1     1     0     0     0     0     0     0     1     1     1     0

Столбцы с 14 по 26

 1     1     1     1     0     1     1     1     0     0     0     1     1

Столбцы с 27 по32

 0     0     1     0     0     1

значения z имеют следующие значения:

Столбцы с 1 по 13

 3     0     1     1     0     0     0     0     0     0     1     1     1

Столбцы с 14 по 26

 0     1     1     1     1     0     1     1     1     0     0     0     1

Столбцы с 27 по 32

 1     0     0     1     0     0


  h =

         Type: 'OQPSK Modulator'
            M: 4
  PhaseOffset: 0
Constellation: [1x4 double]
  SymbolOrder: 'Binary'
SymbolMapping: [0 1 2 3]
    InputType: 'Integer'

  g =

         Type: 'OQPSK Demodulator'
            M: 4
  PhaseOffset: 0
Constellation: [1x4 double]
  SymbolOrder: 'Binary'
SymbolMapping: [0 1 2 3]
   OutputType: 'Integer'
 DecisionType: 'Hard decision'

1 Ответ

0 голосов
/ 19 февраля 2010

Мне трудно сказать, так как у меня не установлен инструментарий связи, но я бы посоветовал попробовать это с более простым вводом, как показано в примерах в документации.Например, используйте

tx = randint(10,1,8) 

.Тогда смотрите на результат, а не просто сравнивая.Различия в точности станка или близки к ней?Вы не говорите нам, что распечатано (они совпадают или нет?).Попробуйте взять разницу между tx и z.Это около eps (2.2204e-016 для меня)?

Есть ли сдвиг между входящими и выходящими данными?Расскажите нам, что происходит с данными.

Обновление

Я рад, что вы опубликовали этот фактический ввод и вывод.Похоже, z смещен вправо (и почему-то имеет 3 в начале), что означает, что вы теряете последний бит.Глядя на документацию Matlab , можно заметить, что демодуляторы

OQPSK имеют задержку в 1 символ.

Я думаю, что это объясняет проблему,По сути, просто добавьте дополнительные 0 в конце входа в модулятор, снимите первый элемент с выхода демодулятора, и вы в деле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...