Domanda

Sto cercando di simulare il PHY IEEE 802.15.4 / ZigBee, ...

   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;

la mia domanda è in questo caso semplice perché il mio tx e z non contengono gli stessi valori eventhough non ho ancora introdurre alcun rumore? grazie!

valori di tx si presenta come segue:

colonne da 1 a 13

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

Le colonne da 14 a 26

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

Colonne 27 a 32

 0     0     1     0     0     1

valori z si presenta come segue:

colonne da 1 a 13

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

Le colonne da 14 a 26

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

Colonne 27 a 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'
È stato utile?

Soluzione

E 'difficile per me dire dal momento che non ho la casella degli strumenti di comunicazione installato, ma vorrei suggerire di provare questa con un ingresso più semplice, come indicato negli esempi nella documentazione. Usa

tx = randint(10,1,8) 

per esempio. Poi guardate l'uscita piuttosto che il confronto. Sono le differenze a, o vicino a precisione della macchina? Lei non ci dici quello che viene stampato (stanno sincronizzato o no?). Prova a prendere la differenza tra tx e z. E 'vicino a eps (2.2204e-016 per me)?

C'è uno spostamento tra i dati che entrano ed i dati in uscita? Facci sapere che cosa sta succedendo con i dati.

Aggiorna

Sono contento che hai postato che effettivo ingresso e uscita. Sembra che z è spostato uno a destra (e ha un 3 all'inizio per qualche motivo) il che significa che si perde l'ultimo bit. Guardando il Matlab documentazione , v'è una nota che dice

  

demodulatori OQPSK hanno un simbolo 1   Ritardo.

Credo che spiega il problema. In sostanza, solo un extra pad 0 alla fine del l'ingresso al modulatore, togliere il primo elemento dall'uscita del demodulatore, e siete a posto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top