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个独立行向量?