返回信息流这个1/N幅度因子
我觉得对应于傅立叶变换/反变换中的那个1/2pi因子
可以乘在正变换式子前,也可以乘在反变换式子前。取决于采用那种具体傅立叶变换的形式。
所以我猜测matlab的FFT采用的体系是1/N幅度因子乘在反变换上
而需要转换成1/N幅度因子乘在正变换上的形式
没细想,猜测的。可靠程度80%
这是一条镜像帖。来源:北邮人论坛 / matlab / #3238同步于 2008/4/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖
Re: 【求助】关于fft
QuestionMark
2008/4/10镜像同步15 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 dao 的大作中提到: 】
: 某资料上有这么一段:
: N=length(signal);%signal是一向量
: X=fft(signal); % double-sided matlab amplitude spectrum
: ...................
同问X/N是什么意思?一定要除吗?
这么说吧 去看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的因子了。
不知道这回说清楚没。。。。。。
拜大牛哦,
dsp强人哦!
不过有句话貌似说错了,
如果没有除N的话反变换回来的时候直接ifft也是对的,
但是如果fft的时候除了N的ifft回来的时候就要乘以N。
我印象里原理上讲N是必须要除的
原因和频域尺度的缩放和normalization有关
matlab里fft()和ifft()也是这样
应该是ifft()已经隐含了除N的过程
lz的程序里除了这个N,应该是和后续的操作有关。但这时再用ifft(X),结果会不对,因为相当于除了两次N
【 在 maths 的大作中提到: 】
: 拜大牛哦,
: dsp强人哦!
: 不过有句话貌似说错了,
: ...................
这个问题倒不是很复杂。。。可怜我表述能力欠缺
在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的时候回头也不用再处理的,直接就是对的。