2011-12-28 56 views
0

我面臨的一個問題,當我轉換這兩個語句從建立到我自己的函數:我FFT2功能不和我一起工作

gaus=gauss/sum(gauss(:)); 
BeforeAbs=fft2(gaus,size(im,1),size(im,2)); 

它給了我[試圖訪問X(2);索引越界,因爲numel(X)= 1]

%--------Start convert from build in to my own function of Fourier transformation of 1 D 
      gaus=gauss/sum(gauss(:)); 

      for u=1:(gaus) 
      summ=0; 
      for x=1:1 
      w2=(-1*(sqrt(-1)))*2*pi*((u*x)/(gaus+1)) 
      summ=summ+(gaus(x)*exp(w2)); 
      end 
      PQ2(u)=summ; 
      end% 


     X=size(im,1); 
     for u=1:(X) 
      summ=0; 
      for x=1:1 
       w3=(-1*(sqrt(-1)))*2*pi*((u*x)/(X+1)) 
       summ=summ+(X(x)*exp(w3)); 
      end 
      PQ3(u)=summ; 
     end 


    BeforeAbs=[PQ2 PQ3]; 

有誰能告訴我爲什麼這個錯誤與我一起出現嗎?

+0

請將其降低到導致問題的最低**代碼。 – 2011-12-28 19:48:50

+0

好的,查看更新後的版本,並感謝 – 2011-12-28 19:53:48

+0

目前還不清楚第一個代碼段與第二個代碼段的相關程度如何? – 2011-12-28 19:54:51

回答

0

在你的代碼中,語句

X=size(im,1); 

返回變量im沿其第一維大小。這將返回一個標量值。但是,你有一個for循環:

for x=1:2 
    ... 
    summ=summ+(X(x)*exp(w3)); 
end 

是迭代值x = 1x = 2。當您嘗試在x = 2時評估X(x)時,您會看到錯誤,因爲X只有一個元素。

基本上,你正在做的事情等價於:

X = 5 
X(2) 

此外,您的for循環的u

for u=0:(X-1) 

開始從u = 0,但後來嘗試設置

PQ3(u)=summ; 

但是,MATLAB中的數組索引是1的,所以PQ3(0)會導致錯誤。您應該從1開始編制索引:PQ3(1) = summ

+0

好的,我能做些什麼解決它?我試圖讓循環統計並結束1,並給我同樣的問題 – 2011-12-28 20:43:58

+0

看到我上面的附加答案。 – Kavka 2011-12-28 20:52:25

+0

也開始你1也給了我試圖訪問X(2);索引超出範圍,因爲numel(X)= 1。 – 2011-12-28 21:18:40