Question

Je suis en train de simuler l'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;

ma question est dans ce cas simple pourquoi mon tx et z ne contiennent pas les mêmes valeurs que je ne eventhough introduis encore aucun bruit? merci!

Les valeurs de tx vient comme suit:

Les colonnes 1 à 13

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

Les colonnes 14 à 26

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

Les colonnes 27 à 32

 0     0     1     0     0     1

valeurs de z proviennent de la manière suivante:

Les colonnes 1 à 13

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

Les colonnes 14 à 26

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

Les colonnes 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'
Était-ce utile?

La solution

Il est difficile pour moi de dire que je n'ai pas la boîte à outils de communication installé, mais je suggère d'essayer cela avec une entrée plus simple comme indiqué dans les exemples dans la documentation. Utilisez

tx = randint(10,1,8) 

par exemple. Ensuite, regardez à la sortie plutôt que de comparer. Les différences au niveau ou à proximité de précision de la machine? Vous ne nous dites pas ce qui est imprimé (sont-ils ou appariées pas?). Essayez de prendre la différence entre tx et z. Est-il près EPS (2.2204e-016 pour moi)?

Y at-il un décalage entre les données qui entrent et les données qui sortent? Dites-nous ce qui se passe avec les données.

Mise à jour

Je suis heureux que vous avez signalé que l'entrée et la sortie réelle. Il semble que z est décalé d'une à droite (et a un 3 au début pour une raison quelconque) qui signifie que vous perdez le dernier bit. En regardant le documentation Matlab , il y a une note qui dit

  

OQPSK démodulateurs ont un symbole 1   délai.

Je pense que cela explique le problème. En gros, juste un pad 0 supplémentaire à la fin de l'entrée au modulateur, enlever le premier élément de la sortie du démodulateur, et vous êtes en affaires.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top