Matlab中fft后的频谱幅度为什么要乘以2/N? 20

RT,在网上看了很多这方面的解释还是不明白,什么直流分量除以N,谐波分量除以N/2的什么采样点不同,幅值也不同,还有一些不是除以N/2而是除以fs(采样频率)等等这些问题... RT,在网上看了很多这方面的解释还是不明白,什么直流分量除以N,谐波分量除以N/2的什么采样点不同,幅值也不同,还有一些不是除以N/2而是除以fs(采样频率)等等这些问题究竟是为什么,还有我自己也验证了直接fft后的频谱不用除以任何系数,它是满足帕塞瓦尔定理的,也就是说其频谱幅度根本不需要乘以2/N什么的,fft变化后取幅值abs(fft())就是其频谱的实际幅值!我是通过帕塞瓦尔定理来验证的,而如果乘以2/N后反而不满足帕塞瓦尔定理了,这个问题困惑我一两天了,其各位高手指点一下问题的真正原因,跪谢! 展开
 我来答
wentiancsjnx
2020-05-08
知道答主
回答量:2
采纳率:0%
帮助的人:1403
展开全部

不知你弄懂没有,这里我回答一下为什么要乘以2吧,至于为什么要除以N,我比较赞同上一个回答中用户dukinkin从积分角度来进行的理解。

以下是我对为什么要乘以2的理解,如果不对,请批评指正:

你所见到的乘以2的情景,大概是在MATLAB中fft函数的示例中,其中用到的信号是sin,比如我这里用A1=0.7, f1=50; A2=1, f2=200:X(t)=0.7sin(100*pi*t) + sin(400 * pi * t)。

不过,其实X(t)还可以表示为:

X(t)的另一种表示方法

这个表示方法看起来比较绕,但是其实它在频域是比较直观的,由此可以理解:Y=fft(X);  P2 = abs(Y/L);【这里的字母含义跟fft函数的说明文件中一样】得到的双侧振幅谱(如下图,我在运算中用到的基本参数为:采样频率1000,采样点数100)中,那几个尖脉冲就是0.35和0.5,即A1/2和A2/2

因此,在表示单侧振幅谱时,MATLAB示例想要弄成尖脉冲直接等于sin信号的幅值A1、A2的那种直观的形式,就乘2了

dukinkin
推荐于2018-05-11 · TA获得超过1.3万个赞
知道大有可为答主
回答量:2444
采纳率:90%
帮助的人:935万
展开全部
其实除以N或除以N/2
来源于将连续的运算化为离散的运算

积分的时候一般积分符号后面的表达式是f(x)dx,
就是某个函数f(x)和自变量微分dx的乘积

而写成离散求和的时候通常只写f[n]的求和,略去了与dn相乘

可以遇见的是,某个函数f(x),如果我们用离散的办法去求其积分
随着采样点的则加,离散的和就会增大
实际上正确的办法是求和时要乘上采样的间隔,就是积分区间/N

对于很多离散的积分算法,例如卷积,最后结果都要除以采样点数N才能得到正确结果

傅立叶变化也是一种积分变换,所以得到的结果就要除以N,才是正确的

而变换后的频谱通常将0频移到中间,分为对称的为正负频率(模对称,幅角反对称)

有时表示频谱的时候只需要用其一半正频率部分就够了
所以除以N之后还要乘以2,表示把正负频率的加在一起
而0频的直流分量,本身在对称点,已经是正负相加过的,所以只用除以N
追问
先谢谢你的回答,和网上的解释大致都差不多,但如果除以N或者N/2后就不满足帕塞瓦尔定理了,这又该如何解释呢?
追答
应该是哪里定义的问题
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
overstand
高粉答主

2015-11-04 · 繁杂信息太多,你要学会辨别
知道大有可为答主
回答量:1.4万
采纳率:88%
帮助的人:1661万
展开全部
其实除以N或除以N/2
来源于将连续的运算化为离散的运算

积分的时候一般积分符号后面的表达式是f(x)dx,
就是某个函数f(x)和自变量微分dx的乘积

而写成离散求和的时候通常只写f[n]的求和,略去了与dn相乘

可以遇见的是,某个函数f(x),如果我们用离散的办法去求其积分
随着采样点的则加,离散的和就会增大
实际上正确的办法是求和时要乘上采样的间隔,就是积分区间/N

对于很多离散的积分算法,例如卷积,最后结果都要除以采样点数N才能得到正确结果

而傅立叶变化也是一种积分变换,所以得到的结果就要除以N,才是正确的

而变换后的频谱通常将0频移到中间,分为对称的为正负频率(模对称,幅角反对称)

有时表示频谱的时候只需要用其一半正频率部分就够了
所以除以N之后还要乘以2,表示把正负频率的加在一起
而0频的直流分量,本身在对称点,已经是正负相加过的,所以只用除以N.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友21caded
2014-12-03 · TA获得超过112个赞
知道答主
回答量:40
采纳率:0%
帮助的人:37.1万
展开全部
不知道你现在弄明白没。
MATLAB里面的FFT函数,用的是复数形式的fourier公式计算方法,返回的值是Cn。但是注意,这个Cn跟三角函数形式的fourier公式里的Cn意义不一样。前者中的Cn表示的直接就是振幅,即an与bn的平方和开平方,后者与模(an与bn的平方和开平方)相差2/N倍数。所以你如果用三角形式的fourier公式直接编程,返回Cn,能直接得到振幅,而用MATLAB自带函数FFT得到的要*2/N。。。可能几句话也讲不明白,就这样给你个思路,如果非要弄明白,你自己可以仔细看看高数里面两个Cn与an、bn的关系,自己试着推导一下。
如果有什么看法,可以再交流。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式