Matlab 实现自己的快速傅里叶变换算法不起作用

Matlab 实现自己的快速傅里叶变换算法不起作用,matlab,fft,Matlab,Fft,我发现并定制了快速傅里叶变换的算法。算法如下: function X = myFFT(x) %only works if N = 2^k N = numel(x); xp = x(1:2:end); xpp = x(2:2:end); if N>=8 Xp = myFFT(xp); Xpp = myFFT(xpp); X = zeros(N,1); Wn = exp(-1i*2*pi.*((0:N/2-1)')/

我发现并定制了快速傅里叶变换的算法。算法如下:

function X = myFFT(x)
   %only works if N = 2^k
   N = numel(x);
   xp = x(1:2:end);
   xpp = x(2:2:end);
   if N>=8
      Xp = myFFT(xp);
      Xpp = myFFT(xpp);
      X = zeros(N,1);
      Wn = exp(-1i*2*pi.*((0:N/2-1)')/N);
      tmp = Wn .* Xpp;
      X = [(Xp + tmp);(Xp -tmp)];
   else
     switch N
       case 2
          X = [1 1;1 -1]*x;
       case 4
          X = [1 0 1 0; 0 1 0 -1i; 1 0 -1 0;0 1 0 1i]*[1 0 1 0;1 0 -1 0;0 1 0 1;0 1 0 -1]*x;
       otherwise
          error('N not correct.');
     end
   end
end
上述算法存储在名为myFFT的.m文件中

我想将代码用于两个后续信号: h1=sin(t2),时间t2=0:1:255

我以这种方式回忆另一个.m文件中的myFFT函数:

x=h1;
X11 = myFFT(x);
但它给了我一个错误:

Error using  * 
Inner matrix dimensions must agree.

Error in myFFT (line 18)
           X = [1 0 1 0; 0 1 0 -1i; 1 0 -1 0;0 1 0 1i]*[1 0 1 0;1 0 -1 0;0 1 0 1;0 1 0 -1]*x;

Error in myFFT (line 7)
    Xp = myFFT(xp);

Error in myFFT (line 7)
    Xp = myFFT(xp);

Error in myFFT (line 7)
    Xp = myFFT(xp);

Error in myFFT (line 7)
    Xp = myFFT(xp);

Error in myFFT (line 7)
    Xp = myFFT(xp);

Error in myFFT (line 7)
    Xp = myFFT(xp);
老实说,我不知道如何修复它。你能帮帮我吗?
提前非常感谢

问题是将4x4矩阵乘以1x4矩阵。变量
x
需要进行转置

   function X = myFFT(x)
       %only works if N = 2^k
       N = numel(x);
       xp = x(1:2:end);
       xpp = x(2:2:end);
       if N>=8
          Xp = myFFT(xp);
          Xpp = myFFT(xpp);
          X = zeros(N,1);
          Wn = exp(-1i*2*pi.*((0:N/2-1)')/N);
          tmp = Wn .* Xpp;
          X = [(Xp + tmp);(Xp -tmp)];
       else
         switch N
           case 2
              X = [1 1;1 -1]*x';
           case 4
              X = [1 0 1 0; 0 1 0 -1i; 1 0 -1 0;0 1 0 1i]*[1 0 1 0;1 0 -1 0;0 1 0 1;0 1 0 -1]*x';
           otherwise
              error('N not correct.');
         end
       end
    end
然后测试它与

t2 = 0:1:255;
myFFT(sin(t2));

它给了我同样的错误,是的,x是N=4的1x4矩阵记得在x变量上加上',转置运算符!你把一个4x4乘以一个1x4,这就是它失败的原因。我这么做了,但它仍然给了我同样的错误。你可以自己测试,它会给你同样的错误。
是ctranspose操作符,transpose操作符是
@弗兰塔姆拉兹,你读过法比昂德里文的答案吗?如果您不更改代码,那么得到相同的错误并不奇怪。您仍然没有转置x数组。请尝试使用
X11=myFFT(x(:),将
x
展平到列vector@Brice:扁平化应该发生在
myFFT
函数内部。@chrisluengo:也许吧。但是,应该有一个关于函数应该做什么的明确说明(输入什么样的数据;输出什么样的数据)。作为输入的行向量是否会触发错误,是否应按照您的建议正常处理,或视为大小为1的N个独立行向量?