![]() |
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.