查看单个帖子
旧 2019-12-10, 20:30   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 modem.oqpskmod-将不同值的数组转换为1和0的数组

嗨,我在matlab中进行以下操作

values = [0;1;0;0;1;0;1;0]; % can contain only 0s and 1s h = modem.oqpskmod; y = modulate(h, values); g = modem.oqpskdemod(h); z = demodulate(g,y); BER = sum(logical(values(:)-z(:)))/numel(values); % thanks to gnovice! 在计算BER之前,您是否认为我必须仅将数组z转换为1s和0s的数组...例如,我的z可能由3s和0s组成,那么我是否必须将所有大于0的数字转换为1和所有0不变。这样一来,我最终获得了BER的正确比较?



回答:

这取决于您要如何比较输入和输出。 我为您提供的用于计算BER 的代码会将输入和输出之间的任何差异都视为错误。因此,输出的3值和输入的1值被视为不同

如果您想以其他方式计算BER,则可以使用以下两个选项。这些每个假设values仅包含零和一:
  • 将任何非零输出值都计为1:在这种情况下,可以使用LOGICAL函数将z 任何非零值(即值3、0.5,-1等)转换为1,而将完全为零的值保持不变:

    BER = sum(values(:)-logical(z(:)))/numel(values);
  • 将正值计数为1,将负值计数为0:此解决方案仅使用比较运算符代替LOGICAL

    BER = sum(values(:)-(z(:) > 0))/numel(values);
您可能还想尝试将modem.oqpskdemod对象的'OutputType'属性设置为'bit'以确保二进制输出。然后,您不必对z做任何事情:

... g = modem.oqpskdemod(h,'OutputType','bit'); z = demodulate(g,y); BER = sum(values(:)-z(:))/numel(values);

更多&回答...
poster 当前离线   回复时引用此帖