Моя функция fft2 не работает со мной - PullRequest
0 голосов
/ 28 декабря 2011

Я столкнулся с проблемой при преобразовании этих двух операторов из встроенного в свою собственную функцию:

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 голосов
/ 29 декабря 2011

В вашем коде утверждение

X=size(im,1);

возвращает размер переменной im вдоль ее первого измерения. Это вернуло бы скалярное значение. Тем не менее, у вас есть for цикл:

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

, который перебирает значения x = 1 и x = 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...