2013-10-16 164 views
-2

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

这里有很多代码,但没有指出问题出在哪里。破解你想要做的事情也很困难。也许你可以为你的示例输入提供一个示例输出? – Dan

回答

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为整数值是没有必要的elseif可言,唯一的可能性,如果g不奇怪的是g是偶数,这样你就可以用简短的替换声明和清晰

else 

我想你应该完全重写代码,并将其写入in Matlab;你到目前为止可能会用C写成 Matlab。

+0

我认为你所提到的循环是'y = sum(ibs == 1)'而不仅仅是sum(如果'ibs'不是布尔值)。 – Oleg

+0

通过OP的定义'ibs'只包含'0'和'1',所以对于相等性的测试是不必要的,它是否使得代码更容易理解是一个有争议的问题。我不认为它确实如此。 –

相关问题