我正在Matlab中开发自己的FFT函数,稍后将其转换为C并编码到DSP嵌入式系统中。我将我的输出与Matlab FFT函数进行比较,以检查结果是否相同。我当前的算法会产生两个额外的峰值,我不确定其原因。任何人都可以解释额外峰值的原因以及删除它们的可能解决方案。
我试图使用这些方程式:
旋转因素:
FFT公式:
我的代码:
clear all; close all; clc;
N = 128;
nk(1:N,1:N) = 0;
W_N(1:N,1:N) = 0;
for n = 1:1:N
for k = 1:1:N
nk(n,k) = (n-1)*(k-1);
W_M(n,k) = exp((-1i*2*pi*(nk(n,k)))/(N/2));
W_N(n,k) = exp((-1i*2*pi*(nk(n,k)))/N);
end
end
n = 1:1:N+1;
x = sin(n);
X(1,1:N+1) = 0;
for k = 1:1:N
for m = 1:1:(N/2)
X(k) = X(k) + (x(2*m) + x(2*m+1)*W_N(1,k))*W_M(m,k);
end
Y = abs(X);
end
Test = fft(x);
Abs_Test = abs(Test);
输出:
提前致谢