MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   modem.oqpskmod-将不同值的数组转换为1和0的数组 (https://www.labfans.com/bbs/showthread.php?t=23096)

poster 2019-12-10 20:30

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的正确比较?



[B]回答:[/B]

这取决于您要如何比较输入和输出。 [URL="https://stackoverflow.com/questions/2179737/modem-oqpskmod-for-ber/2180055#2180055"]我为您提供的[/URL]用于计算BER [URL="https://stackoverflow.com/questions/2179737/modem-oqpskmod-for-ber/2180055#2180055"]的代码[/URL]会将输入和输出之间的[I]任何[/I]差异都视为错误。因此,输出的3值和输入的1值被视为[I]不同[/I] 。

如果您想以其他方式计算BER,则可以使用以下两个选项。这些每个假设values仅包含零和一:
[LIST][*] [B]将任何非零输出值都计为1:[/B]在这种情况下,可以使用[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/logical.html"]LOGICAL[/URL]函数将z [I]任何[/I]非零值(即值3、0.5,-1等)转换为1,而将[I]完全[/I]为零的值保持不变:

BER = sum(values(:)-logical(z(:)))/numel(values);[*] [B]将正值计数为1,将负值计数为0:[/B]此解决方案仅使用比较运算符代替[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/ref/logical.html"]LOGICAL[/URL] :

BER = sum(values(:)-(z(:) > 0))/numel(values);[/LIST]您可能还想尝试将[URL="http://www.mathworks.com/access/helpdesk/help/toolbox/comm/ref/modem.oqpskdemod.html"]modem.oqpskdemod[/URL]对象的'OutputType'属性设置为'bit'以确保二进制输出。然后,您不必对z做任何事情:

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

[url=https://stackoverflow.com/questions/2185382]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 04:56

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.