FFT快速傅立叶变换-Matlab和c语言实现

毕业设计做的是基于SOPC的数字频谱分析仪,所以用了一下Matlab。其实数字信号处理学的很差。

FFT来历很复杂,但是他的结果很简单。但凡xxx变换,其实就是一堆数经过运算的到另外一堆数。

对于FFT,输入的数的个数和输出的数的个数相等,这就更妙了。

我们把采样到的数据放入一个虚数数组,数组下标是采样的时间点,计算完成后结果还是存储在这个数组中,

但是下标的含义变成了频率。

Matlab自带的fft函数功能很全很强大,但是这上一个自制的m程序:

function y=myfft(xr,n)

%信号长度为2的整数次方,基于时间抽选的FFT

p=0:n-1; %开始倒位序
nu=log2(n);
p1=p;
b=zeros(1,n);
for t=1:nu;
    p2=floor(p1/2);
    b=b*2+(p1-2*p2);
    p1=p2;
end;
yr(p+1)=xr(b+1);
xr=yr;   %倒位序结束
t=0:n/2-1; %计算因子w开始(只计算w0到w n/2-1)
for v=0:n/2-1;
    w=exp(-2*i*pi*t/n);
end; %计算因子w结束
for m=1:nu;% 计算x(k)开始
    h=2^(m-1);
    k=1;
    while(k<n+1)
        for t=1:h;
            y=bitshift(k-1,nu-m,nu)+1;%求w的幂次数
            xch(k)=xr(k)+w(y)*xr(k+h);
            k=k+1;
        end;
        for t=1:h;
            y=bitshift(k-1-h,nu-m,nu)+1;%求w的幂次数
            xch(k)=xr(k-h)-xr(k)*w(y);
            k=k+1;
        end;
    end;
    xr=xch;
end;%计算x

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值