chenamo5776 发表于 2006-12-22 11:41

FFT 的问题

我在网上下载了一个FFT.dll,然后用delphi调用这个FFT的动态链接库,然后划出图形,结果,我发现很多参数不知道怎么得到!
程序返回的结果是幅值,幅角,实部,虚部,画图的时候,要求是基于频率的一个幅值普和相位普!
我想搞清楚的问题是:
1、频率(画图时候的X轴)怎么确定?是不是可以通过幅值,幅角,实部,虚部可以确定频率!(当然信号的采样频率是已知的)
2、返回的幅角是不是就是相位,如果是,我发现不对,和90度180度相差很大,都是-2到2的数值!
请教各位高手!谢谢!

chenamo5776 发表于 2006-12-22 11:55

补充

比如我的信号采用频率是100HZ,采样点1024点,如何确定频率(画幅值普和相位普时候的X轴)?

songzy41 发表于 2006-12-22 14:45

频率fs=100HZ,采样点N=1024,用N点进行FFT后,最高的谱频率是fs/2=50,从0~50共有513根谱线,每根谱线对应的频率是F(k)=k*df=k*fs/N; k=0~512。

chenamo5776 发表于 2006-12-25 15:56

相位的问题

谢谢songzy41!频率的问题解决了!
相位确定有问题~
我得到的相位的值都在-1到1左右,与实际结果不相符合~
我用的方法是:arctan(虚部/实部)

hailing 发表于 2006-12-25 20:55

arctan得到的相位是(-π/2,π/2)的值,不知道你的所谓实际结果是什么结果??

songzy41 发表于 2006-12-26 08:52

对楼主使用的FFT.dll不了解,又在delphi中使用,很难说出什么原因。在调用arctan可能有几个函数(在MATLAB中就有几个),有的结果在-π/2~π/2之间;有的在-π~π之间;也有在0~2π之间。故请楼主了解一下调用的函数。

lq271311 发表于 2011-6-8 17:17

回复 3 # songzy41 的帖子

matlab里面有没有设置谱线的函数呢?

hcharlie 发表于 2011-6-8 19:49

回复 7 # lq271311 的帖子

在Matlab里设置了采样长度,比如1024点,FFT以后,谱线数为512,取有效谱线数400线。

lq271311 发表于 2011-6-8 21:18

回复 8 # hcharlie 的帖子

我就是这一点卡住了。
为什么fft之后谱线数是512呢?
不是应该有1024个数吗?
取有效谱线数是截取吗?后面的舍了?

hcharlie 发表于 2011-6-9 06:41

回复 9 # lq271311 的帖子

1024个数里面有一半是共扼对称的.
在随机振动试验中,如果采集一帧数据点1024点,经过FFT以后可以得到512个频率点的数据,为什么通常取400谱线而不取512线呢?
这是为了抗混滤波的需要。
我们知道实际滤波器带外衰减有一定的斜率,比如100dB/Oct,算是比较高的了,我们定最高频率2000Hz在400谱线上,则第512线为 2560Hz,根据镜像原理,只有624线及以上频率的数据才可能反射到400线以内,这样我们如将401-512谱线的数据扔掉,512~623线反射过来的数据也被扔掉了,相当于上例中2000~3120Hz(正好是滤波器的过渡段)的数据被扔掉,3120Hz以上频率的信号基本上已经被滤干净,反射到有用的数据段微乎其微了。
所以常用的400谱线相当于1024个采样,800线相当于2048点等等。采样频率是最高频率的2.56倍,对应2000Hz试验为5120Hz。
也可以不取2.56倍,有些早期的控制仪取到4倍,比如试验频率2560,采集频率10240,1024点取256线,这样对滤波器的要求要降低些。
页: [1]
查看完整版本: FFT 的问题