请问FFT函数的返回值
假设需要对3个点计算FFT,一般都是补0得到四个点后计算FFT,这样返回值是4个数。例如:
fft(,4)
ans =
6.0000 -2.0000 - 2.0000i 2.0000 -2.0000 + 2.0000i
但是如果直接计算这3个点的FFT,则返回的就是3个数,例如:
fft()
ans =
6.0000 -1.5000 + 0.8660i -1.5000 - 0.8660i
如果直接按照DFT公式计算的话,3个数就应该返回3个值,补0后到2的整数倍后返回的是4个值,这与上面的例子是一致的。
可是FFT不都是将数补0达到2的整数倍后进行计算的吗?使用matlab中fft函数计算3个点的FFT为何返回的是3个值呢?
谢谢! 可是FFT不都是将数补0达到2的整数倍后进行计算的吗
自己 help fft 看看吧,有公式显示 谢谢。
看了一下,难道FFT就是按照DFT的公式计算的?而不是按照CurleyTrukey的基2或基4算法? 难道FFT就是按照DFT的公式计算的?
正是
而不是按照CurleyTrukey的基2或基4算法?
未听说过,完全不懂
--------------------------------
个人认为按照DFT计算是最正常的,毕竟在计算机上只能做离散的运算
-------------------------------- 在MATLAB中确如Aprilgogo所说,能计算任何点数的FFT。而在MATLAB中FFT的函数不是一个M文件,至于它的内部是用DFT还是其它的什么算法就不得而知。我感觉上能计算任何点数的FFT,很方便,同时在计算速度上也相当快,好象把非2^n数据个数加零补到2^n,和不补零时,在计算速度上感觉不到有很大的差别。 原帖由 eight 于 2007-3-2 17:04 发表
正是
未听说过,完全不懂
--------------------------------
个人认为按照DFT计算是最正常的,毕竟在计算机上只能做离散的运算
----------- ...
那个写错了,应该是Cooley和Tukey的FFT算法。也就是库利-图基算法了。 原帖由 songzy41 于 2007-3-3 07:06 发表
在MATLAB中确如Aprilgogo所说,能计算任何点数的FFT。而在MATLAB中FFT的函数不是一个M文件,至于它的内部是用DFT还是其它的什么算法就不得而知。我感觉上能计算任何点数的FFT,很方便,同时在计算速度上也相当快 ...
说得很对,就是不知道MATLAB怎么算的,既能计算任何点数的FFT,速度又能很快,有点厉害... matlab帮助的最后一段有算法介绍
下面这段是《数字信号处理:使用matlab》158页的介绍
fft(x, N)计算N点DFT,如果x长度不足N则补零
fft(x)计算x长度的DFT
这个函数是用机器语言写成的,不是matlab命令.m文件,执行速度非常快
如果N是2的某个幂,那么他就采用高速的基-2FFT算法
否则将N分解质因素,用较慢的混合基FFT算法
如果N是一个质数,那么只能使用原始的DFT算法
这样大家明白了吧 刚才看到一个chirp z变换
用czt(x)也可以计算DFT,特别是对于长度为质数的,有可能比FFT有效
页:
[1]