声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1695|回复: 5

[FFT] 自己写的FFT总是得不出正确结果。

[复制链接]
发表于 2007-9-11 15:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
function Y=fft(x)
n=size(x);
for l=0:12,
    if 2^l>=n
        N=2^l;
        L=l;
        break
    end
end
for t=n(2)+1:N,  %不足2^L的数在末尾补0
    x(t)=0;
end
x                %x为补0后的序列
nv2=N/2;         %倒位序
nm1=N-1;
I=0;
J=0;
while I<nm1
    if I<J
        t   =x(J+1);
        x(J+1)=x(I+1);
        x(I+1)=t;
    end
    K=nv2;
   while K<=J
        J=J-K;
        K=K/2;
    end
    J=J+K;
    I=I+1;
end
X=x              
M=1;
while M<=L
    LE=2^M;
    LE1=LE/2;
    U=1;
    W=exp(-j*pi/LE1);
    J=0;
    while J<=LE1-1
        I=J;
        while I<=N-1
            IP=I+LE1;
            T=x(IP+1)*U;
            x(IP+1)=x(I+1)-T;
            x(I+1)=x(I+1)+T;
            I=I+LE;
        end
        U=U*W;
        J=J+1;
    end
    M=M+1;
end
Y=x;
回复
分享到:

使用道具 举报

发表于 2007-9-11 16:00 | 显示全部楼层
本帖最后由 wdhd 于 2016-9-8 14:18 编辑
原帖由 tianyoume 于 2007-9-11 15:52 发表
function Y=fft(x)
n=size(x);
for l=0:12,
    if 2^l>=n
        N=2^l;
        L=l;
        break
    end
end
for t=n(2)+1:N,  %不足2^L的数在末尾补0
    x(t)=0;
end
x                %x ...

用 matlab 自带的 fft 函数不行吗?
发表于 2007-9-11 16:03 | 显示全部楼层

回复 #2 eight 的帖子

现在好像流行自己写。
 楼主| 发表于 2007-9-11 16:03 | 显示全部楼层
要提取循环平稳频率,需要自己写FFT
 楼主| 发表于 2007-9-13 10:23 | 显示全部楼层
上面那段代码是转自别人的,但我试了一下好象与MATLAB带的FFT有出入,不知道源创者是否注意到了。
发表于 2007-11-30 17:12 | 显示全部楼层
%***************具体的FFT的蝶形运算*************************************
for L=1:M                  
    B=2^(L-1);
    for J=0:B-1
        P=J*2^(M-L);
        for k=J:2^L:N-1
            xn(k+1)=xn(k+1)+xn(k+1+B)*(exp((-1)*i*2*pi/N*P)); % DIT:先复乘后加减
            xn(k+1+B)=xn(k+1)-xn(k+1+B)*(exp((-1)*i*2*pi/N*P));
        end
    end
end
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-17 10:49 , Processed in 0.060142 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表