2013-10-16 158 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',所以對於相等性的測試是不必要的,它是否使得代碼更容易理解是一個有爭議的問題。我不認爲它確實如此。 –

相關問題