如果像songzy41所说仅仅是耗费资源上的差别,那么zfft就失去了本身的意义了
顺便再请教yangzj一个问题:在丁康的文章中,抽取数据为什么要从M,D+M,2D+M......开始呢,不加M可不可以?
我觉得ZFFT本身的意义就是加快运算速度,减少资源的耗费.虽然以目前计算机的计算能力来说,直接做N*D点的FFT也能做出来,而且不见得慢,但我想在当时提出这种方法的年代,要直接做是有困难的.
至于为什么从M+1点开始,是因为滤波后的前后M点是不准确的,把它们都给舍去了,因此,如果要求初相位的话,还得把它补偿回来 原帖由 songzy41 于 2006-8-17 18:53 发表
liuhuanjun不妨去看一下贴子:
http://vib.hit.edu.cn/forum/viewthread.php?tid=22068&highlight=%CF%B8%BB%AF
原数据长512,N=512,D=10,这样无法作ZFFT分析,把数据增长到5120后便能运行了。
songzy41问你一下,如果把数据增长的话,是不是在原来数据序列的尾部补零就行了? 原帖由 songzy41 于 2006-8-17 18:53 发表
liuhuanjun不妨去看一下贴子:
http://vib.hit.edu.cn/forum/viewthread.php?tid=22068&highlight=%CF%B8%BB%AF
原数据长512,N=512,D=10,这样无法作ZFFT分析,把数据增长到5120后便能运行了。
我在http://vib.hit.edu.cn/forum/viewthread.php?tid=22068&highlight=%CF%B8%BB%AF上你改正过的程序后面加上了
index=find(y1==max(y1));
result_freq=index()*fs/N/10
这两句话,想看看细化得到的距离最大频率分量108Hz多大,结果发现其频率=405,这是怎么回事啊? 原帖由 liuhuanjun 于 2006-8-17 20:44 发表
songzy41问你一下,如果把数据增长的话,是不是在原来数据序列的尾部补零就行了?
数据尾部补零的话,可能不行,因为尾部补零能减小谱分析中谱线之间的间隔(步长),而不能提高分辨两个接近频率分辨的能力。 原帖由 liuhuanjun 于 2006-8-17 21:09 发表
我在http://vib.hit.edu.cn/forum/viewthread.php?tid=22068&highlight=%CF%B8%BB%AF上你改正过的程序后面加上了
index=find(y1==max(y1));
result_freq=index()*fs/N/10
这两句话,想看看细化得到的 ...
你得到的最大值不是108是吗?它是405,这是108负频率的那一条谱线。 但是如果405是108负频率的那一条线的话,两者的幅值也应该是一样的阿,而且index应该包括两个元素,result_freq应该是108和405才对?
顺便问一下,增长数据不补零,应该怎么办呢?
先谢过 原帖由 liuhuanjun 于 2006-8-18 10:15 发表
但是如果405是108负频率的那一条线的话,两者的幅值也应该是一样的阿,而且index应该包括两个元素,result_freq应该是108和405才对?
顺便问一下,增长数据不补零,应该怎么办呢?
先谢过
这在理论上是正确的,但实际上是另一回事。405和109(108Hz)两条谱线的幅值相接近,但它们之间还是有误差,已列在下面,这是由于数值计算造成的。
y1(109)=7.67144801e+002
y1(405)=7.678313e+002 学习中,受益不浅 原帖由 songzy41 于 2006-8-17 18:53 发表
liuhuanjun不妨去看一下贴子:
http://vib.hit.edu.cn/forum/viewthread.php?tid=22068&highlight=%CF%B8%BB%AF
原数据长512,N=512,D=10,这样无法作ZFFT分析,把数据增长到5120后便能运行了。
songzy41,你给出的这个例子,虽然原数据长只有512点,但是由于增长了数据,而对于本例子中的信号x来说,本质上来说,原数据长度仍然是5120点,因为补上的数据是可知的
回复 #15 songzy41 的帖子
我刚接触频率细化,我想问一下,要做这个开始的信号的采样点数要比较大啊?http://vib.hit.edu.cn/forum/view ... hlight=%CF%B8%BB%AF,在这个帖子中,我看要做512点时,实际采样了5120点。然后用频率抽取的方法降低了采样率。是不是这样? 原帖由 happytaotao 于 2006-9-3 12:11 发表
在这个帖子中,我看要做512点时,实际采样了5120点。然后用频率抽取的方 ...
是这样的。我在http://vib.hit.edu.cn/forum/viewthread.php?tid=23569&highlight=czt贴了一个ZFFT函数,直接从《MATLAB在振动信号处理中的应用》的程序修改而来的。如果细看该函数的话,可以发现,如果采样了5120点,该函数是在5120点的基础上进行移频和FFT处理,再滤波、IFFT、下采样,然后再FFT得细化频谱的。就是该函数为了得到细化频谱,实际上先做了5120点FFT。
当然,我们现在计算机运算速度都很快,这样去计算也没有太大的问题,但如果要硬件实时处理, 这样做显然不合适。硬件实现上可参看《两种快速频域细化分析方法的研究》一文,文中给出了ZFFT的运算量的计算方法。
回复 #26 songzy41 的帖子
恩,对于要实时处理的系统,或者会受到处理器内存的限制,比如我要细化512点,根本就不可能作5120点FFT。而且这种细化的基础也应该是在所选分辨率能够分辨信号中的频率成分为前提的 吧?而他对于这种不能分辨的情况也没有什么提高,细化的本身就象一个放大器而已,是这样吗? 是这样的。 前几天看的是论坛中的细化程序,据说是有点问题,经高手们指点让我看看丁康教授写的论文,先正在看,希望已经看懂的坛友们能谈谈你们的经验!细化之后的频率分辨率是人为定的么?
[ 本帖最后由 miao7mijao 于 2006-9-22 08:17 编辑 ] 细化之后的频率分辨率是fs/N/D,fs为采样频率,N为做谱点数,D为细化倍数,设好了N,D,频率分辨率也就定了