[英]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.