TJ球 发表于 2008-7-31 10:42

非完整周期采样

我在网路上找了几个计算fft的源码,
但只能计算2的次方,
但如果我要整个周期的采样的话,
我很难让它的资料刚好是2的n次方,
我该如何解决这样的情况?
谢谢

[ 本帖最后由 TJ球 于 2008-7-31 11:15 编辑 ]

songzy41 发表于 2008-7-31 15:13

对数据加窗后再补0值,使数据长度为2的n次方。
补充:
如果想在谱分析中能利用整周期采样的特点,以上的方法就不是太好;若要能利用上整周期采样的特点,只能在整周期采样后,把数据进行调整采样频率(例如利用MATLAB中的resample函数),使采样点数正好为2的n次方。

[ 本帖最后由 songzy41 于 2008-7-31 15:32 编辑 ]

TJ球 发表于 2008-7-31 16:54

补0方法我试过,
但跑出的频谱感觉不太对劲,
觉得可能会导致计算SNDR及THD造成错误,

TJ球 发表于 2008-7-31 17:30

回复 2楼 的帖子

您说的resample函?我会研究看看。
但若我不用更改采样频率的方式,
我是否能够以修改计算FFT源码的方式让程式可以计算非2的N次方资料呢?
因为我知道理论上FFT只能算2的N次方,但是否能够改呢?

songzy41 发表于 2008-7-31 18:25

本帖最后由 wdhd 于 2016-9-12 14:02 编辑

原帖由 TJ球 于 2008-7-31 17:30 发表
您说的resample函?我会研究看看。
但若我不用更改采样频率的方式,
我是否能够以修改计算FFT源码的方式让程式可以计算非2的N次方资料呢?
因为我知道理论上FFT只能算2的N次方,但是否能够改呢?
现在理论上对FFT已不限于2的N次方,已有许多质数分解的方法来完成FFT的运算。在MATLAB中FFT函数实际上是完全不受2的N次方的限制。如果不是MATLAB语言,而是其它的语言,要编制这种质数分解的FFT程序,工作量可能较大。相关的资料已记不清楚了,好象在IEEE ASSP或SP中有(时间都较早)。

songzy41 发表于 2008-7-31 20:10

我找到一篇文章:
Extension of a radix-2 fast Fourier transform (FFT) program to include a prime factor
IEEE ASSP 1975 22(5) page 388
其中有FORTRAN序。

TJ球 发表于 2008-8-1 15:44

回复 6楼 的帖子

您提的资料我找到了,
不过都是原文我需要花点时间好好研读一番,非常感谢!!
另外我也上网找了一些资料,
如同songzy41所说的fft运算并没有局限2的羃次方,
是我搞错了,
资料其中提到MATLAB的FFT执行:
1.对任意的2的幂数的n,FFT使用高速radix-2算法.执行时间最快.
2.对任意非的2的幂数的n,FFT使用主因子算法.
3.对任意的质数的n,FFT不使用FFT算法,而直接执行DFT算法.

也找到了一个网站,其中一个叫”青杉”的网友,介绍了傅立叶转换观念及写了许多vc++的源码,相当不错,其中也找到了我要的程式,也分享给各位。
http://www.programmer-club.com/pc2020v5/forum/ShowSameTitleN.asp?URL=N&board_pc2020=general&id=3041
页: [1]
查看完整版本: 非完整周期采样