-2

我正在编写代码来检查 Bipolar-RZ。如果你得到一个 0,没有任何事情发生,但是如果有 1,那么中间发生从正电压到 0 的转换,然后从负电压到 0 电压。所以我接近这个的方式是,例如,如果你有b=[0 1 0 1 1 0 1]. 你计算你有多少。然后将这些放在 for 循环中并添加它们。然后使用 if 语句检查相加后的个数是偶数还是奇数,然后转换。问题是我正在使用另一个 for 循环,而 for 循环(检查偶数和奇数)进入另一个 for 循环。

另外要使用iseven和isodd,我在网上搜索。他们在 MATLAB 中有代码。否则该功能不起作用。这是链接: http: //www.mathworks.com/matlabcentral/fileexchange/35105-isevenisodd

如果有人回复,我会非常满意。谢谢你

% for ibs, I'm using ibs=[0 1 0 0 1 1 0 0 0 1 1]

function output = lc_bi(ibs,tlc, Rb)

output=1;
numofbits=length(ibs);


%  Bipolar RZ coding

if isequal(tlc,'RZ')

    %for loop to calculate 1's
    y=0;
    for k=1:length(ibs)
        if ibs(k)==1
            y=y+1;
        end
    end

    oness=ones(1,y); %converting it in to list of ones


    samptime= 0.001;
    endtime= numofbits-samptime;
    t=0:samptime:endtime; 

    cycle= floor(length(t)/(numofbits-1));
    j=1;

    tran_in_middle= j+cycle/2;

    bit=1;
    for i=0:samptime:endtime
        if (floor(i)+1 ~=bit)
            tran_in_middle=j+cycle/2;
            bit=bit+1;
        end

        if (ibs(bit)==1)
            if(j< tran_in_middle)

                %put the loop her to check if itseven or odd
                %using the list of ones here and adding them to check for even and odd
                g=0;
                for h=1:length(oness)
                    g=g+1;
                    if isodd(g)==true
                        s(j) =Rb;
                        disp('+')
                    elseif isodd(g)==false

                        s(j)=-Rb;
                        disp('-')
                    end
                end
            else
                s(j) = 0;
            end

        end
        j=j+1;
    end

    plot(t,s);
    axis([0 numofbits -(Rb+1) (Rb+1)]);
    xlabel ('Time');
    ylabel ('Voltage');

end
4

1 回答 1

0

扩展评论而不是回答......

我不了解您的代码或您的问题,但从您向我们展示的内容来看,我担心您根本没有“获得”Matlab。例如代码

%for loop to calculate 1's
y=0;
for k=1:length(ibs)
    if ibs(k)==1
        y=y+1;
    end
end

似乎是一种费力的计算方式

y = sum(ibs)

尽管我不确定,但我怀疑代码中的其他循环可以以类似的方式替换,并且您应该更深入地研究一些基本文档。虽然诸如 C 之类的语言要求程序员编写循环来迭代向量和数组,但 Matlab 提供了广泛的数组函数集合。sum只是一个基本的例子。

语句如

if isodd(g)==true

我也很担心。在 Matlab 和我曾经使用过的任何其他编程语言中,这是一种冗长的写作方式

if isodd(g)

我不太担心您可能会编写冗长的代码,但是您的原始构造会引起怀疑,根据我对初级和未受过专业培训的程序员的经验的支持,您并没有完全“获得”布尔值。

if然后,您将语句的另一个分支编写为

elseif isodd(g)==false

由于您设置g为整数值,因此根本不需要 a elseif,唯一的可能性,如果g不是奇数是g偶数,因此您可以用更简洁和更清晰的语句替换该语句

else

我认为你应该完全重写你的代码并用 Matlab 编写;到目前为止,您所拥有的可能是Matlab编写的 C。

于 2013-10-16T07:24:30.190 回答