Pergunta

Estou tentando simular o 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;

Minha pergunta está neste caso simples, por que meu TX e Z não contêm os mesmos valores, embora eu ainda não introduza nenhum ruído? obrigado!

Os valores de TX são os seguintes:

Colunas 1 a 13

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

Colunas 14 a 26

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

Colunas 27 a 32

 0     0     1     0     0     1

Os valores do z vem o seguinte:

Colunas 1 a 13

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

Colunas 14 a 26

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

Colunas 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'
Foi útil?

Solução

É difícil para mim dizer, já que não tenho a caixa de ferramentas de comunicação instalada, mas sugiro tentar isso com uma entrada mais simples, conforme fornecido nos exemplos da documentação. Usar

tx = randint(10,1,8) 

por exemplo. Em seguida, observe a saída em vez de apenas comparar. As diferenças são de precisão da máquina ou perto? Você não nos diz o que é impresso (eles estão correspondendo ou não?). Tente tomar a diferença entre TX e Z. É perto do EPS (2.2204E-016 para mim)?

Existe uma mudança entre os dados que estão sendo lançados e os dados que estão sendo lançados? Diga -nos o que está acontecendo com os dados.

Atualizar

Fico feliz que você postou essa entrada e saída reais. Parece que Z é deslocado para a direita (e tem um 3 no início por algum motivo), o que significa que você perde o último bit. Olhando para o Documentação do MATLAB, há uma nota que diz

Os desmoduladores OQPSK têm um atraso de 1 símbolo.

Eu acho que isso explica o problema. Basicamente, basta ter um 0 extra no final da entrada do modulador, retire o primeiro elemento da saída do desmodulador e você está no negócio.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top