我的fft2功能不适用于我

时间:2011-12-28 19:45:28

标签: matlab

当我将这两个语句从build中转换为我自己的函数时,我遇到了一个问题:

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

它给了我[尝试访问X(2);因为数字(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];

有谁能告诉我为什么会出现这个错误?

1 个答案:

答案 0 :(得分:0)

在您的代码中,语句

X=size(im,1);

返回变量im沿其第一维的大小。这将返回标量值。但是,您有一个for循环:

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

迭代值x = 1x = 2。当您X(x)时尝试评估x = 2时,会收到错误,因为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