FFT的MATLAB实现

很荣幸能够加入到CSDN的大家庭,在之前做项目中在CSDN中学习到了很多,之后自己也要去试着把自己做的项目心得或代码放在这里作为记录,如果能帮助到大家就更好啦!
在学习了数字信号处理的课程后,想自己试着编一编FFT的程序。

代码实现及注释

function y = testfft(x)
%FFT算法
%自己按照FFT定义编写,输入行向量x
m = nextpow2(length(x));%求x长度对应的2的最低次幂
N = 2^m;
if(length(x) < N)
x = [x,zeros(1,length(x))];%FFT算法补零
end
change = bin2dec(fliplr(dec2bin([1:N]-1,m))) + 1;%求1:2^m数列的倒序
y = x(change);
for s = 1:m %m次基2分解,对每次分解做DFT运算
Nr = 2^s; %每个蝶形中的行号差
u = 1; %旋转因子,初始为WN^0等于1
WN = exp(-(1i)2pi/Nr);%分解的基本DFT因子
for j = 1:Nr/2
for k = j:Nr:N
kp = k + Nr/2;
g = y(kp) * u;
y(kp) = y(k) - g;
y(k) = y(k) + g;
end
u = u * WN;
end
end
end

比较

在matlab中测试原有fft()函数和自己编写的testfft()函数对相同向量的运行时间,可以看出,原有的用机器语言编写的FFT程序运行速度快。
k = 1:2^10;
x = 0.998.^k;
tic,X = fft(x);toc
tic,X = testfft(x);toc
1024点向量运行时间比较

应用

在matlab中,有已经完成的FFT函数,并且运算速度最快,但是可以把程序改为C/C++语言,可能会在以后的项目中用到。

  • 6
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值