繁体   English   中英

输出问题我的 FFT Radix2 DIT 算法 matlab

[英]Problem with the output my FFT Radix2 DIT alghoritm matlab

我正在尝试使用迭代 Radix2 算法实现我自己的 FFT(我什至考虑过使用递归算法,但 Simulink 似乎不允许我这样做)。 我尝试了所有可能的变体,如 DIT 和 DIF,但我总是遇到同样的问题:输出对我来说没有多大意义,它似乎仍然与时间相关。

在实际应用中需要这种算法,接收信号的缓冲区被加窗和重叠。 然后将窗口函数平均并发送到下一个块以获得 Welch 光谱估计。

这是我的(其中一个)DIT 版本的代码:

function [FFT,Wk,k] = radix2(u,k_old,lap) %lap = 512 = 1024/2 with 1024 Window size

N = length(u);
P = log2(N);
FFT = zeros(N,1)+0*1j;
omega = 0j;

% Hann Fenster
n1 = (k_old)*lap:(N+k_old*lap-1);
w1 = sin(pi.*n1/(N-1)).^2;
z1 = u.*w1';
z1=z1';

% Average
Wk = 0;
for i=1:N
    Wk = Wk + w1(i)^2;
end

%% Algho
A = z1(bitrevorder(1:N));
for s=1:log2(N)
    m=2^s;
    Wm = exp(2*pi*1j/m)
    W = 1 +0j;
    for j= 1:m/2
        for k=j:m:(N)
            odd = W*A(k+m/2)
            even = A(k);
            FFT(k)=odd + even;
            FFT(k+m/2) =even-odd;
        end
        W = W*Wm;
    end
end 

这是输出

幅频图

而不是有两个/三个不同的尖峰(输入是正弦信号)。

我真的希望任何人都可以提供帮助,从现在开始我非常迷茫。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM