modem.oqpskmod -> modem.oqpskdemod non stesso risultato
-
21-09-2019 - |
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'
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.