poster
2019-12-10, 20:30
我正在尝试模拟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'
回答:
由于我没有安装通信工具箱,因此很难告诉我,但我建议您使用文档示例中给出的更简单的输入来尝试进行此操作。使用
tx = randint(10,1,8) 例如。然后查看输出,而不只是比较。是机器精度还是接近机器精度?您不告诉我们打印什么(它们是否匹配?)。尝试计算tx和z之间的差异。它接近eps(对我来说是2.2204e-016)?
数据输入和数据输出之间是否有转换?告诉我们数据发生了什么。
更新资料
我很高兴您发布了实际的输入和输出。看起来z右移了一个(由于某种原因开头是3),这意味着您丢失了最后一位。查看Matlab文档 (http://www.mathworks.com/access/helpdesk/help/toolbox/comm/ref/modem.oqpskdemod.html) ,其中有一条说明
OQPSK解调器具有1个符号延迟。
我认为这可以解释问题。基本上,只需在调制器输入的末尾填充一个额外的0,从解调器的输出中取出第一个元素,便可以开展业务。
更多&回答... (https://stackoverflow.com/questions/2292235)
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'
回答:
由于我没有安装通信工具箱,因此很难告诉我,但我建议您使用文档示例中给出的更简单的输入来尝试进行此操作。使用
tx = randint(10,1,8) 例如。然后查看输出,而不只是比较。是机器精度还是接近机器精度?您不告诉我们打印什么(它们是否匹配?)。尝试计算tx和z之间的差异。它接近eps(对我来说是2.2204e-016)?
数据输入和数据输出之间是否有转换?告诉我们数据发生了什么。
更新资料
我很高兴您发布了实际的输入和输出。看起来z右移了一个(由于某种原因开头是3),这意味着您丢失了最后一位。查看Matlab文档 (http://www.mathworks.com/access/helpdesk/help/toolbox/comm/ref/modem.oqpskdemod.html) ,其中有一条说明
OQPSK解调器具有1个符号延迟。
我认为这可以解释问题。基本上,只需在调制器输入的末尾填充一个额外的0,从解调器的输出中取出第一个元素,便可以开展业务。
更多&回答... (https://stackoverflow.com/questions/2292235)