问题标题:
Matlab中fft后的频谱幅度为什么要乘以2/N?RT,在网上看了很多这方面的解释还是不明白,什么直流分量除以N,谐波分量除以N/2的什么采样点不同,幅值也不同,还有一些不是除以N/2而是除以f
问题描述:
Matlab中fft后的频谱幅度为什么要乘以2/N?
RT,在网上看了很多这方面的解释还是不明白,什么直流分量除以N,谐波分量除以N/2的什么采样点不同,幅值也不同,还有一些不是除以N/2而是除以fs(采样频率)等等这些问题究竟是为什么,还有我自己也验证了直接fft后的频谱不用除以任何系数,它是满足帕塞瓦尔定理的,也就是说其频谱幅度根本不需要乘以2/N什么的,fft变化后取幅值abs(fft())就是其频谱的实际幅值!我是通过帕塞瓦尔定理来验证的,而如果乘以2/N后反而不满足帕塞瓦尔定理了,这个问题困惑我一两天了,其各位高手指点一下问题的真正原因,跪谢!
邓玉福回答:
其实除以N或除以N/2
来源于将连续的运算化为离散的运算
积分的时候一般积分符号后面的表达式是f(x)dx,
就是某个函数f(x)和自变量微分dx的乘积
而写成离散求和的时候通常只写f[n]的求和,略去了与dn相乘
可以遇见的是,某个函数f(x),如果我们用离散的办法去求其积分
随着采样点的则加,离散的和就会增大
实际上正确的办法是求和时要乘上采样的间隔,就是积分区间/N
对于很多离散的积分算法,例如卷积,最后结果都要除以采样点数N才能得到正确结果
而傅立叶变化也是一种积分变换,所以得到的结果就要除以N,才是正确的
而变换后的频谱通常将0频移到中间,分为对称的为正负频率(模对称,幅角反对称)
有时表示频谱的时候只需要用其一半正频率部分就够了
所以除以N之后还要乘以2,表示把正负频率的加在一起
而0频的直流分量,本身在对称点,已经是正负相加过的,所以只用除以N
丁成回答:
不知道你现在弄明白没。
MATLAB里面的FFT函数,用的是复数形式的fourier公式计算方法,返回的值是Cn。但是注意,这个Cn跟三角函数形式的fourier公式里的Cn意义不一样。前者中的Cn表示的直接就是振幅,即an与bn的平方和开平方,后者与模(an与bn的平方和开平方)相差2/N倍数。所以你如果用三角形式的fourier公式直接编程,返回Cn,能直接得到振幅,而用MATLAB自带函数FFT得到的要*2/N。。。可能几句话也讲不明白,就这样给你个思路,如果非要弄明白,你自己可以仔细看看高数里面两个Cn与an、bn的关系,自己试着推导一下。
如果有什么看法,可以再交流。
点击显示
其它推荐
热门其它推荐