2010-02-18 39 views
0

我试图模拟IEEE 802.15.4/ZigBee的PHY,...modem.oqpskmod - > modem.oqpskdemod不相同的结果

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的

值来如下:

列14到26

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

列27至32

0  0  1  0  0  1 

列1至13

0  1  1  0  0  0  0  0  0  1  1  1  0 
z com ES如下:

列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' 
+0

您的输入和输出是逻辑类型吗?如果他们是浮点数,你可能会遇到比较错误。 – gnovice 2010-02-19 03:56:40

+0

我不想通过强制将它们转换,我想了解它为什么会按照它现在的方式执行它:)提前致谢! – 2010-02-24 07:35:46

回答

0

这对我来说很难,因为我不知道没有安装通讯工具箱,但我建议使用示例中给出的更简单的输入来尝试在文档中的mples。使用

tx = randint(10,1,8) 

例如。然后看看输出,而不仅仅是比较。机器精度还是差不多?你不告诉我们打印什么(他们是否匹配?)。尝试考虑tx和z之间的差异。它接近eps(对我来说是2.2204e-016)?

数据传入和数据传出之间是否存在切换?告诉我们这些数据是怎么回事。

更新

我很高兴你张贴实际的输入和输出。它看起来像z向右移动(并且由于某种原因在开始处有3),这意味着你失去了最后一位。纵观Matlab documentation,还有一张纸条,上面写着

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

我认为这可以解释这个问题。基本上,在调制器的输入端添加一个额外的0,从解调器的输出中取出第一个元素,然后开始工作。

+0

对于迟到的回复感到遗憾,我已经提供了更多信息......提前致谢! – 2010-02-24 07:24:05