【问题标题】:modem.oqpskmod -> modem.oqpskdemod not same resultmodem.oqpskmod -> modem.oqpskdemod 结果不一样
【发布时间】:2010-02-18 21:13:55
【问题描述】:

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

【问题讨论】:

  • 您的输入和输出是logical 类型吗?如果它们是浮点数,您可能会遇到比较错误。
  • 我不想通过强制来转换它们,我想了解为什么它会按照目前的方式进行转换:) 在此先感谢!

标签: signals matlab-deployment matlab matlab-compiler


【解决方案1】:

由于我没有安装通信工具箱,我很难说,但我建议尝试使用文档中示例中给出的更简单的输入。使用

tx = randint(10,1,8) 

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

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

更新

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

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

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

【讨论】:

  • 抱歉回复晚了,我已经提供了更多信息...提前谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-11-24
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多