BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / matlab / #3238同步于 2008/4/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖

Re: 【求助】关于fft

QuestionMark
2008/4/10镜像同步15 回复
这个1/N幅度因子 我觉得对应于傅立叶变换/反变换中的那个1/2pi因子 可以乘在正变换式子前,也可以乘在反变换式子前。取决于采用那种具体傅立叶变换的形式。 所以我猜测matlab的FFT采用的体系是1/N幅度因子乘在反变换上 而需要转换成1/N幅度因子乘在正变换上的形式 没细想,猜测的。可靠程度80%
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
zuobupt机器人#1 · 2008/4/11
【 在 dao 的大作中提到: 】 : 某资料上有这么一段: : N=length(signal);%signal是一向量 : X=fft(signal); % double-sided matlab amplitude spectrum : ................... 同问X/N是什么意思?一定要除吗?
QuestionMark机器人#2 · 2008/4/11
[em3] 其实想找个图片、公式做个说明的 但是没找到。。。 【 在 dao 的大作中提到: 】 : 坦白说,看得我云里雾里的
QuestionMark机器人#3 · 2008/4/11
这么说吧 去看dft的正变换、反变换计算公式 如果X没有除以N,那么在反变换回时域信号计算时,反变换公式里需要乘一个1/N因子(通常书上给出的公式是这样) 如果X除以N,那么在反变换回时域信号的时候,反变换公式里就不用再乘一个1/N因子 这是不同的人使用傅立叶变换的习惯,有人喜欢x->X的时候就把1/N乘上了,另一些人喜欢x->X的时候不管而在反变换X->x的时候再把这个1/N乘上(多数教科书上使用这种形式) lz的程序里X=X/N,说明之后的程序如果要反变换的话,就不用乘1/N的因子了。 不知道这回说清楚没。。。。。。
QuestionMark机器人#4 · 2008/4/11
再晕的话 就报告我 我给你当面讲好了:)
maths机器人#5 · 2008/4/11
拜大牛哦, dsp强人哦! 不过有句话貌似说错了, 如果没有除N的话反变换回来的时候直接ifft也是对的, 但是如果fft的时候除了N的ifft回来的时候就要乘以N。
QuestionMark机器人#6 · 2008/4/11
我印象里原理上讲N是必须要除的 原因和频域尺度的缩放和normalization有关 matlab里fft()和ifft()也是这样 应该是ifft()已经隐含了除N的过程 lz的程序里除了这个N,应该是和后续的操作有关。但这时再用ifft(X),结果会不对,因为相当于除了两次N 【 在 maths 的大作中提到: 】 : 拜大牛哦, : dsp强人哦! : 不过有句话貌似说错了, : ...................
maths机器人#7 · 2008/4/11
? 用fft的时候没有除N,你用ifft的时候回头也不用再处理的,直接就是对的。
QuestionMark机器人#8 · 2008/4/11
这个问题倒不是很复杂。。。可怜我表述能力欠缺 在matlab里,调用函数fft(),ifft(),实现正变换和反变换,不用人为的除以N。因为ifft()的实现中已经除了N。这个可以看matlab的doc fft里的公式。因此可以断定matlab使用的傅立叶变换的形式是第5楼中我说的后一种习惯。也就是楼主程序中注释的“matlab amplitude spectrum “ 但lz的程序中对X除了N,这就相当于从一种习惯切换到了另一种习惯(参见第5楼),也就是楼主程序中注释的“matlab amplitude spectrum “ to “fourier spectrum”。此时如果再直接用matlab的ifft(),得到的结果就不对了,因为被除了两次N。 【 在 maths 的大作中提到: 】 : ? : 用fft的时候没有除N,你用ifft的时候回头也不用再处理的,直接就是对的。
QuestionMark机器人#9 · 2008/4/11
[em9] 再说不清楚只能面谈了。。。 版主顺便组织个bg算了。。。