永发信息网

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

答案:3  悬赏:80  手机版
解决时间 2021-02-03 18:46
  • 提问者网友:ミ烙印ゝ
  • 2021-02-02 20:02
Matlab中fft后的频谱幅度为什么要乘以2/N?
最佳答案
  • 五星知识达人网友:你哪知我潦倒为你
  • 2021-02-02 21:41
其实除以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后就不满足帕塞瓦尔定理了,这又该如何解释呢?追答应该是哪里定义的问题
全部回答
  • 1楼网友:冷風如刀
  • 2021-02-02 22:07
不知道你现在弄明白没。
MATLAB里面的FFT函数,用的是复数形式的fourier公式计算方法,返回的值是Cn。但是注意,这个Cn跟三角函数形式的fourier公式里的Cn意义不一样。前者中的Cn表示的直接就是振幅,即an与bn的平方和开平方,后者与模(an与bn的平方和开平方)相差2/N倍数。所以你如果用三角形式的fourier公式直接编程,返回Cn,能直接得到振幅,而用MATLAB自带函数FFT得到的要*2/N。。。可能几句话也讲不明白,就这样给你个思路,如果非要弄明白,你自己可以仔细看看高数里面两个Cn与an、bn的关系,自己试着推导一下。
如果有什么看法,可以再交流。
  • 2楼网友:从此江山别
  • 2021-02-02 21:47
其实除以N或除以N/2
来源于将连续的运算化为离散的运算
积分的时候一般积分符号后面的表达式是f(x)dx,
就是某个函数f(x)和自变量微分dx的乘积
而写成离散求和的时候通常只写f[n]的求和,略去了与dn相乘
可以遇见的是,某个函数f(x),如果我们用离散的办法去求其积分
随着采样点的则加,离散的和就会增大
实际上正确的办法是求和时要乘上采样的间隔,就是积分区间/N
对于很多离散的积分算法,例如卷积,最后结果都要除以采样点数N才能得到正确结果
而傅立叶变化也是一种积分变换,所以得到的结果就要除以N,才是正确的
而变换后的频谱通常将0频移到中间,分为对称的为正负频率(模对称,幅角反对称)
有时表示频谱的时候只需要用其一半正频率部分就够了
所以除以N之后还要乘以2,表示把正负频率的加在一起
而0频的直流分量,本身在对称点,已经是正负相加过的,所以只用除以N.
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯