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

本文介绍了如何使用Matlab和C语言实现快速傅立叶变换(FFT)。通过Matlab自定义函数myfft,详细展示了FFT的计算过程,并通过实例演示了信号的幅度谱显示。同时,提供了C语言版本的FFT实现,讨论了频谱泄露问题及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

毕业设计做的是基于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的幂次数
           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值