0

我正在尝试模拟 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'
4

1 回答 1

0

因为我没有安装通信工具箱,所以我很难说,但我建议使用文档中示例中给出的更简单的输入来尝试这个。采用

tx = randint(10,1,8) 

例如。然后查看输出,而不仅仅是比较。差异是否达到或接近机器精度?您没有告诉我们打印出来的内容(它们是否匹配?)。尝试获取 tx 和 z 之间的差异。它靠近 eps(对我来说是 2.2204e-016)吗?

输入的数据和输出的数据之间是否存在转换?告诉我们数据发生了什么。

更新

我很高兴您发布了实际的输入和输出。看起来 z 向右移动了一个(并且由于某种原因在开头有一个 3),这意味着你丢失了最后一位。查看Matlab 文档,有一条说明说

OQPSK 解调器有 1 个符号延迟。

我认为这可以解释问题。基本上,只需在调制器的输入末尾填充一个额外的 0,从解调器的输出中取出第一个元素,就可以了。

于 2010-02-19T03:38:00.307 回答