为什么我的FFT功能会产生额外的峰值?

时间:2018-03-12 17:17:24

标签: matlab signal-processing fft

我正在Matlab中开发自己的FFT函数,稍后将其转换为C并编码到DSP嵌入式系统中。我将我的输出与Matlab FFT函数进行比较,以检查结果是否相同。我当前的算法会产生两个额外的峰值,我不确定其原因。任何人都可以解释额外峰值的原因以及删除它们的可能解决方案。

我试图使用这些方程式:

旋转因素: Twiddle Factors

FFT公式: FFT Equation

我的代码:

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);

输出:

Frequency Spectrums Produced

提前致谢

0 个答案:

没有答案