2017-12-03 241 views
0

我正在嘗試創建一個信號,然後通過對我首先創建的CT信號進行採樣來構建一個離散時間信號。直到最後一個for循環,事情運行良好,但我需要採用T分隔N個樣本。沒有if語句,我得到一個索引越界錯誤,我不得不在信號持續時間內限制採樣。出於某種原因,我的代碼一次只進入if語句,而對於調試,我打印出if和if之外的值。儘管邏輯操作在多次迭代中應該是正確的(打印語句將顯示值),但它不會在if語句內打印語句。這裏有什麼問題?在MATLAB中for循環中嵌套if語句是否有任何特殊規則?

function x = myA2D(b,w,p,T,N) 
    %MYA2D description: Takes in parameters to construct the CT-sampled DT signal 
    %b,w,p are Mx1 vectors and it returns Nx1 vector. 

    timeSpace = 0:0.001:3*pi; 

    xConstT = zeros(size(timeSpace)); 

    %Construct Xc(t) signal 
    for k = 1:size(b,1) 

     temp = b(k) .* cos(w(k).*timeSpace + p(k)); 
     xConstT = xConstT + temp; 
    end 

    plot(xConstT); 

    %Sampling CT-Signal to build DT-signal 

    disp(strcat('xConstT size',int2str(size(xConstT))));**strong text** 
    x = zeros(N,1); 

    sizeConstT = size(xConstT); 

    for i = 0:N-1 

     index = i .* T .* 1000 + 1; 
     disp(strcat('indexoo=',int2str(index))); 
     disp(strcat('xConstSizeeee',int2str(sizeConstT))); 

     if index <= sizeConstT 
      disp(strcat('idx=',int2str(index))); 
      disp(strcat('xSize',int2str(sizeConstT))); 
      %x(i+1,1) = xConstT(index); 
     end 
    end 
    end 

回答

0

sizeConstT = size(xConstT);所以你比較浮點數到一個數組中創建一個1x2的陣列,和你的代碼進入,如果循環只在比較到陣列中的每個元素是成功的。這個例子說明這個問題:

if 1 <= [1 12]; disp('one'); end % <- prints 'one' 
if 2 <= [1 12]; disp('two'); end % <- prints nothing 

你的代碼將與sizeConstT = length(xConstT);

工作