Aprilgogo 发表于 2007-3-1 22:52

请问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个值呢?

谢谢!

eight 发表于 2007-3-1 22:56

可是FFT不都是将数补0达到2的整数倍后进行计算的吗

自己 help fft 看看吧,有公式显示

Aprilgogo 发表于 2007-3-2 16:47

谢谢。

看了一下,难道FFT就是按照DFT的公式计算的?而不是按照CurleyTrukey的基2或基4算法?

eight 发表于 2007-3-2 17:04

难道FFT就是按照DFT的公式计算的?

正是

而不是按照CurleyTrukey的基2或基4算法?

未听说过,完全不懂


--------------------------------
个人认为按照DFT计算是最正常的,毕竟在计算机上只能做离散的运算
--------------------------------

songzy41 发表于 2007-3-3 07:06

在MATLAB中确如Aprilgogo所说,能计算任何点数的FFT。而在MATLAB中FFT的函数不是一个M文件,至于它的内部是用DFT还是其它的什么算法就不得而知。我感觉上能计算任何点数的FFT,很方便,同时在计算速度上也相当快,好象把非2^n数据个数加零补到2^n,和不补零时,在计算速度上感觉不到有很大的差别。

Aprilgogo 发表于 2007-3-4 17:09

原帖由 eight 于 2007-3-2 17:04 发表


正是



未听说过,完全不懂


--------------------------------
个人认为按照DFT计算是最正常的,毕竟在计算机上只能做离散的运算
----------- ...

那个写错了,应该是Cooley和Tukey的FFT算法。也就是库利-图基算法了。

Aprilgogo 发表于 2007-3-4 17:10

原帖由 songzy41 于 2007-3-3 07:06 发表
在MATLAB中确如Aprilgogo所说,能计算任何点数的FFT。而在MATLAB中FFT的函数不是一个M文件,至于它的内部是用DFT还是其它的什么算法就不得而知。我感觉上能计算任何点数的FFT,很方便,同时在计算速度上也相当快 ...

说得很对,就是不知道MATLAB怎么算的,既能计算任何点数的FFT,速度又能很快,有点厉害...

minidick 发表于 2007-3-9 09:48

matlab帮助的最后一段有算法介绍

下面这段是《数字信号处理:使用matlab》158页的介绍
fft(x, N)计算N点DFT,如果x长度不足N则补零
fft(x)计算x长度的DFT
这个函数是用机器语言写成的,不是matlab命令.m文件,执行速度非常快
如果N是2的某个幂,那么他就采用高速的基-2FFT算法
否则将N分解质因素,用较慢的混合基FFT算法
如果N是一个质数,那么只能使用原始的DFT算法

这样大家明白了吧

minidick 发表于 2007-3-9 15:15

刚才看到一个chirp z变换
用czt(x)也可以计算DFT,特别是对于长度为质数的,有可能比FFT有效
页: [1]
查看完整版本: 请问FFT函数的返回值